翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS SAM を使用して Amazon S3 イベントを処理する
このサンプルアプリケーションでは、概要とクイックスタートガイドで学習した内容に基づいて構築を行い、より複雑なアプリケーションをインストールします。このアプリケーションは、Amazon S3 オブジェクトアップロードイベントソースによって呼び出される Lambda 関数で構成されます。この演習は、AWS リソースにアクセスし、Lambda 関数を使用して AWS のサービスの呼び出しを行う方法を説明します。
このサンプルサーバーレスアプリケーションは、Amazon S3 での object-creation イベントを処理します。Amazon S3 は、バケットにアップロードされる各画像について object-created イベントを検出し、Lambda 関数を呼び出します。この Lambda 関数は、画像内のテキストを検出するために Amazon Rekognition 呼び出します。次に、Amazon Rekognition によって返された結果を DynamoDB テーブルに保存します。
注記
このサンプルアプリケーションでは、これまでの例とは少し異なる順序のステップを実行します。この例では、Lambda 関数をローカルでテストする前に、AWS リソースの作成と IAM 許可の設定を行う必要があるためです。ここでは、CloudFormation を利用してリソースを作成し、ユーザーの許可を設定します。それ以外の場合は、Lambda 関数をローカルでテストする前に、これを手動で行う必要があります。
この例はより複雑であるため、これまでのサンプルアプリケーションのインストールに慣れてから実行するようにしてください。
開始する前に
AWS SAM CLI のインストール に記載されている必要なセットアップが完了していることを確認してください。
ステップ 1: アプリケーションを初期化する
このセクションでは、AWS SAM テンプレートとアプリケーションコードで構成されるサンプルアプリケーションをダウンロードします。
アプリケーションを初期化する
-
AWS SAM CLI コマンドプロンプトで以下のコマンドを実行します。
sam init \ --location https://github.com/aws-samples/cookiecutter-aws-sam-s3-rekognition-dynamodb-python \ --no-input -
コマンドで作成されたディレクトリの内容を確認します (
aws_sam_ocr/)。-
template.yaml- Amazon S3 アプリケーションが必要とする、Lambda 関数、Amazon S3 バケット、および DynamoDB テーブルの 3 つの AWS リソースを定義します。テンプレートは、これらのリソース間のマッピングと許可も定義します。 -
src/ディレクトリ - Amazon S3 アプリケーションコードが含まれています。 -
SampleEvent.json- ローカルでのテストに使用されるサンプルイベントソースです。
-
ステップ 2: アプリケーションをパッケージ化する
このアプリケーションをローカルでテストする前に、AWS SAM CLI を使用してデプロイパッケージを作成する必要があります。このデプロイパッケージは、アプリケーションを AWS クラウドにデプロイする際に使用します。このデプロイは、アプリケーションをローカルでテストするために必要な AWS リソースと許可を作成します。
Lambda デプロイパッケージを作成する
-
パッケージ化されたコードを保存する場所に S3 バケットを作成します。既存の S3 バケットを使用する場合は、このステップをスキップします。
aws s3 mb s3://bucketname -
コマンドプロンプトで以下の
packageCLI コマンドを実行して、デプロイパッケージを作成します。sam package \ --template-file template.yaml \ --output-template-file packaged.yaml \ --s3-bucketbucketname次のステップでアプリケーションをデプロイするときは、新しいテンプレートファイルである
packaged.yamlを指定します。
ステップ 3: アプリケーションをデプロイする
デプロイパッケージを作成したところで、これを使用してアプリケーションを AWS クラウドにデプロイします。デプロイ後、それを AWS クラウドで呼び出すことによってアプリケーションをテストします。
サーバーレスアプリケーションを AWS クラウドにデプロイする
-
AWS SAM CLI で
deployコマンドを使用して、テンプレートで定義したすべてのリソースをデプロイします。sam deploy \ --template-file packaged.yaml \ --stack-name aws-sam-ocr \ --capabilities CAPABILITY_IAM \ --regionus-east-1コマンドの
--capabilitiesパラメータは、CloudFormation が IAM ロールを作成することを可能にします。CloudFormation は、テンプレートで定義されている AWS リソースを作成します。これらのリソースの名前には、CloudFormation コンソールからアクセスできます。
AWS クラウドでサーバーレスアプリケーションをテストする
-
このサンプルアプリケーション用に作成した Amazon S3 バケットに画像をアップロードします。
-
DynamoDB コンソールを開き、作成されたテーブルを見つけます。Amazon Rekognition によって返された結果のテーブルを確認します。
-
DynamoDB テーブルに、アップロードされた画像内で Amazon Rekognition が見つけたテキストが含まれる新しいレコードがあることを確認します。
ステップ 4: アプリケーションをローカルでテストする
アプリケーションをローカルでテストする前に、CloudFormation よって作成された AWS リソースの名前を取得する必要があります。
-
CloudFormation から Amazon S3 のキー名とバケット名を取得します。オブジェクトキー、バケット名、およびバケット ARN の値を置き換えて、
SampleEvent.jsonファイルを変更します。 -
DynamoDB テーブル名を取得します。この名前は、以下の
sam local invokeコマンドで使用されます。
AWS SAM CLI を使用してサンプル Amazon S3 イベントを生成し、Lambda 関数を呼び出します。
TABLE_NAME=Table name obtained from CloudFormation consolesam local invoke --event SampleEvent.json
TABLE_NAME= の部分は、DynamoDB テーブル名を設定します。--event パラメータは、Lambda 関数に渡すテストイベントメッセージが含まれるファイルを指定します。
これで、期待される DynamoDB レコードが Amazon Rekognition によって返された結果に基づいて作成されたことを確認できるようになりました。
次のステップ
AWS SAM の詳細については、次のリソースを参照してください。
-
AWS SAM サンプルアプリケーション
- AWS SAM GitHub リポジトリには、ダウンロードして実験するための追加のサンプルアプリケーションが含まれています。 -
サーバーレスランド
– サーバーレスパターン、コード例、SAM AWS アプリケーション専用の学習リソースをまとめたサイト。