AWSCLIでLambdaを触ってみた
おはようございます!今年新卒社員のキム・スンヨンです!
最近改めてAWS Lambdaを勉強しています。
今回は簡単にCLIを使ってLambda Functionを作ってみました。
- 簡単に順番です。
- CloudWatch logのPolicyを作ります。
- Lambda Roleを作って,作ったPolicyをattachします。
- Lambda Functionを作ります。
- Lambdaをinvokeします。
- 最後にL結果をCloudWatch logを通じて見ましょう!
IAM policy and Role
create policy.json
まず、localでpolicy.jsonファイルを作ってください。
{ "Version": "2012-10-17", "Statement":[ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource":"*" } ] }
aws iam create-policy --policy-name [name] --policy-document file://policy.json
同じです。localでrole.jsonファイルを作ってください。
create role.json
{ "Version": "2012-10-17", "Statement":[ { "Effect": "Allow", "Principal":{ "Service":"lambda.amazonaws.com" }, "Action":"sts:AssumeRole" } ] }
aws iam create-role --role-name [name] --assume-role-policy-document file://role.json
attach
aws iam attach-role-policy --role-name [role name] --policy-arn [policy arn]
では、もう準備は終わりです。本格的にLambda Functionを作って見ます!
Lambda Function
index.js
exports.handler = async function(event){ console.log("creator:"+event.creator); }
では、作ったら
zip -r [zip name].zip index.js
zipファイルを作ってください。
create Lambda Function
aws lambda create-function --region [ex) ap-northeast-1] --function-name [name] --zip-file fileb://[zip file name].zip --role [Lambda RoleのARN] --handler index.handler --runtime [ex) nodejs10.x] --memory-size [ex) 128]
Lambda Function list
aws lambda list-functions
listでLambda functionを確認したら次はinvokeです。
invoke
Lambda Functionに渡す情報を作成して見ます。
parm.json
{"creator":"cm-kimseungyeon"}
aws lambda invoke --invocation-type RequestResponse --function-name [Lambda Function name] --region [region ex)ap-northeast-1] --log-type Tail --payload fileb://parm.json response.json
- 簡単にOptionの説明
- invocation-type: 三つのTypeがありますが、defaultはRequestResponseです。Lambda Functionを同期的に同作します。基本的に設定した時間まで同作します。
- log-type: 二つのTypeがあります。Tail: responseにlogを含みます。
- payload: Lambdaのeventへ渡す情報と考えばいいです。
詳しいOptionの情報はLambda-invokeを参考してください。
log確認
では、最後にLambda Functionのlogを見ます。Consoleで確認しても大丈夫ですが、AWS CLIで確認して見ます〜
まず、log Groupを確認します。
aws logs describe-log-groups --log-group-name-prefix "/aws/lambda/"
/aws/lambda/[lambda Function名前]を確認したら
aws logs describe-log-stremas --log-group-name "/aws/lambda/[lambda Function名前]"
streamを確認!します。多分一つのlogがあると思います。こっそり確認します。
aws logs get-log-events --log-group-name "/aws/lambda/[lambda Function名前]" --log-stream-name [ex) "2020/09/29/[\$LATEST]~~"]
logを確認すれば下のように情報を確認することができます。
{ "events": [ { "timestamp": -, "message": "START RequestId: - Version: $LATEST\n", "ingestionTime": - }, { "timestamp": -, "message": "[console.log()の確認ex)creator:cm-kimseungyeon]", "ingestionTime": - }, { "timestamp": -, "message": "END RequestId: -", "ingestionTime": - }, { "timestamp": -, "message": "-", "ingestionTime": - } ], "nextForwardToken": "-", "nextBackwardToken": "-" }
以上でした!
参考資料
iam-create-policy
iam-create-role
Lambda-create-function
Lambda-list-functions
Lambda-invoke
Logs-describe-log-groups
Logs-describe-log-stremas
Logs-logs get-log-events