AWS云表单任务定义条件命令
比方说,我有一个应用程序,可以运行在空运行模式,在命令行上设置一个标志; myapp --dryrun
, myapp --dryrun
的任务定义是:
MyTaskDefinition Type: AWS::ECS::TaskDefinition Properties: ContainerDefinitions: - Name: myApp Image: user/myapp:latest Command: - ./myapp - --dryrun Environment: - Name: SOME_ENV_VAR Value: !Ref SomeEnvVar
我正在尝试为可在开发和生产环境中使用的任务定义创build单个CloudForm模板,其中干运行标志仅设置为开发环境。
有没有一些方法来设置条件命令,或者我会诉诸一个hackystring,我通过像:
Command: - ./myapp - !Ref DryRun
最近的解决scheme是使用If
函数,该函数在true时设置标志,如果为false,则使用AWS::NoValue
。
AWS::NoValue
将完全移除该属性,这意味着对于true的命令是["./myapp", "--dryrun"]
,而false时的命令是["./myapp"]
。
不幸的是,CloudForm参数没有Bool
types,所以你必须把它作为一个String
传入,然后使用一个Condition
从String
转换为一个Bool
。
MyTaskDefinition Type: AWS::ECS::TaskDefinition Properties: ContainerDefinitions: - Name: myApp Image: user/myapp:latest Command: - ./myapp - Fn::If: - UseDryRun - --dryrun - Ref: AWS::NoValue Parameters: DryRun: Type: String AllowedValues: # No bool parameter in CFN - true - false Conditions: UseDryRun: !Equals [ !Ref DryRun, true ]