AWS CLIで Lambdaを操作してみます。
使用バージョンはこれ。
ec2-user@ip-abc-abc-abc-abc$ aws --version aws-cli/2.2.23 Python/3.8.8 Linux/4.14.193-113.317.amzn1.x86_64 exe/x86_64.amzn.2018 prompt/off ec2-user@ip-abc-abc-abc-abc$
aws cliの操作は、EC2上でも、ローカルPCでも可能です。
Contents
Lambda操作
aws lambda create-function 関数作成
コマンド aws lambda create-function
–function-name 関数名
–runtime nodejs14.x
–handler index.hander
–zip-file fileb://ZIPファイル
–role ロールARN
まず関数名のディレクトリを作成し、ディレクトリ内にindex.jsファイルを作成します。
ec2-user@ip-abc-abc-abc-abc$ mkdir test ec2-user@ip-abc-abc-abc-abc$ touch test/index.js
index.jsは、テキストエディタで以下のような内容に編集します。
(マネジメントコンソールでLambda作成すると自動的に生成される内容と同じです)
ec2-user@ip-abc-abc-abc-abc$ cat -n test/index.js 1 exports.handler = async (event) => { 2 // TODO implement 3 const response = { 4 statusCode: 200, 5 body: JSON.stringify('Hello from Lambda!'), 6 }; 7 return response; 8 }; ec2-user@ip-abc-abc-abc-abc$
testディレクトリにcdしてから、全ファイルをzip圧縮します。
ec2-user@ip-abc-abc-abc-abc$ cd test ec2-user@ip-abc-abc-abc-abc$ zip -r test.zip * adding: index.js (deflated 22%) ec2-user@ip-abc-abc-abc-abc$ ls index.js test.zip ec2-user@ip-abc-abc-abc-abc$
ec2-user@ip-abc-abc-abc-abc$ aws lambda create-function \ > --function-name test \ > --runtime nodejs14.x \ > --handler index.hander \ > --zip-file fileb://test.zip \ > --role arn:aws:iam::xxxxxxxxxxxx:role/test-role
上記を実行すると以下のように出力されます。
{ "FunctionName": "test", "FunctionArn": "arn:aws:lambda:ap-northeast-1:xxxxxxxxxxxx:function:test", "Runtime": "nodejs14.x", "Role": "arn:aws:iam::xxxxxxxxxxxx:role/test-role", "Handler": "index.hander", "CodeSize": 314, "Description": "", "Timeout": 3, "MemorySize": 128, "LastModified": "2022-01-02T09:48:43.896+0000", "CodeSha256": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "Version": "$LATEST", "TracingConfig": { "Mode": "PassThrough" }, "RevisionId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "State": "Pending", "StateReason": "The function is being created.", "StateReasonCode": "Creating", "PackageType": "Zip" } ec2-user@ip-abc-abc-abc-abc$
aws lambda list-functions 関数の一覧表示
コマンド aws lambda list-functions
list-functionsで、全関数を表示できます。
ec2-user@ip-abc-abc-abc-abc$ aws lambda list-functions
出力結果
{ "Functions": [ { "FunctionName": "test", "FunctionArn": "arn:aws:lambda:ap-northeast-1:xxxxxxxxxxxx:function:test", "Runtime": "nodejs14.x", "Role": "arn:aws:iam::xxxxxxxxxxxx:role/test-role", "Handler": "index.hander", "CodeSize": 314, "Description": "", "Timeout": 3, "MemorySize": 128, "LastModified": "2022-01-02T09:48:43.896+0000", "CodeSha256": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "Version": "$LATEST", "TracingConfig": { "Mode": "PassThrough" }, "RevisionId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "PackageType": "Zip" } ] } ec2-user@ip-abc-abc-abc-abc$
aws lambda get-function 関数取得
コマンド aws lambda get-function –function-name 関数名
デプロイ後のLambda関数を取得するには、
aws lambda get-function –function-name 関数名| jq -r ‘.Code.Location’
で取得したURLを指定してcurlでzipファイルを取得します。
zipファイルはディレクトリ付きではないので、関数名のディレクトリを作成して、cdしてから関数取得を実行します。
ec2-user@ip-abc-abc-abc-abc$ mkdir test;cd test ec2-user@ip-abc-abc-abc-abc$ curl -o lambda.zip `aws lambda get-function --function-name test | jq -r '.Code.Locatio % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 314 100 314 0 0 4025 0 --:--:-- --:--:-- --:--:-- 4025 ec2-user@ip-abc-abc-abc-abc$ ls lambda.zip ec2-user@ip-abc-abc-abc-abc$
ダウンロードしたlambda.zipを解凍して、中身を見てみましょう。
ec2-user@ip-abc-abc-abc-abc$ unzip lambda.zip Archive: lambda.zip inflating: index.js ec2-user@ip-abc-abc-abc-abc$ cat -n index.js 1 exports.handler = async (event) => { 2 // TODO implement 3 const response = { 4 statusCode: 200, 5 body: JSON.stringify('Hello from Lambda!'), 6 }; 7 return response; 8 }; ec2-user@ip-abc-abc-abc-abc$
aws lambda update-function-code 関数更新(デプロイ)
コマンド aws lambda update-function-code –function-name 関数名 –zip-file fileb://ZIPファイル
update-function-codeでアップロード済の関数を更新できます。
ec2-user@ip-abc-abc-abc-abc$ cat -n index.js 1 exports.handler = async (event) => { 2 // TODO implement 3 const response = { 4 statusCode: 200, 5 body: JSON.stringify('Update Lambda!'), 6 }; 7 return response; 8 }; ec2-user@ip-abc-abc-abc-abc$
上記のように修正したindex.jsファイルをZIP圧縮します。
ec2-user@ip-abc-abc-abc-abc$ zip -r test.zip * adding: index.js (deflated 22%) ec2-user@ip-abc-abc-abc-abc$
update-function-codeで関数更新します。
ec2-user@ip-abc-abc-abc-abc$ aws lambda update-function-code --function-name test --zip-file fileb://test.zip
実行すると以下のような出力が得られます。
{ "FunctionName": "test", "FunctionArn": "arn:aws:lambda:ap-northeast-1:xxxxxxxxxxxx:function:test", "Runtime": "nodejs14.x", "Role": "arn:aws:iam::xxxxxxxxxxxx:role/test-role", "Handler": "index.hander", "CodeSize": 311, "Description": "", "Timeout": 3, "MemorySize": 128, "LastModified": "2022-01-02T13:10:46.000+0000", "CodeSha256": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "Version": "$LATEST", "TracingConfig": { "Mode": "PassThrough" }, "RevisionId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "State": "Active", "LastUpdateStatus": "InProgress", "LastUpdateStatusReason": "The function is being created.", "LastUpdateStatusReasonCode": "Creating" } ec2-user@ip-abc-abc-abc-abc$
aws lambda delete-function 関数削除
コマンド aws lambda delete-function –function-name 関数名
delete-functionは、関数を削除するコマンドです。
削除前
ec2-user@ip-abc-abc-abc-abc$ aws lambda list-functions | jq '.Functions[]|.FunctionName' "test" ec2-user@ip-abc-abc-abc-abc$
関数削除実行
ec2-user@ip-abc-abc-abc-abc$ aws lambda delete-function --function-name test ec2-user@ip-abc-abc-abc-abc$
削除後、関数一覧表示からtestが消えました。
ec2-user@ip-abc-abc-abc-abc$ aws lambda list-functions | jq '.Functions[]|.FunctionName' ec2-user@ip-abc-abc-abc-abc$
コメント