AWS LambdaからS3にファイルを書き込む/読み込む

目次

LambdaからS3にファイルを書き込む/読み込む

  • Lambdaの関数を実行してS3にテキストファイルを作成し文字列の書き込みと読み込みを行います。
  • コードはPythonです。

 

関数を作成する

1.検索入力欄で「Lambda」と入力し、表示された「Lambda」をクリックします。

2.左の関数のリンクをクリックし、画面右の「関数の作成」ボタンをクリックします。

3.関数の作成では「一から作成」を選択します。

 

4.関数名を入力します。ランタイムはPython、アーキテクチャはx86_64を選択しました。
「関数の作成」をクリックすると関数が作成されます。

 

関数にs3を操作する権限を付与する

この関数はS3を操作するのでその権限を付与します。
※関数作成前にロールを作成しておいて、関数作成時に作成したロールを付与しても可です。

1.作成した関数の画面で、「設定」>「アクセス権限」>実行ロールのロール名のリンクをクリックします。IAMのロールの画面に遷移します。

 

2.「許可」>「許可を追加」>「ポリシーをアタッチ」をクリックします。

 

3.S3で検索し、AmazonS3FullAccessにチェックを入れ、「許可を追加」をクリックするとs3フルアクセスのポリシーが追加されます。

 

LambdaからS3のファイルに書き込む

作成した関数の画面で「コード」をクリックしてコードを表示します。

1.lambda_function.pyにコードを記載します。

import boto3

s3 = boto3.resource('s3')

def lambda_handler(event, context):
    
    bucket = 'test-s3-data-2022' # バケット名
    key = 'testData1.txt' # ファイル名
    contents = 'hello world 1122' # 書き込む文字列
    
    obj = s3.Object(bucket,key)
    obj.put(Body=contents)
    return

1行目のboto3はAWSのライブラリです。
3行目は、boto3.resourceにしています。
7行目は、バケットです。作成済みの状態です。
8行目は、ファイル名です。ファイルが存在しない場合は、新規作成されます。

この処理を繰り返すとファイルは同名ですがエラーにならず上書きされます。

 

2.「Deploy」をクリックしてから「Test」をクリックして実行します。
※イベントがない場合はイベント設定のダイアログが表示されるので設定して実行します。

 

3.S3を見ると指定したバケットの中にファイルが作成されています。
ファイルをダウンロードして中を見ると指定した文字列があります。

バケット

 

テキストファイル

 

 

LambdaからS3にあるファイルを読み込む

1.上記「Lambdaで関数を作成する」を元にLambdaで関数を作成します。
関数名はread-text1としランタイムはPython 3.9、アーキテクチャはx86_64を選択しました。

 

2.上記「Lambdaの関数にs3を操作する権限を付与する」を元にs3のポリシーを追加します。

 

3.lambda_function.pyにコードを記載します。

import boto3

s3 = boto3.client('s3')

def lambda_handler(event, context):

    bucket = 'test-s3-data-2022' # バケット名
    key = 'testData1.txt' # ファイル名
    
    obj = s3.get_object(Bucket=bucket, Key=key)
    text = obj['Body'].read()
    return text

1行目のboto3はAWSのライブラリです。
3行目は、boto3.clientにしています。
7行目は、バケットです。
8行目は、ファイル名です。

 

4.「Deploy」をクリックしてから「Test」をクリックすると実行します。
Execution ResultタブのResponseに文字列が表示されます。

関連の記事

AWS Lambdaでhello worldを出力する(Python)
AWS Lambda コードのフォントサイズを大きくする
AWS Lambda 関数で引数を使用する(Python)

△上に戻る