如何解决AWS Step Function ContainerOverrides清除已定义的环境变量
我正在使用AWS Step Function调用Fargate容器。 ECS任务定义中定义了多个环境变量,一些具有固定值,一些来自Systems Manager参数存储。状态机使用ContainerOverrides
添加了一个附加的环境变量。
不幸的是,这似乎替代而不是添加了任务定义中指定的环境变量。
如果我没有在步骤定义中定义任何环境变量,那么任务定义中的那些将在运行时存在。如果我在步骤定义中甚至定义了一个变量,那么在运行时仅存在步骤定义中的那些变量。
如何获取Fargate / ECS / Step函数来合并环境变量,而不是全部替换?
状态机
{
"Comment": "Sample State Machine","StartAt": "Prerequisites","States": {
"Prerequisites": {
"Type": "Task","Resource": "arn:aws:states:::ecs:runTask.sync","Parameters": {
"Cluster": "arn:aws:ecs:us-west-2:1232123123:cluster/step-function-executor","TaskDefinition": "step-function-generic-script-executor","LaunchType":"FARGATE","NetworkConfiguration": {
"AwsvpcConfiguration" : {
"AssignPublicIp" : "DISABLED","SecurityGroups" : [
"sg-123","sg-456"
],"Subnets" : [
"subnet-123","subnet-456"
]
}
},"Overrides": {
"ContainerOverrides": [
{
"Name": "step-function-generic-script-container","Environment": [
{
"Name": "STEP_SCRIPT_NAME","Value": "db-daily-backup-01-prereq"
}
]
}
]
}
},"End": true
}
}
}
任务定义
解决方法
这是ContainerOverrides工作的方式,与其应有的工作方式相反。您可以通过以下两种方法解决此问题:
-
创建启动状态机的Lambda函数。
- 要调用状态机时,请调用Lambda函数。
- 该Lambda函数将调用
describe_task_definition
ECS SDK函数以获取您的任务定义的完整详细信息,并在调用start_execution
函数的步骤函数时,将Parameters
的所有内容一起传递带有新的/更新的环境变量。 - Lambda函数可以计划或按需运行。
-
列出状态机中的所有环境变量。
- 就像您提到新变量一样,您也可以提及所有先前的变量。 (它有冗余的缺点)
- 您可以对所有变量使用SSM参数存储,然后在状态机任务定义中也提及所有路径。
第一个选项需要一些自定义实现,但可以使您免于手动配置。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。