やりたいこと
lambdaでエラーログファイルをs3へ書き込む
・S3バケット作成
・IAMポリシーとIAMロール作成
・Lambda関数作成
①S3作成
全部デフォルト設定でよい
(ACL 無効 (推奨))
(パブリックアクセスをすべて ブロック にチェック)
(バケットのバージョニングを無効)
②IAMポリシーとIAMロール作成
先にポリシーを作成
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::your-bucket-name/*"
]
}
]
}
次に、ロールを作成
さきほど作ったポリシーを付与してください
信頼されたエンティティが以下のように自動で作成される↓
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
③Lambda関数作成
pythonで作成
import boto3
from datetime import datetime
s3 = boto3.resource('s3')
bucket = s3.Bucket('bucket_name')
def lambda_handler(event, context):
# 現在の日付と時刻を取得し、フォーマット
current_time = datetime.now().strftime('%Y%m%d_%H%M%S') # 年月日_時分秒
directory = 'logs/' # ディレクトリパス(S3内でのフォルダ)
key = f'{directory}testData_{current_time}.txt' # ディレクトリパスを含めたファイル名
contents = 'hello world' # ファイルの内容
try:
# バケットにファイルをアップロード
bucket.put_object(Key=key, Body=contents)
return {
'statusCode': 200,
'body': f'File {key} uploaded successfully'
}
except Exception as e:
return {
'statusCode': 500,
'body': f'Error uploading file: {str(e)}'
}
ソースを書き換え、デプロイ
作成完了後、ロールを変更
④テスト実行
テスト実行
すると、ログファイルが書き込まれた