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$


コメント