如何使用AWS CDK为ECS任务定义注入Secrets Manager指定JSON键的密钥
你之前的写法存在两处核心错误,按以下方案修改即可正常使用:
ecs.Secret.from_secrets_manager要求入参为 Secrets Manager 的ISecret实例,你调用secret_value_from_json后返回的是SecretValue值类型,不符合入参要求- 带
field参数时报错是因为之前的调用逻辑错误,正确调用from_secrets_manager时不会将Secrets Manager资源识别为SSM参数,不会触发该报错
正确代码示例
# 先加载完整的 Secrets Manager 密钥实例 db_secret = sm.Secret.from_secret_complete_arn( self, 'secret-db', 'arn:aws:secretsmanager:eu-west-1:accountid:secret:secret-name' ) # 构造ECS密钥配置,通过field参数直接提取密钥内的对应JSON键 secrets = { "DBUSER": ecs.Secret.from_secrets_manager( secret=db_secret, field="DBUSER" ) } # 容器定义部分无需修改 container: ecs.ContainerDefinition = task_definition.add_container( "reports", image=ecs.RepositoryImage.from_ecr_repository( ecr.Repository.from_repository_name(self, "container", "container"), tag=image_tag, ), memory_limit_mib=2048, logging=ecs.LogDriver.aws_logs(stream_prefix="container-"), secrets=secrets )
逻辑说明
ecs.Secret.from_secrets_manager的field参数原生支持提取Secrets Manager密钥中JSON结构的指定键值,不需要手动提前调用secret_value_from_json取值。该写法生成的CloudFormation模板会自动匹配ECS任务定义的密钥格式要求,不会出现误识别为SSM参数的问题。
内容的提问来源于stack exchange,提问作者NiRR
相关产品推荐
相关产品推荐

