

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

# で Amazon S3 イベントを処理する AWS SAM
<a name="serverless-example-s3"></a>

このサンプルアプリケーションでは、概要とクイックスタートガイドで学習した内容に基づいて構築を行い、より複雑なアプリケーションをインストールします。このアプリケーションは、Amazon S3 オブジェクトアップロードイベントソースによって呼び出される Lambda 関数で構成されます。この演習では、Lambda 関数を使用して AWS リソースにアクセスし、 AWS サービス呼び出しを行う方法を示します。

このサンプルサーバーレスアプリケーションは、Amazon S3 での object-creation イベントを処理します。Amazon S3 は、バケットにアップロードされる各画像について object-created イベントを検出し、Lambda 関数を呼び出します。この Lambda 関数は、画像内のテキストを検出するために Amazon Rekognition 呼び出します。次に、Amazon Rekognition によって返された結果を DynamoDB テーブルに保存します。

**注記**  
このサンプルアプリケーションでは、これまでの例とは少し異なる順序のステップを実行します。その理由は、この例では、Lambda 関数をローカルでテスト*する前に* AWS リソースを作成し、IAM アクセス許可を設定する必要があるためです。 CloudFormation を使用してリソースを作成し、アクセス許可を設定します。それ以外の場合は、Lambda 関数をローカルでテストする前に、これを手動で行う必要があります。  
この例はより複雑であるため、これまでのサンプルアプリケーションのインストールに慣れてから実行するようにしてください。

## [開始する前に]
<a name="serverless-example-s3-prereq"></a>

[AWS SAM CLI のインストール](install-sam-cli.md) に記載されている必要なセットアップが完了していることを確認してください。

## ステップ 1: アプリケーションを初期化する
<a name="serverless-example-s3-setup-local-app"></a>

このセクションでは、 AWS SAM テンプレートとアプリケーションコードで構成されるサンプルアプリケーションをダウンロードします。

**アプリケーションを初期化する**

1.  AWS SAM CLI コマンドプロンプトで以下のコマンドを実行します。

   ```
   sam init \
   --location https://github.com/aws-samples/cookiecutter-aws-sam-s3-rekognition-dynamodb-python \
   --no-input
   ```

1. コマンドで作成されたディレクトリの内容を確認します (`aws_sam_ocr/`)。
   + `template.yaml` – Amazon S3 アプリケーションに必要な 3 つの AWS リソースを定義します。Lambda 関数、Amazon S3 バケット、DynamoDB テーブルです。テンプレートは、これらのリソース間のマッピングと許可も定義します。
   + `src/` ディレクトリ - Amazon S3 アプリケーションコードが含まれています。
   + `SampleEvent.json` - ローカルでのテストに使用されるサンプルイベントソースです。

## ステップ 2: アプリケーションをパッケージ化する
<a name="serverless-example-s3-package-serverless-app"></a>

このアプリケーションをローカルでテストする前に、 を使用して AWS SAM CLIデプロイパッケージを作成する必要があります。デプロイパッケージは、アプリケーションを AWS クラウドにデプロイするために使用します。このデプロイでは、アプリケーションをローカルでテストするために必要な AWS リソースとアクセス許可が作成されます。

**Lambda デプロイパッケージを作成する**

1. パッケージ化されたコードを保存する場所に S3 バケットを作成します。既存の S3 バケットを使用する場合は、このステップをスキップします。

   ```
   aws s3 mb s3://bucketname
   ```

1. コマンドプロンプトで以下の `package` CLI コマンドを実行して、デプロイパッケージを作成します。

   ```
   sam package \
       --template-file template.yaml \
       --output-template-file packaged.yaml \
       --s3-bucket bucketname
   ```

   次のステップでアプリケーションをデプロイするときは、新しいテンプレートファイルである `packaged.yaml` を指定します。

## ステップ 3: アプリケーションをデプロイする
<a name="serverless-example-s3-deploy-serverless-app"></a>

デプロイパッケージを作成したら、それを使用してアプリケーションを AWS クラウドにデプロイします。次に、 AWS クラウドで呼び出してアプリケーションをテストします。

**サーバーレスアプリケーションを AWS クラウドにデプロイするには**
+ で AWS SAM CLI、 `deploy` コマンドを使用して、テンプレートで定義したすべてのリソースをデプロイします。

  

  ```
  sam deploy \
      --template-file packaged.yaml \
      --stack-name aws-sam-ocr \
      --capabilities CAPABILITY_IAM \
      --region us-east-1
  ```

  コマンドで、 `--capabilities`パラメータは CloudFormation に IAM ロールの作成を許可します。

  CloudFormation は、テンプレートで定義されている AWS リソースを作成します。これらのリソースの名前には、 CloudFormation コンソールからアクセスできます。

**AWS クラウドでサーバーレスアプリケーションをテストするには**

1. このサンプルアプリケーション用に作成した Amazon S3 バケットに画像をアップロードします。

1. DynamoDB コンソールを開き、作成されたテーブルを見つけます。Amazon Rekognition によって返された結果のテーブルを確認します。

1. DynamoDB テーブルに、アップロードされた画像内で Amazon Rekognition が見つけたテキストが含まれる新しいレコードがあることを確認します。

## ステップ 4: アプリケーションをローカルでテストする
<a name="serverless-example-s3-test-locally"></a>

アプリケーションをローカルでテストする前に、まず によって作成された AWS リソースの名前を取得する必要があります CloudFormation。
+ から Amazon S3 キー名とバケット名を取得します CloudFormation。オブジェクトキー、バケット名、およびバケット ARN の値を置き換えて、`SampleEvent.json` ファイルを変更します。
+ DynamoDB テーブル名を取得します。この名前は、以下の `sam local invoke` コマンドで使用されます。

 AWS SAM CLI を使用してサンプル Amazon S3 イベントを生成し、Lambda 関数を呼び出します。

```
TABLE_NAME=Table name obtained from CloudFormation console sam local invoke --event SampleEvent.json
```

`TABLE_NAME=` の部分は、DynamoDB テーブル名を設定します。`--event` パラメータは、Lambda 関数に渡すテストイベントメッセージが含まれるファイルを指定します。

これで、期待される DynamoDB レコードが Amazon Rekognition によって返された結果に基づいて作成されたことを確認できるようになりました。

## 次の手順
<a name="serverless-example-s3-next-steps"></a>

詳細については AWS SAM、次のリソースを参照してください。
+ **[サーバーレスランド](https://serverlessland.com/patterns?framework=AWS+SAM)** – サーバーレスパターン、コード例、SAM AWS アプリケーション専用の学習リソースをまとめたサイト。