Amazon S3 イベントを処理する - AWS Serverless Application Model

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

Amazon S3 イベントを処理する

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

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

注記

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

この例はより複雑であるため、これまでのサンプルアプリケーションのインストールに慣れてから実行するようにしてください。

開始する前に

AWS SAM CLI のインストール に記載されている必要なセットアップが完了していることを確認してください。

ステップ 1: アプリケーションを初期化する

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

アプリケーションを初期化する
  1. AWS SAM CLI コマンドプロンプトで以下のコマンドを実行します。

    sam init \ --location https://github.com/aws-samples/cookiecutter-aws-sam-s3-rekognition-dynamodb-python \ --no-input
  2. コマンドで作成されたディレクトリの内容を確認します (aws_sam_ocr/)。

    • template.yaml – Amazon S3 アプリケーションに必要な 3 つの AWS リソースを定義します。Lambda 関数、Amazon S3 バケット、DynamoDB テーブルです。テンプレートは、これらのリソース間のマッピングと許可も定義します。

    • src/ ディレクトリ - Amazon S3 アプリケーションコードが含まれています。

    • SampleEvent.json - ローカルでのテストに使用されるサンプルイベントソースです。

ステップ 2: アプリケーションをパッケージ化する

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

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

    aws s3 mb s3://bucketname
  2. コマンドプロンプトで以下の package CLI コマンドを実行して、デプロイパッケージを作成します。

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

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

ステップ 3: アプリケーションをデプロイする

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

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

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

    コマンドでは、 --capabilitiesパラメータは AWS CloudFormation が IAM ロールを作成できるようにします。

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

AWS クラウドでサーバーレスアプリケーションをテストするには
  1. このサンプルアプリケーション用に作成した Amazon S3 バケットに画像をアップロードします。

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

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

ステップ 4: アプリケーションをローカルでテストする

アプリケーションをローカルでテストする前に、まず によって作成された AWS リソースの名前を取得する必要があります AWS CloudFormation。

  • から Amazon S3 キー名とバケット名を取得します AWS CloudFormation。オブジェクトキー、バケット名、およびバケット ARN の値を置き換えて、SampleEvent.json ファイルを変更します。

  • DynamoDB テーブル名を取得します。この名前は、以下の sam local invoke コマンドで使用されます。

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

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

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

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

次のステップ

AWS SAM GitHub リポジトリには、ダウンロードして試すための追加のサンプルアプリケーションが含まれています。このリポジトリにアクセスするには、「AWS SAM サンプルアプリケーション」を参照してください。