View a markdown version of this page

自動暫停組態設定的電子郵件傳送 - Amazon Simple Email Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

自動暫停組態設定的電子郵件傳送

您可以設定 Amazon SES,將使用特定組態集傳送電子郵件的特定評價指標匯出到 Amazon CloudWatch。然後,您可以使用這些指標來建立專屬於這些組態集的 CloudWatch 警示。這些警示超過特定閾值時,您可以使用指定的組態集來自動暫停電子郵件的傳送,而不會影響 Amazon SES 帳戶的整體電子郵件傳送功能。

注意

本節所述的解決方案會暫停單一 AWS 區域中特定組態集的電子郵件傳送。如果您從多個區域傳送電子郵件,請在您想要採取此解決方案的每個區域內重複操作本節的程序。

第 1 部分:啟用組態設定的評價指標報告

在將 Amazon SES 設定為自動暫停組態集之電子郵件傳送前,您必須先啟用組態集的評價指標匯出。

若要啟用組態設定的退信與投訴指標匯出,請完成 檢視和匯出評價指標 中的步驟。

第 2 部分:建立 IAM 角色

設定電子郵件傳送自動暫停的第一步為建立可執行 UpdateConfigurationSetSendingEnabled API 作業的 IAM 角色。

建立 IAM 角色
  1. 在以下網址開啟 IAM 主控台:https://console.aws.amazon.com/iam/。

  2. 在導覽窗格中,選擇角色。

  3. 選擇 Create Role (建立角色)。

  4. 在 Select type of trusted entity (選取信任的實體類型) 下,選擇 AWS service ( 服務)。

  5. 在 Choose the service that will use this role (選擇將使用此角色的服務) 下,選擇 Lambda (Lambda)。選擇 Next: Permissions (下一步:許可)。

  6. 在 Attach permissions policies (連接許可政策) 頁面上,選擇下列政策:

    • AWS Lambda BasicExecutionRole

    • AmazonSESFullAccess (我們建議您使用根據您的需求量身打造的自訂角色,其中包含呼叫 的許可UpdateConfigurationSetSendingEnabled。)

    提示

    使用政策清單上方的搜尋方塊清單來快速尋找這些政策。

    選擇下一步:檢閱。

  7. 在 Review (檢閱) 頁面上,針對 Name (名稱),輸入該角色名稱。選擇建立角色。

第 3 部分:建立 Lambda 函數

建立 IAM 角色後,即可建立 Lambda 函數,用於暫停組態集的電子郵件傳送功能。

建立 Lambda 函數
  1. 在 https://https://console.aws.amazon.com/lambda/ 開啟 AWS Lambda 主控台。

  2. 使用區域選擇工具來選擇您要部署此 Lambda 函數的區域。

    注意

    此函數只適用於暫停您在此步驟中所選之 AWS 區域內的組態設定電子郵件傳送。如果您從超過一個區域傳送電子郵件,請在您想要自動暫停由件傳送的每個區域內重複操作本節的程序。

  3. 選擇建立函數。

  4. 在 Create function (建立函式) 下,選擇 Author from scratch (從頭開始撰寫)。

  5. 在 Author from scratch (從頭開始撰寫) 下,完成以下步驟:

    • 在 Name (名稱) 中,輸入 Lambda 函數的名稱。

    • 至於 Runtime (執行時間),選擇 Node.js 14 (或選擇清單中目前提供的版本)。

    • 在 Role (角色) 中,選擇 Choose an existing role (選擇現有的角色)。

    • 在 Existing role (現有角色),選擇您在 第 2 部分:建立 IAM 角色 中建立的 IAM 角色。

    選擇建立函數。

  6. 在程式碼編輯器的 Function code (函數程式碼) 下,貼上下列程式碼:

    'use strict'; import { SES } from 'aws-sdk'; const ses = new SES(); const configSet = 'CONFIG_SET_NAME_HERE'; const params = { ConfigurationSetName: configSet, Enabled: false }; export const handler = async (event) => { try { const data = await ses.updateConfigurationSetSendingEnabled(params).promise(); console.log('Configuration Set Update:', data); return { statusCode: 200, body: JSON.stringify({ message: 'Successfully paused email sending for configuration set.', data }), }; } catch (err) { console.error('Error:', err.message); return { statusCode: 500, body: JSON.stringify({ message: 'Failed to pause email sending for configuration set.', error: err.message }), }; } };

    以組態集名稱來取代上述程式碼中的 ConfigSet。選擇儲存。

  7. 選擇測試。若出現 Configure test event (設定測試事件) 視窗,請在 Event name (事件名稱) 欄位中輸入名稱,然後選擇 Create (建立)。

  8. 確認頁面頂端的通知列顯示 Execution result: succeeded。如果函數無法執行,請執行下列動作:

    • 請確認您在 第 2 部分:建立 IAM 角色 中建立的 IAM 角色包含正確政策。

    • 確定 Lambda 函數中的程式碼不包含任何錯誤。Lambda 程式碼編輯工具會自動將語法錯誤和其他潛在的問題反白。

