小编Phi*_*mer的帖子

AWS CDK:如何创建可由多个委托人担任的 IAM 角色?

我正在部署一个将由 CloudFront 使用的 Lambda 函数。因此,该函数的执行角色需要由edgelambda.amazonaws.com 和lambda.amazonaws.com 承担。如果我手动执行此操作,该策略将如下所示:

{
    "Version": "2012-10-17",
    "Statement": [
    {
        "Effect": "Allow",
        "Principal": {
            "Service": [
                "edgelambda.amazonaws.com",
                "lambda.amazonaws.com"
            ]
        },
        "Action": "sts:AssumeRole"
    }
    ]
}
Run Code Online (Sandbox Code Playgroud)

在 AWS CDK 中进行设置时,该类iam.Role仅允许您指定一个初始假设主体,例如:

lambda_role = iam.Role(
    self,
    "lambda_redirect_role",
    assumed_by=iam.ServicePrincipal("edgelambda.amazonaws.com"),
    managed_policies=[
        iam.ManagedPolicy.from_aws_managed_policy_name("service-role/AWSLambdaBasicExecutionRole"),
        iam.ManagedPolicy.from_aws_managed_policy_name("AWSXrayWriteOnlyAccess")
    ],
)
Run Code Online (Sandbox Code Playgroud)

所以我试图找到添加第二个主体的最佳/最干净的方法。该文档说我可以使用假设_角色_策略来检索策略文档,然后对其进行操作。

所以我尝试过:

policy = lambda_role.assume_role_policy
policy.add_statements(
    iam.PolicyStatement(
        actions=["sts:AssumeRole"],
        effect=iam.Effect.ALLOW,
        principals=[
            iam.ServicePrincipal("lambda.amazonaws.com")
        ]
    )
)
Run Code Online (Sandbox Code Playgroud)

但这给了我这个不太理想的政策:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "edgelambda.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    },
    {
      "Effect": …
Run Code Online (Sandbox Code Playgroud)

aws-cdk

40
推荐指数
1
解决办法
4万
查看次数

如何在 json.load() 中使用 mock_open?

我正在尝试进行单元测试,以验证从 JSON 编码文件中读取凭据的函数。由于凭证本身不是固定的,单元测试需要提供一些,然后测试它们是否被正确检索。

这是凭证功能:

def read_credentials():
    basedir = os.path.dirname(__file__)
    with open(os.path.join(basedir, "authentication.json")) as f:
        data = json.load(f)
        return data["bot_name"], data["bot_password"]
Run Code Online (Sandbox Code Playgroud)

这是测试:

def test_credentials(self):
    with patch("builtins.open", mock_open(
        read_data='{"bot_name": "name", "bot_password": "password"}\n'
    )):
        name, password = shared.read_credentials()
    self.assertEqual(name, "name")
    self.assertEqual(password, "password")
Run Code Online (Sandbox Code Playgroud)

但是,当我运行测试时,json 代码因解码错误而爆炸。查看 json 代码本身,我很难理解为什么模拟测试失败,因为 json.load(f) 只是调用 f.read() 然后调用 json.loads()。

确实,如果我将身份验证功能更改为以下内容,则单元测试有效:

def read_credentials():
    # Read the authentication file from the current directory and create a
    # HTTPBasicAuth object that can then be used for future calls.
    basedir = os.path.dirname(__file__)
    with open(os.path.join(basedir, "authentication.json")) …
Run Code Online (Sandbox Code Playgroud)

json mocking python-3.x

6
推荐指数
1
解决办法
6547
查看次数

如何使用Python请求库和unicode文件名进行多部分上传?

我正在尝试使用其REST API将文件上传到JIRA.上传是作为多部分POST完成的.只要文件名是ASCII,代码就可以正常工作.如果它们包含任何非ASCII字符,则JIRA会给出500错误.

我试图通过在POST操作中编码文件名来纠正它,文件上传成功,但JIRA显示编码文件名的ASCII版本,而不是将文件名解码为原始UTF-8.

以下是Python代码的片段:

files = {'file': (urllib2.quote(zd_attachment['file_name'].encode('utf8')), open('/tmp/%s' % zd_attachment['file_name'], 'rb'), zd_attachment['content_type'])}
mp_header = {'X-Atlassian-Token': 'nocheck'}
r = requests.post("%s/rest/api/2/issue/%s/attachments" % (jira_url, issue_id), headers=mp_header, files=files, auth=jira_auth)
Run Code Online (Sandbox Code Playgroud)

我使用错误的方法来编码文件名吗?为了正确处理Unicode文件名,我是否遗漏了其他内容?

python unicode utf-8 python-requests

4
推荐指数
1
解决办法
1072
查看次数

Windows Phone:如何判断Deployment.Current.Dispatcher.BeginInvoke何时完成?

我试图通过将数据加载部分放入后台线程而不是在页面加载时在前台运行来使WP7应用程序中的页面UI更具响应性.

线程代码基本上通过一些数据工作,并将项添加到可观察集合中; 为了避免异常问题,我执行以下操作:

Deployment.Current.Dispatcher.BeginInvoke(() => { _events.Add(_newItem); });
Run Code Online (Sandbox Code Playgroud)

以便在UI线程中将项添加到集合中.

我现在遇到的问题是代码的后续部分需要对集合执行foreach,以便找出插入新项目的位置而不是仅添加它.不幸的是,我发现的是,当我处于foreach循环中时,UI线程有时可以执行其Add,立即打破foreach.

从我已经完成的阅读开始,看起来一种方法是调用EndInvoke()以阻止后台线程,直到完成UI部分.不幸的是,看起来Wp7/Silverlight实现不支持EndInvoke.

有关如何在开始使用foreach之前检查添加是否已完成的任何建议?

谢谢.

菲利普

c# begininvoke windows-phone-7

3
推荐指数
1
解决办法
3101
查看次数

如何使用boto获取Route 53的所有资源记录集?

我正在编写一个脚本,确保我们的所有 EC2 实例都有 DNS 条目,并且所有 DNS 条目都指向有效的 EC2 实例。

我的方法是尝试获取我们域的所有资源记录,以便在检查实例名称时可以迭代列表。

然而,获取所有资源记录似乎并不是一件非常简单的事情!GET ListResourceRecordSets 的文档似乎表明它可能会做我想要的事情,而 boto 等效项似乎是 get_all_rrsets ...但它似乎没有像我预期的那样工作。

例如,如果我去:

r53 = boto.connect_route53()
zones = r53.get_zones()
fooA = r53.get_all_rrsets(zones[0][id], name="a")
Run Code Online (Sandbox Code Playgroud)

然后我得到 100 个结果。如果我接着去:

fooB = r53.get_all_rrsets(zones[0][id], name="b")
Run Code Online (Sandbox Code Playgroud)

我得到相同的100 个结果。我是否误解了 get_all_rrsets 没有映射到 ListResourceRecordSets 上?

关于如何获取 53 号公路的所有记录,有什么建议吗?

更新: cli53 ( https://github.com/barnybug/cli53/blob/master/cli53/client.py ) 能够通过其以 BIND 格式 (cmd_export) 导出 Route 53 区域的功能来执行此操作。然而,我的 Python 技能还不够强,无法让我理解该代码是如何工作的!

谢谢。

boto amazon-route53

3
推荐指数
1
解决办法
7415
查看次数