(AWS CLI) Lambdaを使う

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でも可能です。

スポンサーリンク

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$

コメント

タイトルとURLをコピーしました