Aws-lambda-using-lambda-function-with-amazon-s3
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 をクリックします-
ステップ2
S3ストレージをクリックし、アップロードされたファイルを保存する*バケットを作成*します。
ステップ3
- バケットの作成*ボタンをクリックすると、次のような画面が表示されます-
ステップ4
詳細*バケット名を入力し、地域*を選択して、左下にある*作成*ボタンをクリックします。 したがって、 workingwithlambdaands3 という名前のバケットを作成しました。
ステップ5
今、バケット名をクリックすると、以下に示すようにファイルをアップロードするように求められます-
したがって、S3でのバケットの作成は完了です。
S3およびLambdaで機能するロールを作成する
S3とラムダで動作するロールを作成するには、以下の手順に従ってください-
ステップ1
以下に示すように、AWSサービスに移動し、IAMを選択します-
ステップ2
次に、以下に示すように、 IAM→ Roles をクリックします-
ステップ3
ここで、 Create role をクリックして、このロールを使用するサービスを選択します。 Lambdaを選択し、 Permission ボタンをクリックします。
ステップ4
下から許可を追加し、[レビュー]をクリックします。
ステップ5
次のアクセス許可を選択したことを確認します-
選択したポリシーが AmazonS3FullAccess、AWSLambdaFullAccess および CloudWatchFullAccess であることに注意してください。
ステップ6
ここで、ロール名、ロールの説明を入力し、下部の Create Role ボタンをクリックします。
したがって、 lambdawiths3service という名前のロールが作成されます。
Lambda関数を作成し、S3トリガーを追加する
このセクションでは、Lambda関数を作成してS3トリガーを追加する方法を見てみましょう。 この目的のために、あなたは以下に与えられた番目のステップに従う必要があります-
ステップ1
AWSサービスに移動し、以下に示すようにLambdaを選択します-
ステップ2
*Lambda* をクリックして、 *Name* を追加するプロセスに従います。 *Runtime、Role* などを選択します。 関数を作成します。 作成したLambda関数は、以下のスクリーンショットに示されています-
ステップ3
次に、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関数がトリガーされます-