CloudFormation未自动为Step Function状态机名称添加StackName的疑问与需求
问题解答
这是预期行为,不是CloudFormation的Bug。
CloudFormation没有统一的默认命名规则,不同资源类型的命名逻辑由对应服务与CloudFormation的集成设计决定:
- IAM Role、CloudWatch LogGroup这类资源,CFN默认会自动拼接栈名、逻辑资源名和唯一ID;
- 而Step Functions的
AWS::StepFunctions::StateMachine资源,在未显式指定StateMachineName时,CFN的设计就是仅用逻辑资源名加唯一ID生成名称,这是该资源类型的固有规则。
如果要让状态机名称自动带上栈名,生成[stackname]-[resource]-[uniqid]格式,只需在模板中用CFN内置函数显式拼接名称即可:
Resources: MyStateMachine: Type: AWS::StepFunctions::StateMachine Properties: StateMachineName: !Sub - "${StackName}-${ResourceName}-${UniqueId}" - StackName: !Ref AWS::StackName ResourceName: !Ref AWS::LogicalResourceName UniqueId: !Select [2, !Split ["/", !Ref AWS::StackId]] # 以下为状态机其他必填属性示例 DefinitionString: | { "Comment": "Sample State Machine", "StartAt": "PassState", "States": { "PassState": { "Type": "Pass", "End": true } } } RoleArn: !GetAtt MyStateMachineExecutionRole.Arn
这段代码通过!Sub函数拼接栈名、逻辑资源名,以及从栈ID中提取的唯一标识部分,完全匹配你想要的命名格式。
内容的提问来源于stack exchange,提问作者mskogorev
相关产品推荐
相关产品推荐

