На самом деле вы можете создать переменную в custom с помощью arn of sns topi c
custom:
region: ${opt:region, self:provider.region}
snsTopic: ${self:service}-${self:provider.stage}-Topic
snsTopicArn: { "Fn::Join" : ["", ["arn:aws:sns:${self:custom.region}:", { "Ref" : "AWS::AccountId" }, ":${self:custom.snsTopic}" ] ] }
, а затем просто использовать arn в нужных вам местах.
Или вы можете используйте плагин https://github.com/silvermine/serverless-plugin-external-sns-events для указания c ссылки на имя топи c.
Если у вас есть только 1 serverless.yml и вы не хотите иметь отдельный файл облачной информации Я бы использовал первый вариант
РЕДАКТИРОВАТЬ:
Чтобы использовать arn, следуйте инструкциям на безсерверный https://serverless.com/framework/docs/providers/aws/events/sns#using -a-pre-Существующий-topi c
functions:
dispatcher:
handler: <handler>
events:
- sns:
arn: ${self:custom.snsTopicArn}
, поскольку у вас есть sns topi c в том же serverless.yml, вы даже можете игнорировать переменную snsTopicArn
и построить ее, как одно из предложений, используя! Ref, который должен быть лучшим вариантом для вас:
functions:
dispatcher:
handler: <handler>
events:
- sns:
arn: !Ref SNSTopic
topicName: ${self:custom.snsTopic}
полный пример:
service: testsns
provider:
name: aws
runtime: nodejs12.x
region: eu-west-1
functions:
hello:
handler: handler.hello
events:
- sns:
arn: !Ref SuperTopic
topicName: MyCustomTopic
Properties:
Policies:
- AWSLambdaExecute
- Statement:
- Effect: Allow
Action:
- 'lambda:InvokeFunction'
resources:
Resources:
SuperTopic:
Type: AWS::SNS::Topic
Properties:
TopicName: MyCustomTopic