簡體   English   中英

如何使用 Ansible 和 AWS 將重新驅動策略(死信隊列/DLQ)添加到 SNS 訂閱

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM