我有一个像这样的 sam 模板:
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Parameters:
SNSTopicARN:
Type: String
Description: "SNS_TOPIC_ARN to be used"
Resources:
Messages2SNSFunction:
Type: 'AWS::Serverless::Function'
Properties:
Policies:
- SNSPublishMessagePolicy:
TopicName: SNSTopicARN # this fails on code execution since it needs topicName not the full ARN
Environment:
Variables:
SNS_TOPIC_ARN: !Ref SNSTopicARN #use in code to publicsh that sns
问题是我必须创建另一个参数 SNSTopicName,它就像 SNSTopicARN 的副本。因为这些策略只允许主题名称:
SNSPublishMessagePolicy:
TopicName:
如果这不是 topicName 将无法工作。
我认为应该是更好的方法。使用
arn:aws:sns:${AWS::Region}:${AWS::AccountId}...
不是一个选项,因为创建 sns 的帐户可能是另一个选项。
解决方案是使用 aws 函数“Split”获取按“:”分割的数组,并使用函数“Select”选择 topicName(第五个位置):
- SNSPublishMessagePolicy:
TopicName: !Select [ 5, !Split [ ":", !Ref SNSTopicARN ] ]