今回は AWS Lambda を使って、画像を S3 バケット に自動で格納する方法について解説します!
Lambdaは、起動のトリガーを設定することが可能ですが、今回の記事ではlambda自体は手動実行し、あくまで画像をS3へ格納する部分のみにフォーカスしています!
言語は、Pythonを使います!
1.はじめに
LambdaとS3の基礎知識があるとスムーズに進められますが、初心者の方でも理解しやすいように解説します。
概要を簡単に説明すると、
●Lambdaはサーバーレスの関数でEC2などのサーバーを用意せずとも、
実行環境一式が提供されるため、ソースコードさえあればプログラムの実行が可能となります。
●S3はストレージサービスで、今回のlambdaから格納する画像の保存先としています。
使い方は様々で、かなり柔軟性が高いサービスです。
LambdaやS3についての詳しい解説記事は以下を参照して下さい。
前提条件: AWSアカウントの作成
AWSアカウントをまだお持ちでない方は、公式サイトからアカウントを作成しておきましょう。
2. S3バケットの作成
それでは、早速やっていきましょう。
まずは、先にLambdaから画像をアップロードする S3バケット を作成しておきます。
S3を検索し、コンソールへ移動した後、「バケットの作成」を選択します。
様々設定が出てきますが、今回は画像を保存するだけなので、バケット名を入力し、他はデフォルトのまま「バケットの作成」を押下します。
バケットが作成されたことを確認します。
これで、S3の設定は完了です!とても簡単ですね。
3. Lambda関数の作成
新しいLambda関数を作成
続いて、Lambdaコンソールにアクセスし、「関数の作成」をクリックします。
本記事のメインとなる部分です。
関数名を入力し、Python 3.12 をランタイムとして選択します。
言語は後からでも変更可能です。
4. コードの実装
関数の作成ができたら、コードを実装していきましょう。
今回は、boto3
ライブラリを使ってS3に画像をアップロードします。
アップロード元となる画像をLambdaに配置
本来、Lambda上にupload対象の画像を置くことはほぼなく、APIやS3と連携することが一般的かと思いますが、今回は(面倒くさいので) Lambda上に配置してしまいます。
先ほど作成した関数のページへ移動し、「コード」をクリックします。
画像の辺りを右クリックして、適当な画像をuploadします。
ファイル名は、「sample.png」としました。
Lambda関数コード
サンプル画像も用意できたので、コードを実装していきましょう。
右側のエディターに、コードを書いていきます。
import base64
import boto3
def lambda_handler(event, context):
# アップロード元のファイルパス
local_file_path = '/sample.png' # uploadした画像
# アップロード先のS3バケット名とファイル名
bucket_name = 'your-bucket-name' #作成したS3のバケット名
s3_file_key = 'uploaded-image.png'
# S3 クライアントを初期化
s3 = boto3.client('s3')
try:
# 画像をS3にアップロード
s3.upload_file(local_file_path, bucket_name, s3_file_key)
# 成功メッセージを返す
return {
'statusCode': 200,
'body': 'Image uploaded successfully to S3!'
}
except Exception as e:
# エラーが発生した場合の処理
print(e)
return {
'statusCode': 500,
'body': f'Failed to upload image: {str(e)}'
}
コードの解説
local_file_path
: Lambda関数内の画像のパスです。アップロードした画像のパスを指定して下さい。bucket_name
: アップロード先のS3バケット名です。アップロードする際にアクセス可能なバケットを指定してください。s3_file_key
: S3内での保存名です。ファイル名やパスを指定できます。s3.upload_file()
: ローカルファイルを直接S3にアップロードするboto3
のメソッドです。
ここまで終わったら「deploy」ボタンを押します。
5. IAMロールの設定
ここまで終わったら、後一息です!
LambdaからS3にアクセスするためには、Lambda 関数の実行ロールからS3バケットへのアクセスが許可されている必要があります。
まずは、設定タブからロールへと移動します。
「許可を追加」を選択し、「AmazonS3FullAccess」を選択し「許可を追加」をクリックします。
これで、Lambda からS3へのアクセスが許可された状態になりました!
6. 動作確認
テストイベントの設定
今回は、手動実行となるので、Lambdaコンソールからテストボタンを押下します。
まずは、テストイベントを作成します。
テストイベントは任意の名前を、テンプレートは「Hello World」を選択します。
テストイベントの作成が完了したら、「deploy」の下の「Test」ボタンをクリックし、先ほど作成したtestイベントをクリックします。
アウトプットに、status code「200」が表示されたら、完了です!
S3へと移動し、画像が格納されているか、確認してみて下さい。
無事格納されていれば、OKです!
7. まとめ
この記事では、AWS Lambdaを使って画像をS3にアップロードする方法を解説しました。
今回は手動実行で行ったので、トリガーの設定もぜひ試してみて下さい!
コメント