

# Amazon SNS を直接統合した APM からアラームを取り込む
<a name="idr-gs-ingest-apm-sns"></a>

APM が Amazon SNS トピックへのアラームの送信をサポートしている場合は、このガイドに従って AWS Incident Detection and Response に APM アラームを取り込むことができます。

提供された [CloudFormation テンプレート](https://dcl74d3hc5lj1.cloudfront.net/apms/ThirdPartyApmSnsIntegration.json)をデプロイすることも、この統合を手動でセットアップすることもできます。統合を設定する前に、AWS のサービスにリンクされたロール (SLR) `AWSServiceRoleForHealth_EventProcessor` がアカウントに[作成](https://docs.aws.amazon.com/IDR/latest/userguide/idr-gs-access-prov.html)されていることを確認します。

## オプション 1: を使用するCloudFormation
<a name="idr-gs-apm-sns-cfn"></a>

CloudFormation テンプレートを使用すると、Amazon SNS 統合を使用して APM から AWS Incident Detection and Response にアラームを取り込むために必要な統合インフラストラクチャを作成するプロセスを簡素化できます。

**注記**  
この CloudFormation テンプレートを介してデプロイされたリソース (Lambda や EventBridge など) には、追加コストが発生します。これらのサービスの料金の詳細については、「[AWS の料金](https://aws.amazon.com/pricing/)」を参照してください。
この CloudFormation テンプレートは、AWS Incident Detection and Response によってアラームを取り込む必要がある各 AWS アカウントとリージョンにデプロイする必要があります。
このドキュメントで提供される例は Grafana 用ですが、このテンプレートは Amazon Simple Notification Service と直接統合されているすべての APM に使用できます。
セキュリティ上の理由から、AWS では、ペイロードが Amazon CloudWatch Logs に記録されないようにするため、`TransformLambdaFunction` から `logger.info()` ステートメントを削除することが推奨されます。

**この CloudFormation テンプレートをデプロイするための前提条件:**
+ APM からアラームイベントを受信するには、Amazon Simple Notification Service トピックを作成する必要があります。[Amazon Simple Notification Service コンソールで SNS トピックを作成します](https://docs.aws.amazon.com/sns/latest/dg/sns-create-topic.html#create-topic-aws-console)。
+ テンプレートの `TransformLambdaFunction` を変更して、使用中の APM に基づいて目的の値に `["detail"]["incident-detection-response-identifier"]` を設定する必要があります。

**前提条件の完了:**

1. Amazon SNS コンソールを開き、[トピック] を選択します。APM からアラームイベントを受信するために作成された SNS トピックの ARN をコピーします。
   + 例:`arn:aws:sns:eu-west-1:012345678912:<your-apm-name>-sns`

1. [CloudFormation テンプレート](https://dcl74d3hc5lj1.cloudfront.net/apms/ThirdPartyApmSnsIntegration.json)をダウンロードして開きます。
   + テンプレートで `TransformLambdaFunction` を見つける
     + `def lambda_handler(event, context)` で、`event["detail"]["incident-detection-response-identifier"]` をアラーム名が SNS レコードの JSON ペイロードに表示される json パスに設定します。
       + SNS 経由で `TransformLambdaFunction` に送信されるイベントには、親ペイロード構造として `event["Records"][n]["Sns"]["Message"]` があります。ソース (APM) からの実際のペイロードオリジンは、親構造内にラップされます。
       + **Grafana の例:** `event["Records"][n]["Sns"]["Message"]["alerts"][n]["labels"]["alertname"]`

**CloudFormation テンプレートのデプロイ:**

1. 統合を設定する必要があるアカウントとリージョンで CloudFormation コンソールに移動します。

1. CloudFormation に移動します。
   + [スタックの作成] の [新しいリソースを使用 (標準)] を選択します。
     + [既存のテンプレートを選択]、[テンプレートファイルをアップロード]、[ファイルを選択] の順に選択し、ローカルに保存した CloudFormation テンプレートをアップロードします。

1. スタックの詳細を指定する:
   + スタック名 (*例: *`<your-apm-name>IntegrationForIDR`) を入力します。
   + **前提条件の完了**時に取得したパラメータ値を指定します。
     + APMNameParameter *例:* `Grafana`
     + TriggerSNSParameter *例:* `arn:aws:sns:eu-west-1:012345678912:<your-apm-name>-sns`
   + [次へ] を選択します。

1. スタックオプションを設定する:
   + ページの下部までスクロールし、CloudFormation がカスタム名で IAM リソースを作成できるようにするチェックボックスをオンにします。

1. 確認と作成:
   + パラメータ値が正しく設定されていることを検証し、[送信] を選択します。

1. CloudFormation スタックは、APM イベントを AWS Incident Detection and Response に統合するために必要なリソースをデプロイします。CloudFormation スタックのステータスが **CREATE\_COMPLETE** になるまで待ちます。

1. CloudFormation スタックは、サンプル値が Grafana のパラメータに入力され、EU–WEST–1 リージョンで実行されたと仮定して、以下のリソースを作成します。
   + CustomEventBus: Grafana-AWSIncidentDetectionResponse-EventBus
   + SNSSubscription: arn:aws:sns:eu-west-1:012345678912:grafana-sns:[random\_string]
   + TransformLambdaExecutionRole: IDR-TransformLambdaExecutionRole-eu-west-1
   + TransformLambdaFunction: Grafana-AWSIncidentDetectionResponse-Lambda-Transform
   + TransformLambdaPermission: GrafanaIntegrationForIDR-TransformLambdaPermission-[random\_string]

**インテグレーションテスト**

CloudFormation スタックが正常にデプロイされたら、APM からテストペイロードを送信して統合を検証できます。APM からテストペイロードが送信されると、次のようになります。

1. Lambda コンソールに移動して、`APMNameParameter-AWSIncidentDetectionResponse-Lambda-Transform` 関数を選択します。[モニタリング] タブを選択します。

1. 成功した呼び出しは、メトリクスグラフで確認する必要があります。

1. [Amazon CloudWatch Logs を表示する] を選択します。ログストリームのログイベントから検証して、APM から送信されたテストペイロードが存在するか、またはエラーが発生したかどうかを確認できます。

**AWS Incident Detection and Response へのイベントバス ARN の共有**

1. Amazon EventBridge コンソールにサインインします。イベントバスを選択します。

1. CloudFormation スタックの一部としてデプロイされた **[カスタムイベントバス]** の ARN を記録します (例: `arn:aws:events:eu-west-1:012345678912:event-bus/Grafana-AWSIncidentDetectionResponse-EventBus`)。
   + [アラーム取り込みのアンケート – 概要](idr-gs-questionnaire.md#idr-gs-alarm-questionnaire) の [サードパーティー APM アラーム] セクションの [EventBridge イベントバス ARN] フィールドで、このカスタムイベントバスの ARN を AWS Incident Detection and Response に提供します。

1. オンボーディングプロセス中、AWS Incident Detection and Response は、このカスタムイベントバスにマネージド EventBridge ルールを作成して APM アラームを取り込みます。

## オプション 2: 手動の統合
<a name="idr-gs-apm-sns-manual"></a>

![Amazon SNS を使用した統合の例を示す図。](http://docs.aws.amazon.com/ja_jp/IDR/latest/userguide/images/example-int-sns.png)


1. Amazon SNS コンソールを開き、`[apm_name]-sns` という名前の SNS トピックを [Amazon Simple Notification Service コンソールで作成](https://docs.aws.amazon.com/sns/latest/dg/sns-create-topic.html#create-topic-aws-console)して、APM からアラームイベントを受け取ります。作成された SNS トピックの ARN を書き留めます。

1. 次のいずれかを実行します。
   + (推奨) `[apm_name]-AWSIncidentDetectionResponse-EventBus` という名前の EventBridge カスタムイベントバスを作成します。
   + (代替方法) カスタムイベントバスの代わりにデフォルトの EventBridge イベントバスを使用します。

   AWS Incident Detection and Response は、`AWSServiceRoleForHealth_EventProcessor` SLR を介してカスタムイベントバスまたはデフォルトのイベントバスにマネージドルール (`AWSHealthEventProcessorEventSource-DO-NOT-DELETE`) をインストールします。ルールソースはカスタムイベントバスまたはデフォルトのイベントバスとなり、ルールの送信先は AWS Incident Detection and Response となります。また、ルールはサードパーティーの APM イベントを取り込むパターンと一致します。

1. `$YourApmName-AWSIncidentDetectionResponse-LambdaFunction` という名前の [Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 関数を作成して、SNS ペイロードを変換します。
   + 変換されたイベントは、「[EventBridge で APM アラートを取り込むためのペイロード要件](idr-gs-apm-payload-requirements.md)」で説明されているペイロード要件を満たしている必要があります。
   + Lambda 関数のターゲットを、ステップ 2 で作成したカスタムイベントバス (推奨) またはデフォルトのイベントバスに設定します。

1. SNS トピックを Lambda 関数 `$YourApmName-AWSIncidentDetectionResponse-LambdaFunction` のトリガーとして設定します。
   + [トリガーを追加] ページで「SNS」を検索します。
   + ステップ 1 で作成した専用 SNS トピックの ARN を追加します。
   + [追加] を選択します。

1. APM ドキュメントに従って、AWS Incident Detection and Response が取り込む必要がある APM ペイロードの SNS 送信先を設定します。

AWS Incident Detection and Response は、`AWSServiceRoleForHealth_EventProcessor` SLR を介してカスタムイベントバスまたはデフォルトのイベントバスにマネージドルール (`AWSHealthEventProcessorEventSource-DO-NOT-DELETE`) をインストールします。ルールソースはカスタムイベントバスまたはデフォルトのイベントバスとなり、ルールの送信先は AWS Incident Detection and Response となります。また、ルールはサードパーティーの APM イベントを取り込むパターンと一致します。