🐷

Lambda Node ランタイム v12 → v14 update 備忘録

2022/05/31に公開

はじめに

Lambda Node ランタイム v12が2022/04でサポートが終わるため、v14に更新しないといけないProjectが存在していました。
その際の手順として備忘録を残したいと思います。
ただ、本記事ではv14へ上げるというよりは、ランタイムのバージョンを上げる際にどういうことをやったのかを記載したいと思います。

環境

  • ローカル環境端末
    • macOS Big Sur
    • AWS SAM CLI
    • Docker
  • Lambda ソース環境
    • AWS SAM で構築を実施
    • ApiGateway & Lambda(TypeScript)を構築
    • TypeScriptのためwebpackで実行ソースを作成(トランスコンパイル)している
    • 利用しているnodeModules群はすべて最新のVersionに更新済み

手順

私の環境での対応としては以下の流れで実施しました。

  1. AWS SAM Template.yamlでNodeRuntimeのVersionを更新
  2. AWSアカウントにデプロイを実施
  3. AWSアカウントにデプロイした環境がLambdaFunctionを呼び出せるか確認
  4. Node.js v14の変更点を公式ドキュメントで確認
  5. 必要があればソースの修正を実施
  6. 単体テストを実施して正常に動作しているか確認

1. AWS SAM Template.yamlでNodeRuntimeのVersionを更新

私のTemplate.yamlではグローバル設定でVersionを設定しているため、その部分を修正することで
Template.yamlで管理しているLambda関数すべてのVersionを更新することが可能。
以下が修正した内容です。

Template.yaml
Globals:
  Function:
    Timeout: 30
-    Runtime: nodejs12.x
+    Runtime: nodejs14.x
  Api:
    OpenApiVersion: '3.0.2'

2. AWSアカウントにデプロイを実施

デプロイはAWS SAM CLIを利用している。
ちなみにAWS CLIのProfileにデプロイするAWSアカウントは設定済みです。
以下のコマンド実行でデプロイ実施。

$ sam deploy sam deploy --profile <自身が設定しているプロファイル名> --template-file <Template.yamlのパス>

デプロイ後、各Lambda FunctionをAWSコンソール画面で確認して以下のように指定したVersionに変更できていれば完了。
Lambda Rantime コンソール確認

3. AWSアカウントにデプロイした環境のLambdaFunctionを呼び出せるか確認

確認方法はなんでもいいと思います。
方法としては以下
・AWSのLambdaコンソール画面にあるテストで確認
・APIを呼び出して想定通りにレスポンスが帰ってくるか確認
  ※APIを呼び出せるツールなど確認
・実際にStaging環境のサービスを動かして確認
などなど

4. Node.js v14の変更点を公式ドキュメントで確認

以下Git Hubの該当Versionの更新内容を確認
https://github.com/nodejs/node/blob/master/doc/changelogs/CHANGELOG_V14.md#14.0.0
※今回はv12→v14ということで、v13の内容も確認しました。

5. 必要があればコードの修正を実施

4の手順で確認した変更点の内容で、私のProjectのLambdaFunctionには該当する内容はありませんでした。
そのため、修正作業はありませんでした。
もし、ここで修正内容箇所があれば修正します。

6. 単体テストを実施して正常に動作しているか確認

Staging環境のAWSに本Projectをデプロイして単体テストを実施しました。
私のLambdaFunctionはJest等でユニットテスト対応していなかった為、API確認ツール等で単体テストを実施しました。
ここで、正常に動かない部分があれば都度修正するフローになります。
私のProjectでは問題なく動作していることを確認できたので、修正作業はありませんでした。
問題ないことを確認できれば本番環境へデプロイを実施します。

最後に

AWS SAM Template.yamlで構築を実装していた為、Versionを上げる作業自体は簡単でした。
もし、手作業でAWSコンソール上で管理している場合、Lambda Functionが多いと一つ一つ設定を変更しないといけないので、、、Infrastructure as Codeに感謝です。
また、今回は手作業で確認するところ(単体テスト)があった為、確認作業で時間が取られました。
Jest等でユニットテストを実装していれば短縮できたのかなと思います。
ただ、Jest等を実装している場合では開発環境(ローカル端末)のNode.jsバージョンによってJest等の確認も必要になると思います。
とは言いつつJest等でのユニットテストは作業効率化の面でも重要なので今後実装する予定です。

もっと良い方法や他に確認するところが有るよ等あればコメントしていただけると幸いです。

Discussion