今回は AWS Lambda を使ってS3にファイルがアップロードされたのを検知します。
その後に色々やりたいのですが、まずは今回は検知だけで。
AmazonS3の設定
試験しやすいようにAWS CLIを使って以下のようにバケットの作成を行います。
1 2 3 4 |
$ aws s3 mb s3://sample-app01.developer-collaboration.com make_bucket: sample-app01.developer-collaboration.com |
バケットが作成されました。
そしてローカルのテストファイルを作成します。
1 2 3 4 5 6 7 8 |
$ mkdir ./input/ $ vi ./input/sample.csv --------- 1,テスト,AAA 2,テスト2,BBB --------- |
こちらをAWS CLIでアップロード。
1 2 3 4 |
$ aws s3 sync ./input/ s3://sample-app01.developer-collaboration.com/input/ upload: input/sample.csv to s3://sample-app01.developer-collaboration.com/input/sample.csv |
一旦、ファイルは削除いたします。
1 2 3 |
$ aws s3 rm s3://sample-app01.developer-collaboration.com/input/sample.csv |
S3側の準備はここまでです。
AWS Lambda の設定
まずAWSコンソールからLambdaにアクセスします。
「関数の作成」をクリックします。
「関数の作成」の「一から作成」を選択された状態にします。
名前を「myFirstTest」として「ロール」セレクトボックスの部分をクリックします。
「カスタムロールの作成」をクリックします。
特に変更せず、右下の「許可」をクリックします。
既存のロールで「lambda_basic_execution」が選ばれたので右下の「関数の作成」をクリックします。
「myFirstTest」の関数が作成されました。
トリガーを追加するために左側のメニューから「S3」を選択します。
トリガーの設定を以下にします。
バケット | sample-app01.developer-collaboration.com |
イベントタイプ | オブジェクトの作成(すべて) |
プレフィックス | input |
右下の「追加」をクリックします。
S3のトリガーが「保存されていない変更」で追加されているのが確認できました。
次に「myFirstTest」のLambda関数の部分をクリックします。
「index.js」を上記のように変更します。
設定したファイルは以下になります。
1 2 3 4 5 6 7 8 9 10 |
exports.handler = (event, context, callback) => { var Bucket = event.Records[0].s3.bucket.name; var ObjKey = event.Records[0].s3.object.key; var FilePath = Bucket + '/' + ObjKey; console.log('BucketName : ' + Bucket); console.log('ObjKey : ' + ObjKey); console.log('FilePath : ' + FilePath); } |
右上の「保存」ボタンをクリックします。
こちらでトリガーの設定は完了です。
S3の操作
再度、AWS CLIに戻りS3にファイルをアップしてみます。
1 2 3 4 |
$ aws s3 sync ./input/ s3://sample-app01.developer-collaboration.com/input/ upload: input/sample.csv to s3://sample-app01.developer-collaboration.com/input/sample.csv |
「モニタリング」タブを確認すると以下のようにイベントの発動がモニタリングできます。
また「CloudWatchのログを表示」を押すと以下のようなイベントのログが表示できます。
こちらで無事、ファイルのアップロードの検知が実施できました。
今回はコンソールを使った基本的な動きを試してみたので、次回はもう少し複雑な動作などを試してみます。
【関連記事】
・AWS LambdaでS3にファイルがアップロードされたら、加工して別フォルダにファイルを作成する(Python)
・外部のライブラリを利用してのAWS Lambdaの設定
・AWS Lambdaをpython-lambda-localとlambda-uploaderを使ってローカル開発してみる
このブログは株式会社CoLabMixによる技術ブログです。
GCP、AWSなどでのインフラ構築・運用や、クローリング・分析・検索などを主体とした開発を行なっています。
Ruby on RailsやDjango、Pythonなどの開発依頼などお気軽にお声がけください。
開発パートナーを増やしたいという企業と積極的に繋がっていきたいです。