■ はじめに
https://dk521123.hatenablog.com/entry/2019/12/14/010524
の続き。長くなったので、分割。 今回は、ローカル上に疑似AWS Lambda 環境を作る。 また、S3, DynamoDBも扱ってみる。
目次
【1】ローカル上にAWS Lambda 環境を作る 1)ローカル上にLambda関数作成 2)Lambda関数をデプロイ 3)実行 補足:ラムダ関数削除について 【2】ローカル上のS3 環境を操作してみる 1)ローカル上のS3 環境をawscliで操作する 2)ローカル上のS3 環境をboto3 APIで操作する 【3】ローカル上にDynamoDB 環境を作る
【1】ローカル上にAWS Lambda 環境を作る
1)ローカル上にLambda関数作成 2)Lambda関数をデプロイ 3)実行
1)ローカル上にLambda関数作成
# デモ用の任意のディレクトリ作成 mkdir aws_lambda # デモ用の任意のディレクトリ移動 cd aws_lambda # デモ用Lambda関数作成 vi hello_world.py
hello_world.py
def lambda_handler(event, context): print(event) return 'Hello from Lambda'
2)Lambda関数をデプロイ
[2-1] デプロイ
# zipがない場合、インストール sudo apt install zip # ソースをZIPで固める zip hello_world.zip hello_world.py # デプロイ aws --endpoint-url=http://localhost:4574 --region ap-northeast-1 --profile dummy-user lambda create-function --function-name=hello_world --runtime=python3.6 --role=test --handler=hello_world.lambda_handler --zip-file fileb://hello_world.zip
[2-2] 確認
関数が作成されていることを確認するために ダッシュボードをリロードする ⇒ 「hello_world」 が出てくるはず
3)実行
# 実行 aws lambda --endpoint-url=http://localhost:4574 invoke --function-name hello_world --profile dummy-user --region ap-northeast-1 --payload '{"key1" : "value1" }' result.log # 確認 cat result.log Hello World from Lambda
補足:ラムダ関数削除について
ラムダ関数を一旦削除したい場合などは、「delete-function」を実行
ラムダ関数削除例
aws --endpoint-url=http://localhost:4574 --region ap-northeast-1 --profile dummy-user lambda delete-function --function-name=hello_world
【2】ローカル上のS3 環境を操作してみる
1)ローカル上のS3 環境をawscliで操作する
バケット作成
# S3バケット名「local-demo-bucket」を作る aws s3api create-bucket --bucket local-demo-bucket --endpoint-url http://localhost:4572 # Public にする aws s3api put-bucket-acl --bucket local-demo-bucket --acl public-read --endpoint-url=http://localhost:4572
ファイルのアップロード
aws s3 cp ~/demo s3://local-demo-bucket/sample --recursive --endpoint-url http://localhost:4572 # ファイル確認 curl -v http://localhost:4572/local-demo-bucket/sample/xxxxx.txt
ファイル一覧表示
aws s3api list-objects-v2 --bucket local-demo-bucket --prefix sample --endpoint-url http://localhost:4572
ファイルのダウンロード
aws s3 cp s3://local-demo-bucket ~/local-demo-bucket --recursive --endpoint-url http://localhost:4572
2)ローカル上のS3 環境をboto3 APIで操作する
* Pythonコードでファイル一覧表示を表示する
hello_s3.py
import boto3 s3_client = boto3.client('s3', endpoint_url='http://localhost:4572') response = s3_client.list_objects_v2( Bucket='local-demo-bucket', Prefix='sample/', Delimiter='/' ) if 'Contents' in response: contents = response['Contents'] for content in contents: if 'Key' in content: path = content['Key'] print(path) else: print('No Key') else: print('No Contents')
コマンド
sudo apt install python3-pip pip3 install boto3 python3 hello_s3.py
【出力結果例】
sample/sample0-1.txt sample/sample0-2.txt
【3】ローカル上にDynamoDB 環境を作る
pip install --upgrade awscli
テーブルを作成
# テーブル名「local-demo-table」を作成 aws dynamodb create-table --table-name local-demo-table --attribute-definitions AttributeName=Id,AttributeType=S --key-schema AttributeName=Id,KeyType=HASH --provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1 --endpoint-url http://localhost:4569
データを登録
aws dynamodb put-item --table-name local-demo-table --item '{"Id": {"S": "test"}, "Column1": {"S": "test1"}, "Column2": {"S": "test2"}, "Column3": {"S": "test3"}}' --endpoint-url http://localhost:4569
参考文献
Lambda
http://engmng.blog.fc2.com/blog-entry-53.html
https://dev.classmethod.jp/cloud/aws/localstack-lambda/
関連記事
LocalStack ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/12/14/010524
LocalStack ~ awscli-local ~
https://dk521123.hatenablog.com/entry/2020/12/16/211127
AWS Glue ~ ローカル環境を作成する ~
https://dk521123.hatenablog.com/entry/2019/11/10/205535
Amazon S3 ~ Python boto3でS3を操作する ~
https://dk521123.hatenablog.com/entry/2019/10/21/230004
boto3 API / list_objects_v2 の 使用上の注意 と その対策
https://dk521123.hatenablog.com/entry/2019/12/06/232617
Docker compose ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2022/04/28/000000
Docker compose ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2022/05/21/222910
Docker compose ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2020/04/11/000000
Docker compose ~ LocalStack/Glue4.0 ~
https://dk521123.hatenablog.com/entry/2023/03/25/021432