python - AWS Cloudformation,使用 Python 3 从键获取值的最佳方式

标签 python python-3.x amazon-web-services aws-cloudformation boto3

我有一个 Cloudformation 模板,它定义了以下输出值:

Outputs:
  AccessKeyForUser:
    Value:
      !Ref CFNKeys
  SecretAccessKeyForUser:
    Value: !GetAtt CFNKeys.SecretAccessKey

在带有 boto3 的 Python 3 中,我目前以这种方式获取输出值:

session = boto3.session.Session()
cf_resource = session.resource('cloudformation')
stack = cf_resource.Stack(stackname)

code_commit_access_key = next(filter(lambda x: x['OutputKey'] == 'AccessKeyForUser', stack.outputs))['OutputValue']
code_commit_access_secret = next(filter(lambda x: x['OutputKey'] == 'SecretAccessKeyForUser', stack.outputs))['OutputValue']

我认为这不是最好的方法。有没有更好的方法来获取输出值?

最佳答案

因此,您真正想要的是拥有一本可以查询您感兴趣的所有键的字典。因此,让我们使用 dict comprehension 创建一个字典。 ,这可能是实现这一点的最短但仍然是Python式的方法:

cf_resource = boto3.resource("cloudformation")
stack = cf_resource.Stack(stackname)

outputs = {output["OutputKey"]: output["OutputValue"] for output in stack.outputs}

code_commit_access_key = outputs["AccessKeyForUser"]
code_commit_access_secret = outputs["SecretAccessKeyForUser"]

请注意,如果 stack.outputs 包含具有相同 OutputKey 的多个项目,这可能会导致意外结果,因为您只能获得代表的最新此类项目在字典里。不过,我相信在这种特殊情况下这不需要担心,因为 CloudFormation 输出值名称无论如何都必须是唯一的。

关于python - AWS Cloudformation,使用 Python 3 从键获取值的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62502245/

相关文章:

python - 如何制作漂亮的 Python 网络应用程序?

python - 求和不起作用

python - 与 re.sub 混淆

python - Pandas 在哪里过滤将数据类型重置为默认值?

amazon-web-services - 使用 UDP ECS 服务对 NetworkLoadBalancer 进行健康检查

python - 模型未显示在 Django Admin 中

python - 只能将 str (不是 "bytes")连接到 str

python - 在 python 3 中以二进制模式打开带有通用换行符的文件

amazon-web-services - 如何根据环境给出云形成的单独变量

amazon-web-services - AWS Appsync 架构错误(资源未处于状态 stackUpdateComplete)