我使用无服务器框架和 AWS Step Functions 插件来构建订单结账流程的状态机。在其中一个州,我尝试将消息发布到 Amazon SNS 主题。这是我的 serverless.yml 文件的相关部分:
PrepareOrder:
Type: Task
Resource: arn:aws:states:::sqs:sendMessage.waitForTaskToken
Parameters:
QueueUrl: !Ref OrdersQueue
MessageBody:
Input.$: "$"
Token.$: "$$.Task.Token" #From the context object
ResultPath: "$.courierStatus"
Catch:
- ErrorEquals: [NoCourierAvailable]
ResultPath: "$.courierError"
Next: RefundCustomer
Next: DispatchOrder
DispatchOrder:
Type: Task
Resource: arn:aws:states:::sns:publish
Parameters:
TopicArn: "arn:aws:sns:us-east-1:************:NotifyCourier"
Message.$: "$"
Next: Dispatched
在此配置中,我将资源指定为 arn:aws:states:::sns:publish,这是 SNS 发布操作的 ARN。
我没有为此状态机显式创建 IAM 角色。但是,当我检查与状态机关联的 IAM 角色时,我发现它具有 sns:Publish 权限。我还注意到,当我更改资源值时,IAM 角色中的权限也会相应更新。
当我在无服务器框架中指定此类资源时,AWS Step Functions 是否会自动创建并更新具有必要权限的 IAM 角色?还是还有其他机制在起作用?
验证这一点的一种方法是检查生成的 cloudformation 模板文件。
serverless package --stage dev --package ./tmp
尝试更改
Resource
值并再次运行命令。
在
cloudformation-template-update-stack.json
文件夹下查找 tmp
。