【发布时间】:2020-02-11 06:19:14
【问题描述】:
我有 2 个具有不同 Cloudformation YAML 模板的服务,并希望将另一个策略添加到生产者服务中定义的队列策略(以允许消费者接收和删除消息)。但是,我当前的解决方案只是覆盖现有策略而不是附加它(即,策略中仅保留消费者服务角色)。
这是生产者的 Cloudformation 模板 SQS 部分:
ProducerQueuePolicy:
Type: AWS::SQS::QueuePolicy
Properties:
PolicyDocument:
Version: '2012-10-17'
Id: SQSPolicy
Statement:
- Effect: Allow
Principal:
AWS:
- !GetAtt ServiceRole.Arn
Resource: !GetAtt ProducerQueue.Arn
Action:
- 'sqs:DeleteMessage'
- 'sqs:ReceiveMessage'
- 'sqs:ListQueues'
- 'sqs:SendMessage'
- 'sqs:GetQueueUrl'
- 'sqs:GetQueueAttributes'
Queues: [ !Ref ProducerQueue ]
ProducerDeadLetterQueue:
Type: 'AWS::SQS::Queue'
Properties:
QueueName: !Sub "${AWS::StackName}-ProducerDLQ.fifo"
FifoQueue: true
ContentBasedDeduplication: false
ProducerQueue:
Type: 'AWS::SQS::Queue'
Properties:
QueueName: !Sub "${AWS::StackName}-ProducerQueue.fifo"
FifoQueue: true
MessageRetentionPeriod: 1209600
ContentBasedDeduplication: false
RedrivePolicy:
deadLetterTargetArn: !GetAtt ProducerDeadLetterQueue.Arn
maxReceiveCount: 9
# Outputs -------------------------------------------------------------------------
Outputs:
ProducerQueueUrl:
Value: !Ref ProducerQueue
Export:
Name: ProducerQueueUrl
ProducerQueueArn:
Value: !GetAtt ProducerQueue.Arn
Export:
Name: ProducerQueueArn
这是面向消费者的 Cloudformation:
#SQS policy configuration for consumer
ProducerQueueConsumptionPolicy:
Type: AWS::SQS::QueuePolicy
Properties:
PolicyDocument:
Version: '2012-10-17'
Id: SQSConsumptionPolicy
Statement:
- Effect: Allow
Principal:
AWS:
- !GetAtt ServiceRole.Arn
Resource:
Fn::ImportValue: ProducerQueueArn
Action:
- 'sqs:DeleteMessage'
- 'sqs:ReceiveMessage'
- 'sqs:GetQueueUrl'
- 'sqs:GetQueueAttributes'
Queues:
- Fn::ImportValue: ProducerQueueUrl
需要做些什么来改变这种行为?
【问题讨论】:
标签: amazon-web-services yaml amazon-cloudformation message-queue amazon-sqs