第 4 部分:重新啟用組態設定的電子郵件傳送

在「第 3 部分:建立 Lambda 函數」中測試 Lambda 函數的副作用為組態集的電子郵件傳送將暫停。在大部分情況下,CloudWatch 警示觸發前不會讓組態集的傳送暫停。

本節中的程序將為您的組態設定重新啟用電子郵件傳送。若要完成這些程序,您必須安裝並設定 AWS Command Line Interface。如需詳細資訊,請參閱「AWS Command Line Interface 使用者指南」。

若要重新啟用電子郵件傳送
  1. 在命令列輸入以下命令,來重新啟用組態集的電子郵件傳送:

    aws ses update-configuration-set-sending-enabled \ --configuration-set-name ConfigSet \ --enabled

    在先前的命令中,以您想要暫停電子郵件傳送的組態集名稱來取代 ConfigSet。

  2. 在命令列輸入以下命令,來確認電子郵件傳送已啟用:

    aws ses describe-configuration-set \ --configuration-set-name ConfigSet \ --configuration-set-attribute-names reputationOptions

    命令會產生類似下列範例的輸出:

    { "ConfigurationSet": { "Name": "ConfigSet" }, "ReputationOptions": { "ReputationMetricsEnabled": true, "SendingEnabled": true } }

    如果 SendingEnabled 的值是 true,則組態設定的電子郵件傳送已成功重新啟用。

步驟 5:建立 Amazon SNS 主題

若要讓 CloudWatch 在警示觸發時執行 Lambda 函數,您必須先建立 Amazon SNS 主題並為其訂閱該 Lambda 函數。

建立 Amazon SNS 主題
  1. 在 https://console.aws.amazon.com/sns/v3/home 開啟 Amazon SNS 主控台。

  2. 使用區域選擇工具來選擇您要自動暫停郵件傳送的區域。

  3. 在導覽窗格中,選擇 Topics (主題)。

  4. 請選擇 Create new topic (建立新主題)。

  5. 在 Create new topic (建立新主題) 視窗上,針對 Topic name (主題名稱),輸入主題的名稱。或者,您也可在 Display name (顯示名稱) 欄位中輸入更具描述性的名稱。

    請選擇 Create topic (建立主題)。

  6. 在主題清單中,請勾選您在之前的步驟中所建立的主題旁的方塊。在 Actions (動作) 選單上,選擇 Subscribe to topic (訂閱主題)。

  7. 在 Create subscription (建立訂閱) 視窗上,選取下列項目:

    • 針對 rotocol (通訊協定),選擇 AWS Lambda。

    • 針對 Endpoint (端點),選擇您在「第 3 部分:建立 Lambda 函數」中建立的 Lambda 函數。

    • 針對 Version or alias (版本或別名),選擇 default (預設)。

  8. 選擇建立訂閱。

第 6 部分:建立 CloudWatch 警示

本節包含在 CloudWatch 中建立警示的程序,在指標達到特定閾值時將會觸發警示。觸發警示時,它便會將通知遞送到您在「步驟 5:建立 Amazon SNS 主題」中建立的 Amazon SNS 主題,接著執行您在「第 3 部分:建立 Lambda 函數」中建立的 Lambda 函數。

