Aws-lambda-using-lambda-function-with-amazon-s3

提供:Dev Guides
移動先:案内検索

Amazon S3でLambda関数を使用する

Amazon S3サービスは、ファイルをアップロードまたは削除できるファイルストレージに使用されます。 S3バケットにファイルのアップロードがある場合、S3でAWS Lambdaをトリガーできます。 AWS Lambdaには、AWS Lambda関数の開始点として機能するハンドラー関数があります。 ハンドラーにはイベントの詳細があります。 この章では、S3バケットにファイルをアップロードするときにAWS S3を使用してAWS Lambda関数をトリガーする方法を見てみましょう。

Amazon S3でAWS Lambda関数を使用する手順

Amazon S3でAWS Lambdaの使用を開始するには、次のものが必要です-

  • S3バケットを作成する
  • s3およびlambdaを使用する権限を持つロールを作成します
  • ラムダ関数を作成し、トリガーとしてs3を追加します。

Amazon S3とAWS Lambdaの基本的な相互作用を示す例の助けを借りて、これらの手順を見てみましょう。

  • ユーザーはAmazon S3バケットにファイルをアップロードします
  • ファイルがアップロードされると、バックグラウンドでAWS Lambda関数がトリガーされ、ファイルがアップロードされたことを示すコンソールメッセージの形式で出力が表示されます。
  • ファイルがアップロードされると、ユーザーはCloudwatchログでメッセージを見ることができます。

例の流れを説明するブロック図はここに示されています-

アップロード関数

S3バケットの作成

以下に示す手順を使用して、AWSコンソールでs3バケットを作成することから始めましょう-

ステップ1

アマゾンサービスに移動し、下の画像で強調表示されているストレージセクションで S3 をクリックします-

S3ストレージ

ステップ2

S3ストレージをクリックし、アップロードされたファイルを保存する*バケットを作成*します。

アップロードされたファイル

ステップ3

  • バケットの作成*ボタンをクリックすると、次のような画面が表示されます-

作成をクリック

ステップ4

詳細*バケット名を入力し、地域*を選択して、左下にある*作成*ボタンをクリックします。 したがって、 workingwithlambdaands3 という名前のバケットを作成しました。

地域の選択

ステップ5

今、バケット名をクリックすると、以下に示すようにファイルをアップロードするように求められます-

バケットのアップロード

したがって、S3でのバケットの作成は完了です。

S3およびLambdaで機能するロールを作成する

S3とラムダで動作するロールを作成するには、以下の手順に従ってください-

ステップ1

以下に示すように、AWSサービスに移動し、IAMを選択します-

Work With S3

ステップ2

次に、以下に示すように、 IAM→ Roles をクリックします-

Iam Roles

ステップ3

ここで、 Create role をクリックして、このロールを使用するサービスを選択します。 Lambdaを選択し、 Permission ボタンをクリックします。

許可ボタン

ステップ4

下から許可を追加し、[レビュー]をクリックします。

レビューをクリック

ステップ5

次のアクセス許可を選択したことを確認します-

以下の許可

選択したポリシーが AmazonS3FullAccess、AWSLambdaFullAccess および CloudWatchFullAccess であることに注意してください。

ステップ6

ここで、ロール名、ロールの説明を入力し、下部の Create Role ボタンをクリックします。

役割の作成

したがって、 lambdawiths3service という名前のロールが作成されます。

Lambda関数を作成し、S3トリガーを追加する

このセクションでは、Lambda関数を作成してS3トリガーを追加する方法を見てみましょう。 この目的のために、あなたは以下に与えられた番目のステップに従う必要があります-

ステップ1

AWSサービスに移動し、以下に示すようにLambdaを選択します-

Select Lambda

ステップ2

*Lambda* をクリックして、 *Name* を追加するプロセスに従います。 *Runtime、Role* などを選択します。 関数を作成します。 作成したLambda関数は、以下のスクリーンショットに示されています-

ランタイムの選択

ステップ3

次に、S3トリガーを追加します。

S3を追加

ステップ4

上からトリガーを選択し、以下に示すように詳細を追加します-

トリガーを選択

ステップ5

バケットのドロップダウンから作成されたバケットを選択します。 イベントタイプには次の詳細があります-

バケットダウンドロップ

ファイルのアップロード、削除などのときにAWS Lambdaトリガーが必要になるため、* Object Created(All)*を選択します。

ステップ6

追加したファイルのフィルタリングに使用されるプレフィックスとファイルパターンを追加できます。 たとえば、.jpgイメージに対してのみラムダをトリガーします。 アップロードされたすべてのファイルに対してLambdaをトリガーする必要があるため、ここでは空白のままにします。 [追加]ボタンをクリックして、トリガーを追加します。

ファイルパターン

ステップ7

以下に示すように、ラムダ関数のトリガー表示を見つけることができます-

トリガー表示

aws lambda関数の詳細を追加しましょう。 ここでは、オンラインエディターを使用してコードを追加し、nodejsをランタイム環境として使用します。

ステップ8

AWS LambdaでS3をトリガーするには、以下に示すようにコードでS3イベントを使用する必要があります-

exports.handler = function(event, context, callback) {
   console.log("Incoming Event: ", event);
   const bucket = event.Records[0].s3.bucket.name;
   const filename = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
   const message = `File is uploaded in - ${bucket} -> ${filename}`;
   console.log(message);
   callback(null, message);
};

イベントパラメータには、S3eventの詳細が含まれていることに注意してください。 S3bucketで画像をアップロードするときにログに記録されるバケット名とファイル名をコンソールに表示しました。

ステップ9

次に、変更を保存し、S3uploadを使用してラムダ関数をテストします。 以下はAWS Lambdaに追加されたコードの詳細です-

コードの詳細

ステップ10

次に、ロール、メモリ、およびタイムアウトを追加しましょう。

メモリタイムアウト

手順11

次に、Lambda関数を保存します。 AmazonサービスからS3を開き、先ほど作成したバケット workingwithlambdaands3 を開きます。

以下に示すように、その中に画像をアップロードします-

画像のアップロード

手順12

示されているようにファイルを追加するには、*アップロード*ボタンをクリックします-

アップロードをクリック

ステップ13

[ファイルの追加]をクリックして、ファイルを追加します。 ファイルをドラッグアンドドロップすることもできます。 次に、[*アップロード]ボタンをクリックします。

ファイルの追加

したがって、S3バケットに1つの画像をアップロードしました。

ステップ14

トリガーの詳細を確認するには、AWSサービスに移動し、 CloudWatch を選択します。 Lambda関数のログを開き、次のコードを使用します-

exports.handler = function(event, context, callback) {
   console.log("Incoming Event: ", event);
   const bucket = event.Records[0].s3.bucket.name;
   const filename = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
   const message = `File is uploaded in - ${bucket} -> ${filename}`;
   console.log(message);
   callback(null, message);
};

Cloudwatchで確認できる出力は次のとおりです-

クラウドウォッチを監視

ファイルがS3バケットにアップロードされ、詳細が以下に示すようにCloudwatchに記録されると、AWS Lambda関数がトリガーされます-

S3バケット