

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon SNS Event Fork Pipelines サンプルアプリケーションをデプロイしてテストする
<a name="sns-deploy-test-fork-pipelines-sample-application"></a>

イベント駆動型アプリケーションの開発を加速するには、Event Fork Pipelines を搭載した AWS イベント処理パイプラインを Amazon SNS トピックにサブスクライブできます。 AWS Event Fork Pipelines は、[AWS Serverless Application Model](https://aws.amazon.com/serverless/sam/) (AWS SAM) に基づくオープンソースの[ネストされたアプリケーションの](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-template-nested-applications.html)スイートです。[AWS Event Fork Pipelines スイート](https://serverlessrepo.aws.amazon.com/applications?query=aws-event-fork-pipelines) (**カスタム IAM ロールまたはリソースポリシーを作成する Show アプリケーション**を選択) から AWS アカウントに直接デプロイできます。詳細については、「[AWS Event Fork Pipelines の仕組み](sns-fork-pipeline-as-subscriber.md#how-sns-fork-works)」を参照してください。

このページでは、 AWS マネジメントコンソール を使用して AWS Event Fork Pipelines サンプルアプリケーションをデプロイおよびテストする方法を示します。

**重要**  
 AWS Event Fork Pipelines サンプルアプリケーションのデプロイが完了した後に不要なコストが発生しないようにするには、その CloudFormation スタックを削除します。詳細については、「AWS CloudFormation ユーザーガイド」**の「[CloudFormation コンソールのスタックを削除](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html)」を参照してください。

# AWS Event Fork Pipelines ユースケースの例
<a name="example-sns-fork-use-case"></a>

次のシナリオでは、Event Fork Pipelines を使用する AWS イベント駆動型のサーバーレス e コマースアプリケーションについて説明します。この[例の e コマースアプリケーションを](https://serverlessrepo.aws.amazon.com/applications/arn:aws:serverlessrepo:us-east-1:077246666028:applications~fork-example-ecommerce-checkout-api) で使用し、 AWS Serverless Application Repository AWS Lambda コンソール AWS アカウント を使用して にデプロイできます。ここでテストしてGitHub でソースコードを調べることができます。

![\[AWS のサービスを統合するサーバーレス e コマースアプリケーションのアーキテクチャ。e コマースのユーザーによる API Gateway 経由での注文の実行から、注文の保存、検索分析、再生などのさまざまな処理パイプラインまでのフローを示しています。Amazon SNS、Lambda、Amazon SQS、DynamoDB、Kibana を介してイベントが管理され、分析されることを示しています。\]](http://docs.aws.amazon.com/ja_jp/sns/latest/dg/images/sns-fork-example-use-case.png)


この e コマースアプリケーションは、API Gateway によってホストされ、 AWS Lambda 関数 によってバックアップされた RESTful API を通じて購入者からの注文を受け取ります`CheckoutApiBackendFunction`。この関数は、すべての受注を `CheckoutEventsTopic` という名前の Amazon SNS トピックに発行します。このトピックでは、これらの受注を 4 つの異なるパイプラインにファンアウトします。

最初のパイプラインは、e コマースアプリケーションの所有者によって設計および実装された通常のチェックアウト処理パイプラインです。このパイプラインには、受信したすべての注文をバッファ`CheckoutQueue`する Amazon SQS キュー、これらの注文を処理するためにキューをポーリング`CheckoutFunction`する という名前の AWS Lambda 関数、およびすべての注文を安全に保存する DynamoDB テーブル`CheckoutTable`があります。

## AWS Event Fork Pipelines の適用
<a name="applying-sns-fork-pipelines"></a>

e コマースアプリケーションのコンポーネントは、主要ビジネスロジックを処理します。ただし、e コマースアプリケーションの所有者は以下にも対処する必要があります。
+ **コンプライアンス** - 安全な、圧縮されたバックアップの保管時の暗号化と機密情報のサニタイズ
+ **レジリエンス** - フルフィルメントプロセスの中断が発生した場合の最新の注文の再生
+ **検索可能性** - 受注に対する分析の実行とメトリクスの生成

このイベント処理ロジックを実装する代わりに、アプリケーション所有者は AWS Event Fork Pipelines を `CheckoutEventsTopic` Amazon SNS トピックにサブスクライブできます。
+ [イベントのストレージおよびバックアップパイプライン](sns-fork-pipeline-as-subscriber.md#sns-fork-event-storage-and-backup-pipeline) は、データを変換して、クレジットカードの詳細の削除、データの 60 秒間のバッファ処理、GZIP を使用した圧縮、Amazon S3 のデフォルトのカスタマーマネージドキーを使用した暗号化を行うように設定されています。このキーは によって管理 AWS され、 AWS Key Management Service () を利用しますAWS KMS。

  詳細については、「*Amazon Data Firehose デベロッパーガイド*」の「[送信先の Amazon S3 の選択](https://docs.aws.amazon.com/firehose/latest/dev/create-destination.html#create-destination-s3)」、「[Amazon Data Firehose データ送信](https://docs.aws.amazon.com/firehose/latest/dev/data-transformation.html)」、および「[設定](https://docs.aws.amazon.com/firehose/latest/dev/create-configure.html) 」を参照してください。
+ [イベントの検索および分析パイプライン](sns-fork-pipeline-as-subscriber.md#sns-fork-event-search-and-analytics-pipeline) には、30 秒間のインデックス再試行期間、検索ドメインでインデックスの作成に失敗した注文を保存するためのバケット、およびインデックスを作成した注文のセットを制限するためのフィルターポリシーが設定されています。

  詳細については、「*Amazon Data Firehose デベロッパーガイド*」の「[宛先の OpenSearch Service の選択](https://docs.aws.amazon.com/firehose/latest/dev/create-destination.html#create-destination-elasticsearch)」を参照してください。
+ [イベントの再生パイプライン](sns-fork-pipeline-as-subscriber.md#sns-fork-event-replay-pipeline) には、e コマースアプリケーションの所有者によって設計および実装された通常の注文処理パイプラインの Amazon SQS キュー部分が設定されています。

  詳細については、『*Amazon Simple Queue Service デベロッパーガイド*』の「[キーの名前と URL](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-general-identifiers.html#queue-name-url)」を参照してください。

次の JSON フィルターポリシーは、イベントの検索および分析パイプラインの設定で設定されます。これは、合計金額が 100 USD 以上の受注とのみ一致します。詳細については、「[Amazon SNS メッセージフィルター処理](sns-message-filtering.md)」を参照してください。

```
{				
   "amount": [{ "numeric": [ ">=", 100 ] }]
}
```

 AWS Event Fork Pipelines パターンを使用すると、e コマースアプリケーションの所有者は、イベント処理の差別化ロジックのコーディングに従うことが多い開発オーバーヘッドを回避できます。代わりに、 AWS Event Fork Pipelines を から直接 AWS Serverless Application Repository にデプロイできます AWS アカウント。

# ステップ 1: サンプル Amazon SNS アプリケーションをデプロイする
<a name="deploy-sample-application"></a>

1. [AWS Lambda コンソール](https://console.aws.amazon.com/lambda/) にサインインします。

1. ナビゲーションパネルで [**関数**] を選択し、[**関数の作成**] を選択します。

1. [**関数の作成**] ページで、次の操作を実行します。

   1. [**サーバーレスアプリケーションリポジトリ**の参照]、**[パブリックアプリケーション]**、**[カスタム IAM ロールまたはリソースポリシーを作成するアプリケーションの表示] を選択します**。

   1. `fork-example-ecommerce-checkout-api` を検索し、このアプリケーションを選択します。

1. [**fork-example-ecommerce-checkout-api**] ページで、以下の操作を行います。

   1. [**アプリケーション設定**] セクションで、[**アプリケーション名**] に名前 (`fork-example-ecommerce-my-app` など) を入力します。
**注記**  
リソースを後で簡単に見つけられるように、プレフィックス `fork-example-ecommerce` を保持します。
名前は、デプロイごとに一意にする必要があります。アプリケーション名を再利用すると、デプロイは (新しいスタックを作成するのではなく) 以前にデプロイされた CloudFormation スタックのみを更新します。

   1. (オプション) アプリケーションの Lambda 関数の実行のためも以下の **LogLevel** 設定のいずれかを入力します。
      + `DEBUG`
      + `ERROR`
      + `INFO` (デフォルト)
      + `WARNING`

1. [**このアプリケーションがカスタム IAM ロール、リソースポリシーを作成し、ネストされたアプリケーションをデプロイすることを承認します**] を選択して、ページの下部にある [**デプロイ**] を選択します。

[**fork-example-ecommerce-*my-app* のデプロイステータス**] ページで、Lambdaが [**アプリケーションをデプロイ中**] ステータスを表示します。

**リソース**セクションで、スタックの作成 CloudFormation を開始し、各リソースの **CREATE\$1IN\$1PROGRESS** ステータスを表示します。プロセスが完了すると、 は **CREATE\$1COMPLETE** ステータス CloudFormation を表示します。

**注記**  
すべてのリソースがデプロイされるまで 20～30 分かかる場合があります。

デプロイが完了すると、Lambda によって [**アプリケーションはデプロイ済みです**] ステータスが表示されます。

# ステップ 2: SNS にリンクされたサンプルアプリケーションを実行する
<a name="execute-sample-application"></a>

1.  AWS Lambda コンソールのナビゲーションパネルで、**アプリケーション**を選択します。

1. [**アプリケーション**] ページの検索フィールドで、`serverlessrepo-fork-example-ecommerce-my-app` を検索し、そのアプリケーションを選択します。

1. [**リソース**] セクションで、以下の操作を行います。

   1. タイプが **ApiGateway RestApi** であるリソースを見つけるには、すべてのリソースを [**タイプ**] (`ServerlessRestApi` など) でソートし、リソースを展開します。

   1. 2 つのネストされたリソース (**ApiGateway デプロイ**タイプと **ApiGateway ステージ**タイプ) が表示されます。

   1. リンク [**Prod API エンドポイント**] をコピーし、これに `/checkout` を付加します。次に例を示します。

      ```
      https://abcdefghij.execute-api.us-east-2.amazonaws.com/Prod/checkout
      ```

1. 次の JSON を `test_event.json` という名前のファイルにコピーします。

   ```
   {
      "id": 15311,
      "date": "2019-03-25T23:41:11-08:00",
      "status": "confirmed",
      "customer": {
         "id": 65144,		
   	 "quantity": 2,
         "price": 25.00,
         "subtotal": 50.00
      }]
   }
   ```

1. API エンドポイントに HTTPS リクエストを送信するには、`curl` コマンドを実行してサンプルイベントペイロードを入力として渡します。次に例を示します。

   ```
   curl -d "$(cat test_event.json)" https://abcdefghij.execute-api.us-east-2.amazonaws.com/Prod/checkout
   ```

   API は、次の空のレスポンスを返し、実行が成功したことを示します。

   ```
   { }
   ```

# ステップ 3: Amazon SNS アプリケーションとパイプラインのパフォーマンスを検証する
<a name="verify-sample-application-pipelines"></a>

## ステップ 1: サンプルのチェックアウトパイプラインの実行を検証する
<a name="verify-execution-checkout-pipeline"></a>

1. [Amazon DynamoDB コンソール](https://console.aws.amazon.com/dynamodb/)にサインインします。

1. ナビゲーションパネルで、[**テーブル**] を選択します。

1. `serverlessrepo-fork-example` を検索して `CheckoutTable` を選択します。

1. テーブルの詳細ページで [**項目**] を選択し、作成済みの項目を選択します。

   保存済みの属性が表示されます。

## ステップ 2: イベントのストレージおよびバックアップパイプラインの実行を検証する
<a name="verify-execution-event-storage-backup-pipeline"></a>

1. [[Amazon S3 コンソール](https://console.aws.amazon.com/s3/)] にサインインします。

1. ナビゲーションパネルで [**バケット**] を選択します。

1. `serverlessrepo-fork-example` を検索して、`CheckoutBucket` を選択します。

1. `.gz` を拡張子とするファイルが見つかるまで、ディレクトリ階層を移動します。

1. ファイルをダウンロードするには、[**アクション**]、[**開く**] の順に選択します。

1. パイプラインには、コンプライアンスの理由でクレジットカード情報をサニタイズする Lambda 関数が設定されています。

   保存済みの JSON ペイロードにクレジットカード情報が含まれていないことを確認するために、ファイルを解凍します。

## ステップ 3: イベントの検索および分析パイプラインの実行を検証する
<a name="verify-execution-event-search-analytics-pipeline"></a>

1. [OpenSearch Service コンソール](https://console.aws.amazon.com/aos/)にサインインします。

1. ナビゲーションパネルの [**My domains**] で、`serverl-analyt` というプレフィックスが付いたドメインを選択します。

1. パイプラインには、数値一致条件を設定する Amazon SNS サブスクリプションフィルターポリシーが設定されています。

   金額が 100 USD を超える注文を参照するためにイベントのインデックスが作成されていることを確認するには、[**serverl-analyt-*abcdefgh1ijk***] ページで、[**インデックス**]、[**checkout\$1events**] の順に選択します。

## ステップ 4: イベントの再生パイプラインの実行を検証する
<a name="verify-execution-event-replay-pipeline"></a>

1. [Amazon SQS コンソール](https://console.aws.amazon.com/sqs/)にサインインします。

1. キューのリストで、`serverlessrepo-fork-example` を検索して `ReplayQueue` を選択します。

1. **[メッセージの送信と受信]** を選択します。

1. **[Send and receive messages in fork-example-ecommerce-*my-app*...ReplayP-ReplayQueue-*123ABCD4E5F6*]** (fork-example-ecommerce-my-app...ReplayP-ReplayQueue-123ABCD4E5F6 のメッセージの表示/削除) ダイアログボックスで、**[Poll for messages]** (メッセージのポーリング) を選択します。

1. イベントがキューに入っていることを確認するには、キューに表示されているメッセージの横にある [**詳細**] を選択します。

# ステップ 4: 復旧のために問題をシミュレートしてイベントを再生する
<a name="simulate-issue-replay-events-for-recovery"></a>

## ステップ 1: シミュレートした問題を有効にして別の API リクエストを送信する
<a name="enable-simulated-issue-send-second-api-request"></a>

1. [AWS Lambda コンソール](https://console.aws.amazon.com/lambda/) にサインインします。

1. ナビゲーションパネルで [**関数**] を選択します。

1. `serverlessrepo-fork-example` を検索して `CheckoutFunction` を選択します。

1. [**fork-example-ecommerce-*my-app*-CheckoutFunction-*ABCDEF*...**] ページの [**環境変数**] セクションで、**BUG\$1ENABLED** 変数を **true** に設定して [**保存**] を選択します。

1. 次の JSON を `test_event_2.json` という名前のファイルにコピーします。

   ```
   {
   	   "id": 9917,
   	   "date": "2019-03-26T21:11:10-08:00",
   	   "status": "confirmed",
   	   "customer": {
   	      "id": 56999,
   "quantity": 1,
   	      "price": 75.00,
   	      "subtotal": 75.00
   	   }]
   	}
   ```

1. API エンドポイントに HTTPS リクエストを送信するには、`curl` コマンドを実行してサンプルイベントペイロードを入力として渡します。次に例を示します。

   ```
   curl -d "$(cat test_event_2.json)" https://abcdefghij.execute-api.us-east-2.amazonaws.com/Prod/checkout
   ```

   API は、次の空のレスポンスを返し、実行が成功したことを示します。

   ```
   { }
   ```

## ステップ 2: シミュレートしたデータの破損を検証する
<a name="verify-simulated-data-corruption"></a>

1. [Amazon DynamoDB コンソール](https://console.aws.amazon.com/dynamodb/)にサインインします。

1. ナビゲーションパネルで、[**テーブル**] を選択します。

1. `serverlessrepo-fork-example` を検索して `CheckoutTable` を選択します。

1. テーブルの詳細ページで [**項目**] を選択し、作成済みの項目を選択します。

   保存済みの属性が表示されます。一部の属性は [**CORRUPTED\$1**] とマークされています。

## ステップ 3: シミュレートした問題を無効にする
<a name="disable-simulated-issue"></a>

1. [AWS Lambda コンソール](https://console.aws.amazon.com/lambda/) にサインインします。

1. ナビゲーションパネルで [**関数**] を選択します。

1. `serverlessrepo-fork-example` を検索して `CheckoutFunction` を選択します。

1. [**fork-example-ecommerce-*my-app*-CheckoutFunction-*ABCDEF*...**] ページの [**環境変数**] セクションで、**BUG\$1ENABLED** 変数を **false** に設定して [**保存**] を選択します。

## ステップ 4: 再生を有効にして問題から復旧する
<a name="enable-replay-recover-from-simulated-issue"></a>

1.  AWS Lambda コンソールのナビゲーションパネルで、**関数**を選択します。

1. `serverlessrepo-fork-example` を検索して `ReplayFunction` を選択します。

1. [**Designer**] セクションを展開して [**SQS**] タイルを選択し、次に [**SQS**] セクションで [**有効**] を選択します。
**注記**  
Amazon SQS のイベントソーストリガーが有効になるまで約 1 分かかります。

1. [**保存**] を選択します。

1. 復旧された属性を表示するには、Amazon DynamoDB コンソールに戻ります。

1. 再生を無効にするには、 AWS Lambda コンソールに戻り、 の Amazon SQS イベントソーストリガーを無効にします`ReplayFunction`。