AWS sam 模板使用现有的 SNS

问题描述 投票:0回答:1

我有一个像这样的 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-lambda aws-cloudformation
1个回答
0
投票

解决方案是使用 aws 函数“Split”获取按“:”分割的数组,并使用函数“Select”选择 topicName(第五个位置):

- SNSPublishMessagePolicy:
    TopicName: !Select [ 5, !Split [ ":", !Ref SNSTopicARN ] ]
© www.soinside.com 2019 - 2024. All rights reserved.