gpt4 book ai didi

amazon-web-services - 如何向您的应用程序代码提供 CDK 生成的资源名称?

转载 作者:行者123 更新时间:2023-12-03 07:22:05 25 4
gpt4 key购买 nike

假设您有一个 CDK 应用程序,它部署了具有自动生成名称的 S3 存储桶。在同一存储库中,您有一个应用程序需要知道此存储桶名称。向应用程序提供此名称的最佳做法是什么?

我正在考虑的一些方法:

  1. cdk Synth的输出进行硬编码。这涉及到将资源的物理 ID 与逻辑 ID 拼凑在一起,这是一种黑客行为,而且它不适用于导入到堆栈中且其物理 ID 只能在 AWS 控制台上找到的资源。
  2. 将必要的 ID 定义为堆栈输出,并按照 cdk deploy 提供的方式对它们的值进行硬编码。这实际上对于我的用例来说似乎很好,但我不喜欢仅仅为了提取一些 ID 就必须执行危险的操作。 (编辑:我刚刚意识到aws cloudformation describe-stacks是一个更好的选择)
  3. 将 SSM 参数定义为 CDK 堆栈的一部分,并将资源 ID 注入(inject)到这些参数中。我不喜欢依赖远程服务进行配置,因此我可能必须在发布应用程序代码时在部署时获取这些值。

Amazon 文档反对硬编码,这样您就可以假设在另一个 AWS 账户或区域上启动您的应用程序实例,但对于我的小型企业来说,这确实是大材小用。我不反对硬编码非 secret 配置。

编辑:与此同时,我正在实现上面的选项 2,将以下 JSON 转储到我的存储库中,以便由我的代码导入:

> aws cloudformation describe-stacks --stack-name CommonStack | jq '.Stacks[0].Outputs | map({ (.OutputKey): .OutputValue }) | add'
{ MyBucketName: "my-bucket-name" }

最佳答案

云端技术,如 Environment variablesSSM Parameters是与云端应用程序代码共享资源标识符的自然解决方案。


尽管如此,您可以在部署时使用 --outputs-file 标志将 CfnOutput 值保存到磁盘。这使得在 CLI 命令中本地使用资源标识符变得容易,或者 local testing .

使用 CfnOutput 设置资源值构造:

new cdk.CfnOutput(this, "BucketName", { value: bucket.bucketName });

使用标志将结果保存到磁盘:

cdk deploy --outputs-file cdk.outputs.json

cdk.outputs.json:

{
"MyStack6CDBDE16": {
"BucketName": "mystack6cdbde16-mybucketf68f3ff0-1hc6tiecjann2"
}
}

关于amazon-web-services - 如何向您的应用程序代码提供 CDK 生成的资源名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76389227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com