如何在AWS Step Functions代码中检查SNS Topic是否为空
如何在AWS Step Functions中直接检查SNS Topic是否为空
完全可以直接在Step Functions中完成SNS Topic订阅状态的检查,不需要额外编写Lambda函数——利用Step Functions的AWS服务集成能力,直接调用SNS的ListSubscriptionsByTopic API,再通过Choice状态判断返回结果即可。
实现步骤
配置Step Functions调用SNS API
在状态机中添加一个Task状态,使用aws:sns:listSubscriptionsByTopic集成,传入目标SNS Topic的ARN。通过Choice状态判断订阅是否为空
调用API后,Step Functions会返回包含订阅列表的Subscriptions数组,通过判断该数组的长度是否为0,即可确定Topic是否为空。
状态机示例代码
{ "Comment": "检查SNS Topic是否为空", "StartAt": "ListSNSsubscriptions", "States": { "ListSNSsubscriptions": { "Type": "Task", "Resource": "arn:aws:states:::aws-sdk:sns:listSubscriptionsByTopic", "Parameters": { "TopicArn": "arn:aws:sns:us-east-1:123456789012:your-topic-name" }, "Next": "CheckIfTopicIsEmpty" }, "CheckIfTopicIsEmpty": { "Type": "Choice", "Choices": [ { "Variable": "$.Subscriptions.length", "NumericEquals": 0, "Next": "TopicIsEmpty" } ], "Default": "TopicHasSubscriptions" }, "TopicIsEmpty": { "Type": "Pass", "End": true, "Result": "该SNS Topic无任何订阅" }, "TopicHasSubscriptions": { "Type": "Pass", "End": true, "Result": "该SNS Topic存在订阅" } } }
权限注意事项
确保Step Functions的执行角色拥有sns:ListSubscriptionsByTopic权限,可在角色的IAM策略中添加如下语句:
{ "Effect": "Allow", "Action": "sns:ListSubscriptionsByTopic", "Resource": "arn:aws:sns:us-east-1:123456789012:your-topic-name" }
内容的提问来源于stack exchange,提问作者Johan Sánchez
相关产品推荐
相关产品推荐

