[Lambda/Node] AWS CLI を使って zip ファイルでデプロイする

Lambda に zipファイルでアップロードするには、コンソール画面から手動で行うこともできますが手間がかかります。AWS CLI を利用してアップロードする方法になります。

前提

・AWS CLI でアクセスできること
・Lambda関数を作成済みであること

ファイルの作成

フォルダを作成し、package.json を作成します。

mkdir add
cd add
npm init -y

package.json に下記の3行を追加します。
zip は lambda_function.zip にファイルをまとめます。
predeploy は zip を実行します。
deploy では AWS CLI を使って、Lambda へ zipファイルをアップロードします。Lambda関数のARN部分を書き換えます。AWS CLI で使う Profile が default でない場合は、profile も変更します。

"zip": "zip -r lambda_function.zip .",
"predeploy": "npm run zip",
"deploy": "aws lambda update-function-code --function-name arn:aws:lambda:ap-northeast-1:54XXXXXXXX43:function:add --zip-file fileb://lambda_function.zip --profile default"

追加した package.json です。

{
  "name": "add",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "zip": "zip -r lambda_function.zip .",
    "predeploy": "npm run zip",
    "deploy": "aws lambda update-function-code --function-name arn:aws:lambda:ap-northeast-1:54XXXXXXXX43:function:add --zip-file fileb://lambda_function.zip --profile default"
 },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

index.js も作成します。Lambda関数を作成したときのコードをそのまま利用します。

export const handler = async(event) => {
    // TODO implement
    const response = {
        statusCode: 200,
        body: JSON.stringify('Hello from Lambda!'),
    };
    return response;
};

zip ファイルをアップロードする

npm run deploy で zipファイルをアップロードします。

npm run deploy
> npm run deploy

> add@1.0.0 predeploy
> npm run zip


> add@1.0.0 zip
> zip -r lambda_function.zip .

updating: index.js (deflated 23%)
updating: package.json (deflated 41%)

> add@1.0.0 deploy
> aws lambda update-function-code --function-name arn:aws:lambda:ap-northeast-1:54XXXXXXXX43:function:add --zip-file fileb://lambda_function.zip --profile default

{
    "FunctionName": "add",
    "FunctionArn": "arn:aws:lambda:ap-northeast-1:54XXXXXXXX43:function:add",
    "Runtime": "nodejs18.x",
    "Role": "arn:aws:iam::54XXXXXXXX43:role/service-role/add-role-d2bwm84z",
    "Handler": "index.handler",
    "CodeSize": 2810,
    "Description": "",
    "Timeout": 3,
    "MemorySize": 128,
    "LastModified": "2023-05-07T15:52:21.000+0000",
    "CodeSha256": "eaxPYNSgj3QXXXXXXXXXXXXX4TwYgOgBr+GlwORUk04=",
    "Version": "$LATEST",
    "TracingConfig": {
        "Mode": "PassThrough"
    },
    "RevisionId": "d1cXXXX9-aXX1-4XXc-aXX7-85XXXXXXXXbd",
    "State": "Active",
    "LastUpdateStatus": "InProgress",
    "LastUpdateStatusReason": "The function is being created.",
    "LastUpdateStatusReasonCode": "Creating",
    "PackageType": "Zip",
    "Architectures": [
        "x86_64"
    ],
    "EphemeralStorage": {
        "Size": 512
    },
    "SnapStart": {
        "ApplyOn": "None",
        "OptimizationStatus": "Off"
    },
    "RuntimeVersionConfig": {
        "RuntimeVersionArn": "arn:aws:lambda:ap-northeast-1::runtime:a19cXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX7f8c"
    }
}

AWSAWS,Lambda,Node.js

Posted by kidatti