AWS Lambda
- AWS Lambda
cloud9に開発環境を作成する
準備
- cloud9は構築済み。
- AWS SETTINGS -> AWS -> AWS Resources -> AWS ToolkitをOffにする。
AWS Lambdaからソースを取得する
- 右のタブ -> AWS Resources -> Remote Functions -> 取得したいAWS Lambda関数を右クリック -> Import
- Importをクリック
CodeCommitにソースを登録する
cd ${プロジェクトディレクトリ}
git init
git branch -m main
git config --global init.defaultBranch main
git add .
git commit -m "init commit"
git remote add origin https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/${プロジェクト名}
git push
Run Local
Local Functions -> 実行したいLambda関数を選択 -> 上の実行マークの隣のプルダウンをクリック -> Run Localをクリック
Deploy
Local Functions -> デプロイしたいLambda関数を右クリック -> Deploy
CodeCommitのプルリクエストにコメントを記載する
import boto3
from datetime import datetime as dt
def lambda_handler(event, context):
content = [dt.now().strftime('%Y/%m/%d %H:%M:%S'), 'hoge','piyo']
boto3.client('codecommit').post_comment_for_pull_request(
pullRequestId='13',
repositoryName='CodeBuild_Environment',
beforeCommitId='385416ed5c736e73920993f1d0eb6eb7ef2d2cb0',
afterCommitId='8768709c4620f7c858515a3aeb31bdf65a3f6035',
content=' \n'.join(content)
)
serverless framework
AWS Lambdaをリリースするフレームワーク
コマンド
初期化
serverless create --template aws-python3 --name ${プロジェクト名} --path ${ディレクトリ名}
デプロイ
sls deploy -v --stage ${ステージング名}
実行
serverless invoke --function ${serverless.ymlのfunctions下の関数名} -p ${入力ファイル名}
削除
sls remove -v
設定
profileを設定する場合は、credentialsに記載する。
参考
参考
ホスト側のaws cli設定をコンテナに持ち込んで、boto3する
~/.awsをコンテナに持ち込めばOK。
.gitignoreに.awsを記載すること。
# docker-compose.ymlと同じディレクトリで実行する。
ln -s ~/.aws .aws
パスは実行ユーザに依存。
docker-compose.yml
services:
python:
volumes:
- .aws:/root/.aws
Function URLs
new
Lambda
import json
KEY = 'name'
def lambda_handler(event, context):
param = event.get('queryStringParameters')
if KEY in param:
message = 'Hello {}!'.format(param[KEY])
else:
message = 'Who are you?'
return {
'statusCode': 200,
'body': message
}
# Deploy Test Comment
.env
API_URL=https://${採番された値}.lambda-url.ap-northeast-1.on.aws
sh
#!/bin/bash
source .env
curl -X GET $API_URL?name=World
実行
$ bash call_lambda_function.sh
Hello World!
old
ソース
import json
def lambda_handler(event, context):
request = event['body']
loaded = json.loads(request)
keys = list(loaded.keys())
values = list(loaded.values())
returnBody = { keys[0] : values[0] }
return {
'statusCode': 200,
'body': json.dumps(returnBody)
}
テスト用イベントJSON
{
"body": "{\"example\":\"value\"}"
}
実行
# URLはLambdaのページから確認する。
export FUNCTION_URL=
export FUNCTION_ARGS='{"example":"test"}'
curl -X GET -H "Content-Type: application/json" -d ${FUNCTION_ARGS} ${FUNCTION_URL}
{"example": "test"}
呼び出し元の入力パターン
eventで取得できる値。
EventBridge
{
"version": "0",
"id": "${id}",
"detail-type": "Scheduled Event",
"source": "aws.events",
"account": "${アカウントID}",
"time": "2022-09-19T14:16:44Z",
"region": "ap-northeast-1",
"resources": [
"arn:aws:events:${region}:${account}:rule/${EventBridge_Name}"
],
"detail": {}
}
任意の値を設定する
追加設定 -> 定数(JSONテキスト)でjsonを設定しておくと、eventが上書きされる。
CORSエラーの対応をする
戻り値のヘッダにAccess-Control-Allow-Headers
, Access-Control-Allow-Origin
をつける。
return {
'statusCode': 200,
'headers': {
'Access-Control-Allow-Headers': 'Content-Type',
'Access-Control-Allow-Origin': 'http://ittimfn-public-lambda.s3-website-ap-northeast-1.amazonaws.com',
'Access-Control-Allow-Methods': 'GET'
},
'body': message
}