【问题标题】:(cdk + boto3): Use boto3 inside CDK application(cdk + boto3):在 CDK 应用程序中使用 boto3
【发布时间】:2021-08-26 05:21:55
【问题描述】:

我使用ENV=<enviornment name> cdk synth --profile <PROFILE_NAME> --all 针对不同的环境运行 CDK - 现在我想在我的 CDK 应用程序中创建 SSM 秘密参数。这应该只在脚手架期间发生,但需要 boto3,因为没有 CloudFormation 等效项。如何将 CDK 身份验证与 boto3 一起重用?我在 Python 中使用 CDK 和 boto3 进行开发,并使用 MFA。有什么想法吗?

#1 试用 - 使用缓存凭据

不工作,因为 CDK 没有缓存凭据 :(

我遇到了一些使用 boto3 检索缓存凭据的方法。我仍然需要与 CDK 一起使用的配置文件,因为没有我收到错误消息 botocore.exceptions.NoCredentialsError: Unable to locate credentials。有人知道如何获取代码中使用的 AWS CDK 配置文件吗?也许是解决问题的第一步。

# By default the cache path is ~/.aws/boto/cache
cli_cache = os.path.join(os.path.expanduser("~"), ".aws/cli/cache")

# Construct botocore session with cache
session = botocore.session.get_session()
session.get_component("credential_provider").get_provider(
    "assume-role"
).cache = credentials.JSONFileCache(cli_cache)

# Create boto3 client from session
return boto3.Session(botocore_session=session)

【问题讨论】:

  • 这是一个不好的做法,你不应该在合成过程中进行任何网络调用。 aws.amazon.com/blogs/devops/… 为什么不使用 ssm.StringParameter 构造,或者更好的是 secretsmanager.Secret
  • 既然您已经知道上下文,为什么不将配置文件作为上下文参数传递,这是获取动态参数访问 CDK CLI 的简单且推荐的方法。参考docs.aws.amazon.com/cdk/latest/guide/context.html
  • @gshpychka 在合成器之后我该怎么做 - 有没有我没看到的生命周期钩子?
  • @TechFree 也考虑过这一点,但是 a) 我已经将配置文件汇集到 CDK 并且不知道如何执行此操作,b) 这样我将不得不第二次进入 MFA .
  • 你不能,你可以将它作为合成器的一部分,就像任何其他 CDK 组件一样。

标签: boto3 aws-cdk


【解决方案1】:

我建议查看custom resources,这是一种在 CDK 中调用 AWS api(甚至执行任何代码)的方法。

【讨论】:

    【解决方案2】:

    另一种方法是使用 Lambda。在此example 中,您可以看到在配置 RDS 后如何创建表。在您的情况下,您可以将表创建替换为 SSM 秘密参数创建。

    【讨论】:

    • 这不是自定义资源方式吗?
    • 一般意义上是的
    猜你喜欢
    • 2022-11-12
    • 2020-08-10
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    • 2022-10-06
    • 1970-01-01
    • 2020-06-28
    • 1970-01-01
    相关资源
    最近更新 更多