Lambda → S3 へファイルアップロードをする方法をコンパクトにお伝えします。 連携できるを確認したい、通信方法を理解したい、といった場合には最小労力での動かし方を把握しましょう。
S3、Lambdaそれぞれのサービスを設定していきましょう。
①:S3で、ファイルアップロード先のbucketを作成
S3のbucket作成しましょう。 バケット名、AWSリージョンを設定して → bucket作成
②-1:Lambdaの関数を作成
関数の作成 >> 1から作成 を選択します。
実行ロールの部分が重要です。この後、S3にアップロードする際にS3へのアクセス権限が必要です。
赤枠で囲んだ部分が、ロールです。 後ほど、このロールにS3へのファイルアップロード可能なアクセス権限を付与していきます。
②-2:Lambdaの関数を作成:ファイルアップロードを実行するコードソース
関数のコードソースに書きを反映します。 下記部分は環境に応じて変更して下さい。bucket = '{S3で作成したアップロード先のbucket名}'
import json
import urllib.parse
import boto3
import datetime
def lambda_handler(event, context):
try:
# Get the object from the event and show its content type
s3 = boto3.resource(‘s3’)
bucket = ‘{S3で作成したアップロード先のbucket名}’
key = ‘test_{}.txt’.format(datetime.datetime.now().strftime(‘%Y-%m-%d-%H-%M-%S’))
file_contents = ‘S3へファイルアップロード’
obj = s3.Object(bucket,key)
obj.put( Body=file_contents )
except Exception as e:
print(e)
raise e
②-3:Lambdaのテストイベント設定
イベント JSON部分に下記で指定した、形式を反映して下さい。
JSON イベント形式
{
“Records”: [
{
“eventVersion”: “2.0”,
“eventSource”: “aws:s3”,
“awsRegion”: “us-east-1”,
“eventTime”: “1970-01-01T00:00:00.000Z”,
“eventName”: “ObjectCreated:Put”,
“userIdentity”: {
“principalId”: “EXAMPLE”
},
“requestParameters”: {
“sourceIPAddress”: “127.0.0.1”
},
“responseElements”: {
“x-amz-request-id”: “EXAMPLE123456789”,
“x-amz-id-2”: “EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH”
},
“s3”: {
“s3SchemaVersion”: “1.0”,
“configurationId”: “testConfigRule”,
“bucket”: {
“name”: “example-bucket”,
“ownerIdentity”: {
“principalId”: “EXAMPLE”
},
“arn”: “arn:aws:s3:::example-bucket”
},
“object”: {
“key”: “test%2Fkey”,
“size”: 1024,
“eTag”: “0123456789abcdef0123456789abcdef”,
“sequencer”: “0A1B2C3D4E5F678901”
}
}
}
]
}
③:Lambdaの実行ロールにS3へのアクセス権限を付与
Lambdaの設定 >> 実行ロール へ。
先程作成した「実行ロール」が記載されています。ここからリンク遷移をして下さい。
IAM Mangerへ飛びます。
Lambdaの実行ロールとなっているロール(リンク遷移でこればそのままでOK)に対して、 アクセス許可を追加 >> ポリシーをアタッチ から AmazonS3FullAccess をアタッチして下さい。
④:テストで確認
Deploy → テスト を実行。 S3の指定したbucketへファイルがアップロードされています。
以上です。
今回紹介した、S3へのファイルアップロード方法だけでは、あまり使いみちがありませんが、トリガーなども組み合わせると、サーバーレスで、S3にファイル格納をすることが可能です。