amazon-web-services - 我需要一种策略来处理 CDK 中的可选 SSM 参数存储参数
问题描述
在我的堆栈定义中,我从 SSM Parameter Store 中提取了一些参数......
const p1 = ssm.StringParameter.fromStringParameterAttributes( ... )
const p2 = ssm.StringParameter.fromStringParameterAttributes( ... )
然后我将它们作为环境变量传递给相关的 lambdas ......
environment: {
PARAM_ONE: p1.stringValue
PARAM_TWO: p2.stringValue
}
但是我不希望所有这些参数都是强制性的。我希望将存在的那些作为 env vars 传入,而那些不只是保持未定义的,因为我的应用程序无论如何都有默认值。但是,尝试检查 p1.stringValue 的值只是给了我一个 Token,而不是一个值,所以我不能根据它的存在或不存在做任何逻辑:https ://docs.aws.amazon.com/cdk/最新/指南/tokens.html
如果我要求参数并且它没有在 SSM 参数存储中定义,那么当它尝试构建变更集并且部署失败时,我会收到一个我无法捕获或忽略的错误......
MyApp: creating CloudFormation changeset...
❌ MyAppStack failed: Error [ValidationError]: Unable to fetch parameters [/myapp/param1,/myapp/param2] from parameter store for this account.
那么如何处理在部署时可能存在或不存在的 SSM 参数?
解决方案
我假设您只是在导入中获取管理器,而不是在您的秘密中获取实际值。如果是这种情况,那么您最好的选择是利用 SDK 为您执行此操作 - 使用 SDK 进行简单调用(将在 cdk 部署或 cdk 合成器的合成阶段运行)以查看是否所述 SMM 字段/组存在。如果他们这样做,请继续导入它们。
我对 Layers 做了一些非常相似的事情——层的 from 方法需要版本号——这可能随时改变。所以我有一个小函数,可以使用 SDK 获取给定层的最新版本号,然后我可以使用它将层定义导入到我的堆栈中。
如果您试图在秘密管理器参数中获取实际秘密......对于大多数情况来说,这更适合在 CDK 之外 - 在您需要秘密的确切位置完成,这样您就不会在某处以纯文本形式获得秘密值.
推荐阅读
- android - 后端 API 调用的有效 FirebaseIdToken
- flutter-layout - Web 应用程序 ui 在特定的移动浏览器中工作异常
- node.js - 存储在 AWS s3 存储桶中的空文件
- smtp - Google OAuth API 验证的“验证要求例外”中的“单账户 SMTP 插件”是什么?
- python - 为堆叠的双向编码器-解码器 seq 添加波束解码器到 seq 模型
- amazon-web-services - 如何使用 CloudFormation 在指标过滤器中设置警报
- c# - 是否可以在 C# 中使用 Aspose.Word 在 Microsoft Word 文档中的特定位置插入图标
- flutter - 如何在 Flutter 中自定义底部导航栏
- python - 允许单个表单一次更新 2 个表
- javascript - 服务不可用 - 对 Node 后端的零大小对象 VueJs API 调用