![](/img/trans.png)
[英]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.