AWS Lambda のランタイムを変更する方法

記事タイトルとURLをコピーする

どうも、 swx-ochiai です。

はじめに

AWS Lambdaを利用していると、Lambdaのランタイムを更新するよう通知が来ることがあります。

通知例

We are contacting you as we have identified that your AWS Account currently has one or more Lambda functions using Node.js 8.10, which will reach its EOL at the end of 2019.

Google翻訳: お客様の AWS アカウントには現在、Node.js 8.10 を使用する 1 つ以上の Lambda 関数があり、2019 年末に EOL になることが判明したため、ご連絡いたします。

その際の対応方法をまとめましたので、ご参考ください。

対応方法

AWS Lambda のマネジメントコンソール または

AWS Lambda の UpdateFunctionConfiguration API を使用して変更します。

AWSマネジメントコンソール

AWSマネジメントコンソールでの変更手順です。

AWS 公式ドキュメントより

ランタイムまたはランタイムバージョンを変更するには

1.Lambda コンソールの [Functions] (関数) ページを開きます。

2.更新する関数を選択し、[Code] (コード) タブを選択します。

3.コードエディタの下にある [Runtime settings] (ランタイム設定) セクションまで下にスクロールします。

4.[Edit] を選択します。

 a. [Runtime] (ランタイム) で、ランタイムのバージョンを選択します。

 b. [Handler] (ハンドラ) で、関数のファイル名とハンドラを指定します。

 c. アーキテクチャで、関数に使用する命令セットアーキテクチャを選択します。

5.[Save] を選択します。

上記の手順3からの流れを実際の画面と合わせて以下に記載します。

サンプルの関数として、ランタイムが Node.js 12.x のものを用意しています。

この関数のランタイムを、Node.js 16.x に変更します。

「ランタイム設定」右上の「編集」をクリックします。

ランタイムの一覧から「Node.js 16.x」を選択します。

その他の設定は変更せず、「保存」をクリックします。

画面上部に緑のバーで「関数 {関数名} が正常に更新されました。」と表示されれば、完了です。 ランタイムが Node.js 16.x に変更されていることが確認できます。

以上が、AWSマネジメントコンソールでの変更手順です。

AWS CLI

AWS CLI での変更手順です。

AWS CLI での変更には、update-function-configuration コマンドを使用します。

ランタイムを変更する場合は、--runtime オプションを使用します。

再度サンプル関数のランタイムを Node.js 12.x から Node.js 16.x に変更してみます。

aws lambda update-function-configuration \
--function-name sample \
--runtime nodejs16.x

コマンドの実行に成功すると、レスポンス結果からランタイムが Node.js 16.x に変更されていることが確認できます。

以上が AWS CLI での変更手順です。

CloudFormation

CloudFormation での変更手順です。

CloudFormation の変更には、AWS::Lambda::FunctionRuntime を変更します。

まずは変更前の Node.js 12.x のサンプル関数を、以下のテンプレートで作成します。

AWSTemplateFormatVersion: "2010-09-09"
Resources:
  LambdaFunction:
    Type: "AWS::Lambda::Function"
    Properties:
      FunctionName: "sample"
      Handler: "index.handler"
      Code:
        ZipFile: |
          exports.handler = async (event) => {
              // TODO implement
              const response = {
                  statusCode: 200,
                  body: JSON.stringify('Hello from Lambda!'),
              };
              return response;
          };
      Role: !Sub "arn:aws:iam::${AWS::AccountId}:role/LambdaBasicExecutionRole"
      Runtime: "nodejs12.x"

CloudFormation での関数作成後、19行目 のRuntime を nodejs16.x に変更し、スタックを更新します。

更新 をクリックします。

既存のテンプレートを置き換えて更新します。

スタックのステータスが、UPDATE_COMPLETE になれば完了です。ランタイムが変更されていることを Lambda コンソールなどで確認してください。

以上が CloudFormation での変更手順です。

AWS SDK for Python (Boto3)

AWS SDK for Python (Boto3) での変更手順です。

SDKでランタイムの変更をすることは少ないかと思いますが、参考で紹介です。

AWS SDK for Python (Boto3)での変更は、update_function_configuration を使用します。

以下のコードで、サンプル関数のランタイムを更新します。

import json
import boto3

client = boto3.client('lambda')

def lambda_handler(event, context):
   
    response = client.update_function_configuration(
        FunctionName='sample',
        Runtime='nodejs16.x'
    )
    
    print(json.dumps(response))

    return;

以上が AWS SDK for Python (Boto3) での変更手順です。

注意点

AWS Lambda のランタイムを変更する場合には、変更後のランタイムとソースコードの互換性があるか、開発環境などで十分検証してから変更することをお勧めします。