建立 CloudWatch 警示
  1. 透過 https://console.aws.amazon.com/cloudwatch/ 開啟 CloudWatch 主控台。

  2. 使用區域選擇工具來選擇您要自動暫停郵件傳送的區域。

  3. 在左側的導覽窗格中,選擇 Alarms (警示)。

  4. 選擇建立警示 。

  5. 在 Create Alarm (建立警示) 視窗的 SES Metrics (SES 指標) 下,選擇 Configuration Set Metrics (組態集指標)。

  6. 在 ses:configuration-set 欄中,找出您想要建立警示的組態集。在 Metric Name (指標名稱) 下,選擇下列其中一個選項:

    • Reputation.BounceRate - 若您想要在組態設定的整體硬退信率超過您所定義的閾值時暫停組態設定的電子郵件傳送,請選擇此指標。

    • Reputation.ComplaintRate - 若您想要在組態設定的整體投訴率超過您所定義的閾值時暫停組態設定的電子郵件傳送,請選擇此指標。

    選擇下一步。

  7. 請完成下列步驟:

    • 在 Alarm Threshold (警示閾值) 下,針對 Name (名稱),輸入警示的名稱。

    • 在 Whenever: Reputation.BounceRate 或 Whenever: Reputation.ComplaintRate 下,指定觸發警示的閾值。

      注意

      如果 Amazon SES 帳戶的整體退信率超過 10%,或者 Amazon SES 帳戶的整體投訴率超過 0.5%,您的 Amazon SES 帳戶將會自動列入審核。當您指定觸發 CloudWatch 警示的退信率或投訴率時,建議您使用遠低於這些比率的數值,以避免帳戶列入審核。

    • 在動作下的 每當此警示,選擇狀態為警示。針對 Send notification to (傳送通知至),選擇您在「步驟 5:建立 Amazon SNS 主題」中建立的 Amazon SNS 主題。

    選擇建立警示 。

第 7 部分:測試解決方案

您現在可以測試警示,以確認警示可在進入 ALARM 狀態時執行 Lambda 函數。您可以使用 CloudWatch API 中的 SetAlarmState 作業來暫時變更警示狀態。

本節中的程序為選用,但我們建議您完成程序,以確認正確設定完整的解決方案。

若要測試解決方案
  1. 在命令列輸入以下命令,來檢查組態集的電子郵件傳送狀態:

    aws ses describe-configuration-set --configuration-set-name ConfigSet

    如果組態啟用的傳送已設定,會看到以下輸出:

    { "ConfigurationSet": { "Name": "ConfigSet" }, "ReputationOptions": { "ReputationMetricsEnabled": true, "SendingEnabled": true } }

    如果 SendingEnabled 的值是 true,則組態設定的電子郵件傳送目前已啟用。

  2. 在命令列輸入下列命令,以暫時將警示狀態變更為 ALARM:

    aws cloudwatch set-alarm-state \ --alarm-name MyAlarm \ --state-value ALARM \ --state-reason "Testing execution of Lambda function"

    以您在 中建立的警示名稱來取代前置命令中的 MyAlarm第 6 部分:建立 CloudWatch 警示。

    注意

    當您執行此命令時,警示狀態將從 OK 切換為 ALARM,然後在數秒後回到 OK。您可以在 CloudWatch 主控台的警示 History (歷程記錄) 索引標籤中檢視狀態的變更,或使用 DescribeAlarmHistory 作業來查看。

  3. 在命令列輸入以下命令,來檢查組態集的電子郵件傳送狀態:

    aws ses describe-configuration-set \ --configuration-set-name ConfigSet

    如果 Lambda 函數執行成功,您會看到類似下列範例的輸出:

    { "ConfigurationSet": { "Name": "ConfigSet" }, "ReputationOptions": { "ReputationMetricsEnabled": true, "SendingEnabled": false } }

    如果 SendingEnabled 的值是 false,則組態集的電子郵件傳送功能已停用,且表示 Lambda 函數已成功執行。

  4. 完成 第 4 部分:重新啟用組態設定的電子郵件傳送 中的步驟以重新啟用組態設定的電子郵件傳送。