我最近使用 CloudFormation + Step Functions 的课程是始终首先使用 boto3 或任何其他 SDK 创建状态机,因为 CloudFormation 不会告诉您是否缺少任何权限。boto3 调用将立即失败,并显示非常清晰的错误消息。而 CloudFormation (CFN) 只会尝试并重试近一个小时,然后甚至无法正确回滚。我认为状态机更新的 CFN 实现同样糟糕。我的建议是始终删除一台机器,然后用新名称创建一台新机器。这对于不更新的 CFN 资源来说是非常典型的 t 在实际场景中真正起作用,因为删除是异步的,我怀疑 CFN 实现没有考虑到这一点,当需要替换资源时,它只是尝试立即创建一个具有相同名称的新资源,并且显然失败了。没有开放的 CFN 错误列表,所以这一切都是猜测。本周早些时候,我参加了 AWS 峰会,与一位 AWS 架构师(AWS 员工)交谈,他只是脸红了。
这是我的状态机创建没有失败的 IAM 角色:
StateMachineRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Principal:
Service:
- !Sub "states.${AWS::Region}.amazonaws.com"
Action: sts:AssumeRole
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AWSLambdaRole
- arn:aws:iam::aws:policy/AWSStepFunctionsFullAccess
Policies:
- PolicyName: StateMachineAccessPolicy
PolicyDocument:
Statement:
- Effect: Allow
Action:
- events:*
Resource: "*"