问题描述
我一直在尝试创建SNS主题并将消息发布到这些主题?但是在开发人员上部署后,出现错误“主题不存在”?
ItemServicetopic:
Type: AWS::SNS::Topic
Properties:
displayName: 'ItemServicetopic'
FifoTopic: true
KmsMasterKeyId: !Ref KMSDecryptKey
TopicName: 'item-service-dev-topic.fifo'
Lambda,它将用于将消息发布到SNS
PostItem:
Type: AWS::Serverless::Function
Properties:
Handler: handlers/item-handler.postItem
Layers:
- !Ref NodeDependenciesLayer
Events:
PostItemApi:
Type: Api
Properties:
RestApiId: !Ref ItemServiceApiG
Path: /v0/items
Method: POST
Policies:
- AWSSecretsManagerGetSecretValuePolicy:
SecretArn: !Sub 'arn:aws:secretsmanager:${AWS::Region}:${AWS::AccountId}:secret:ItemServiceSecrets-d768io'
- KMSDecryptPolicy:
KeyId: !Ref KMSDecryptKey
- SNSPublishMessagePolicy:
TopicName: !Sub 'arn:aws:sns:${AWS::Region}:${AWS::AccountId}:item-service-topic.fifo'
注意:我已将SNS添加到现有的SAM模板文件中,但是我感觉它没有创建SNS,因此在运行“ postItem”处理程序时,它会失败,提示未找到SNS主题。
解决方法
尝试为SNSPublishMessagePolicy
使用REF
PostItem:
Type: AWS::Serverless::Function
Properties:
Handler: handlers/item-handler.postItem
Layers:
- !Ref NodeDependenciesLayer
Events:
PostItemApi:
Type: Api
Properties:
RestApiId: !Ref ItemServiceApiG
Path: /v0/items
Method: POST
Policies:
- AWSSecretsManagerGetSecretValuePolicy:
SecretArn: !Sub "arn:aws:secretsmanager:${AWS::Region}:${AWS::AccountId}:secret:ItemServiceSecrets-d768io"
- KMSDecryptPolicy:
KeyId: !Ref KMSDecryptKey
- SNSPublishMessagePolicy:
TopicName: !Ref ItemServiceTopic
通过这种方式,Cloudformation应该知道在更新lambda函数之前,首先要存在SNS主题的更新函数