

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

# チュートリアル: Amazon EventBridge サンプルアプリケーションを作成する
<a name="eb-tutorial-get-started"></a>

EventBridge を使用して、[ルール](eb-rules.md)を使用した特定の Lambda 関数に[イベント](eb-events.md)をルーティングできます。

このチュートリアルでは、AWS CLI、Node.js、および [GitHub レポ](https://github.com/aws-samples/amazon-eventbridge-producer-consumer-example) 内のコードを使用して、以下の項目を作成します。
+ 銀行 ATM トランザクションのイベントを生成する [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 関数。
+ EventBridge ルールの[ターゲット](eb-targets.md)として使用する 3 つの Lambda 関数。
+ また、[イベントパターン](eb-event-patterns.md)に基づいて作成したイベントを、正しいダウンストリーム関数にルーティングするルール。

この例では、EventBridge ルールを定義する AWS SAM テンプレートを使用します。EventBridge と AWS SAM テンプレートの使用の詳細については、[AWS Serverless Application Model テンプレートを使用した Amazon EventBridge リソースのデプロイ](eb-use-sam.md) を参照してください。

レポでは、*atmProducer* サブディレクトリに `handler.js` が含まれ、イベントを生成する ATM サービスを表しています。このコードは Node.js で記述された Lambda ハンドラーで、JavaScript コードのこの行を使用する [AWSSDK](https://www.npmjs.com/package/aws-sdk) からイベントを EventBridge に発行します。

```
const result = await eventbridge.putEvents(params).promise()
```

このディレクトリには `events.js` を含み、Entries 配列にいくつかのテストトランザクションをリストしています。JavaScript では、1 つのイベントは次のように定義されています。

```
{
  // Event envelope fields
  Source: 'custom.myATMapp',
  EventBusName: 'default',
  DetailType: 'transaction',
  Time: new Date(),

  // Main event body
  Detail: JSON.stringify({
    action: 'withdrawal',
    location: 'MA-BOS-01',
    amount: 300,
    result: 'approved',
    transactionId: '123456',
    cardPresent: true,
    partnerBank: 'Example Bank',
    remainingFunds: 722.34
  })
}
```

イベントの*詳細*セクションでは、トランザクション属性を指定します。これには ATM のロケーション、金額、パートナー銀行、取引の結果が含まれます。

*atmConsumer* サブディレクトリの `handler.js` ファイルには、3 つの関数が含まれています。

```
exports.case1Handler = async (event) => {
  console.log('--- Approved transactions ---')
  console.log(JSON.stringify(event, null, 2))
}

exports.case2Handler = async (event) => {
  console.log('--- NY location transactions ---')
  console.log(JSON.stringify(event, null, 2))
}

exports.case3Handler = async (event) => {
  console.log('--- Unapproved transactions ---')
  console.log(JSON.stringify(event, null, 2))
}
```

各関数はトランザクションイベントを受信し、`console.log` ステートメントから [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/WhatIsCloudWatchLogs.html) に記録されます。コンシューマー関数はプロデューサーとは独立して動作し、イベントのソースを認識しません。

ルーティングロジックは、アプリケーションの AWS SAM テンプレートによってデプロイされる EventBridge ルールに含まれています。ルールは、イベントの受信ストリームを評価し、一致するイベントをターゲットの Lambda 関数にルーティングします。

ルールでは、一致するイベントと同じ構造の JSON オブジェクトであるイベントパターンを使用します。ルールの 1 つのイベントパターンを次に示します。

```
{
  "detail-type": ["transaction"],
  "source": ["custom.myATMapp"],
  "detail": {
    "location": [{
      "prefix": "NY-"
    }]
  }
}
```

**Topics**
+ [前提条件](#eb-gs-prereqs)
+ [ステップ 1: アプリケーションを作成する](#eb-gs-create-application)
+ [ステップ 2: アプリケーションを実行する](#eb-gs-run-application)
+ [ステップ 3: ログを確認し、アプリケーションが動作することを検証する](#eb-gs-check-logs)
+ [ステップ 4: リソースをクリーンアップする](#cleanup)

## 前提条件
<a name="eb-gs-prereqs"></a>

このチュートリアルを完了するには、以下のリソースが必要です。
+ AWS アカウント。まだ持っていない場合は、[AWS アカウントを作成してください。](https://portal.aws.amazon.com/gp/aws/developer/registration/index.html)
+ AWS CLI インストール済み。AWS CLI をインストールするには、「[AWS CLI バージョン 2 のインストール、更新、およびアンインストール](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html)」を参照してください。
+ Node.js 12.x インストール済み。Node.js をインストールするには、[ダウンロード](https://nodejs.org/en/download/)を参照してください。

## ステップ 1: アプリケーションを作成する
<a name="eb-gs-create-application"></a>

サンプルアプリケーションをセットアップするには、AWS CLI と Git を使用して、必要な AWS リソースを作成します。

**アプリケーションを作成するには**

1. [AWSにサインインします](https://console.aws.amazon.com/console/home)。

1. ローカルマシンで、[Git をインストール](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)し、[AWS Serverless Application Model CLI をインストール](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html)します。

1. 新しいディレクトリを作成し、ターミナルのそのディレクトリに移動します。

1. コマンドラインで `git clone https://github.com/aws-samples/amazon-eventbridge-producer-consumer-example` と入力します。

1. コマンドラインから、以下のコマンドを実行します。

   ```
   cd ./amazon-eventbridge-producer-consumer-example
   sam deploy --guided
   ```

1. ターミナルで次のように実行します。

   1. `Stack Name` にスタックの名前を入力します。たとえば、スタック `Test` に名前を付けます。

   1. `AWS Region` にはリージョンと入力します。例えば、`us-west-2`。

   1. `Confirm changes before deploy` に「`Y`」と入力します。

   1. [`Allow SAM CLI IAM role creation`] に「`Y`」と入力します。

   1. [`Save arguments to configuration file`] に「`Y`」と入力します。

   1. `SAM configuration file` に「`samconfig.toml`」と入力します。

   1. `SAM configuration environment` に「`default`」と入力します。

## ステップ 2: アプリケーションを実行する
<a name="eb-gs-run-application"></a>

これでリソースが設定されたので、コンソールを使用して関数をテストします。

**アプリケーションを実行するには**

1. AWS SAM アプリケーションをデプロイしたのと同じリージョンで [Lambda コンソール](https://console.aws.amazon.com/lambda/)を開きます。

1. プレフィックス **[atm-demo]** が付いた 4 つの Lambda 関数があります。**[atmProducerFn]** 関数を選択してから、**[Actions] (アクション)**、**[Test] (テスト)** を選択します。

1. **Name** (名前) には、`Test` と入力します。

1. **[テスト]** を選択します。

## ステップ 3: ログを確認し、アプリケーションが動作することを検証する
<a name="eb-gs-check-logs"></a>

これでアプリケーションが実行されたので、コンソールを使用して CloudWatch Logs を確認します。

**ログを確認するには**

1. AWS SAM アプリケーションを実行したのと同じリージョンで [CloudWatch コンソール](https://console.aws.amazon.com/cloudwatch/)を開きます。

1. [**Logs**] を選択し、**ロググループ**を選択します。

1. **[atmConsumerCase1]** を含むロググループを選択します。ATM によって承認された 2 つの取引を表す 2 つのストリームが表示されます。アウトプットを表示するログストリームを選択します。

1. ロググループのリストに戻り、**[atmConsumerCase2]** を含むロググループを選択します。*ニューヨーク* のロケーションフィルターに一致する、2 つの取引を表す 2 つのストリームが表示されます。

1. ロググループのリストに戻り、**atmConsumerCase3** を含むロググループを選択します。ストリームを開いて、拒否された取引を確認します。

## ステップ 4: リソースをクリーンアップする
<a name="cleanup"></a>

このチュートリアル用に作成したリソースは、保存を希望しない限り、すぐに削除できます。使用しなくなった AWS リソースを削除することで、AWS アカウントに請求される料金が発生しないようにできます。

**EventBridge ルールを削除するには**

1. Eventbridge コンソールの [[Rules](https://console.aws.amazon.com/events/home#/rules)] (ルール) ページを開きます。

1. 作成したルールを選択します。

1. [**Delete**] (削除) を選択します。

1. [**Delete**] (削除) を選択します。

**Lambda 関数を削除するには**

1. Lambda コンソールの[関数ページ](https://console.aws.amazon.com/lambda/home#/functions)を開きます。

1. 作成した関数を選択します。

1. **[Actions]** (アクション) で、**[Delete]** (削除) を選択します。

1. [**削除**] を選択します。

**CloudWatch Logs ロググループを削除するには**

1. [CloudWatch コンソール](https://console.aws.amazon.com/Cloudwatch/home)を開きます。

1. **[Logs] (ログ)**、**[Log groups] (ロググループ)** を選択します。

1. このチュートリアルで作成したロググループを選択します。

1. [**アクション**]、[**ロググループの削除**] の順にクリックします。

1. **[Delete]** (削除) をクリックします。