嘿,伙计们,我有下面的CF配置,并希望从SecretManager中解析一个秘密。
DefinitionBackend:
Type: AWS::ECS::TaskDefinition
DependsOn: TaskPolicy
Properties:
ExecutionRoleArn: !GetAtt TaskRole.Arn
NetworkMode: awsvpc
RequiresCompatibilities:
- FARGATE
Cpu: 1024
Memory: 5120
ContainerDefinitions:
- Name: admin
Essential: true
Image: !Sub XXXXXXXXXX.dkr.ecr.${AWS::REGION}.amazonaws.com/some-image:${AWS::StackName}-${ImageTag}
PortMappings:
- ContainerPort: 8003
Command:
- ....
Secrets:
- Name: DATABASE_URL
ValueFrom: '{{resolve:secretsmanager:Dev:SecretString:DATABASE_URL}}'
秘密称为Dev
,其中有几个KEY:VALUE
对,比如DATABASE_URL
,它是一个数据库连接字符串。我想使用上面的配置来解决来自SecretManager的秘密,但是我得到了一个错误:
Resource handler returned message: "Invalid request provided: Create TaskDefinition: The Systems Manager parameter name specified for secret DATABASE_URL is invalid. The parameter name can be up to 2048 characters and include the following letters and symbols: a-zA-Z0-9_.-,
数据库字符串采用以下格式,以前在环境变量中工作得很好:
"DATABASE_URL":"postgresql://web:PASSWORD@dev.234098234uuoi.eu-central-1.rds.amazonaws.com:5432/database"
你有什么想法吗?我是把它检索错了,还是只需要把它转换成一种不同的格式,比如Base64,才能把它和秘密一起使用呢?
发布于 2022-08-03 15:48:18
您正在尝试解析秘密的值,并将该值直接传递到任务定义中。这不是ECS容器机密的工作方式。它问您从哪里从获取值,而不是实际值是什么。你需要传递秘密的ARN,而不是秘密的价值。
我认为您需要将模板更改为:
ValueFrom: !GetAtt Dev.Arn
当容器启动时,ECS服务将在Secrets中查找秘密的值,并将其添加为当时的环境变量。
https://stackoverflow.com/questions/73224083
复制相似问题