0
0

lambdaでエラーログファイルをs3へ書き込む

Last updated at Posted at 2024-09-13

やりたいこと

lambdaでエラーログファイルをs3へ書き込む
・S3バケット作成
・IAMポリシーとIAMロール作成
・Lambda関数作成

①S3作成

image.png

全部デフォルト設定でよい
(ACL 無効 (推奨))
(パブリックアクセスをすべて ブロック にチェック)
(バケットのバージョニングを無効)

②IAMポリシーとIAMロール作成

先にポリシーを作成

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::your-bucket-name/*"
            ]
        }
    ]
}

次に、ロールを作成

image.png

さきほど作ったポリシーを付与してください

信頼されたエンティティが以下のように自動で作成される↓

{
    "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)}'
        }

ソースを書き換え、デプロイ

作成完了後、ロールを変更

image.png

④テスト実行

テスト実行

image.png

すると、ログファイルが書き込まれた

image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0