[英]AWS SNS Topic Sub: Dead-letter queue (redrive policy) permissions denied
[英]How to add a redrive policy (dead-letter queue / DLQ) to a SNS subscription, with Ansible and AWS
在 Ansible 脚本中,我有:
- name: Subscribe lambda to SNS topic example1
sns_topic:
name: "example1-{{env_name}}"
purge_subscriptions: no
subscriptions:
- endpoint: "arn:aws:lambda:{{ aws.region }}:{{ aws.account }}:function:{{repo_name}}-{{env_name}}"
protocol: "lambda"
它有效,结果是我的 lambda 订阅了我的 SNS 主题。
现在,我想为这个订阅添加一个 DLQ。 我已经有一个 SQS,我想把它 state 作为我的 DLQ。
所以我像这样重写我的代码:
- name: Subscribe lambda to SNS topic example1
sns_topic:
name: "example1-{{env_name}}"
purge_subscriptions: no
subscriptions:
- endpoint: "arn:aws:lambda:{{ aws.region }}:{{ aws.account }}:function:{{repo_name}}-{{env_name}}"
protocol: "lambda"
redrive_policy:
dead_letter_target_arn: "arn:aws:{{ aws.region }}:{{ aws.account }}:dlq-for-example1"
这不起作用,我在 Ansible 或谷歌搜索中没有找到任何东西......
我究竟做错了什么?
看起来您在最后一行的arn:aws:{{aws.region}}
之间缺少sqs
。
dead_letter_target_arn: "arn:aws:sqs:{{ aws.region }}:{{ aws.account }}:dlq-for-example1"
问题是嵌入在 SNS 主题中的订阅属性只有两个属性:端点和协议(请参阅订阅属性)。
对于更高级的设置,例如 RedrivePolicy,您需要使用独立的AWS::SNS::Subscription资源(请参阅订阅资源)。
由于 AWS::SNS::Subscription 是独立的,因此您必须包含 Subscription 绑定到的 TopicArn。 另请注意,RedrivePolicy 采用 Json 格式。
这是来自Redrive Syntax的 Cloud Formation 语法的一个简单示例:
{
"Resources": {
"mySubscription": {
"Type" : "AWS::SNS::Subscription",
"Properties" : {
"Protocol": "sqs",
"Endpoint": "arn:aws:sqs:us-east-2:123456789012:MyEndpoint",
"TopicArn": "arn:aws:sns:us-east-2:123456789012:MyTopic",
"RedrivePolicy": {
"deadLetterTargetArn":
"arn:aws:sqs:us-east-2:123456789012:MyDeadLetterQueue"
}
}
}
}
}
但我不知道 Ansible 是如何进行这些翻译的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.