エイリアスとバージョンで Lambda のランタイムの移行に備える方法
ランタイムが非推奨になると、AWS はご使用のランタイムにセキュリティパッチを適用しなくなります。これにより、そのランタイムを使用する関数はテクニカルサポートの対象ではなくなります。このような非推奨のランタイムは、「現状のまま」の保証なしで提供されるため、バグ、エラー、欠陥、またはその他の脆弱性が含まれている可能性があります。
Lambda のランタイムが廃止される時期に合わせてランタイムのアップデートを行う際、動作確認やロールバックしやすい方法としてエイリアスとバージョンを使用する方法を紹介します。
なお、今回は API Gateway から Lambda を呼び出す構成です。
エイリアスついて
Lambda 関数のエイリアスの作成 - AWS Lambda
Lambda のエイリアスとは、更新可能な関数のバージョンへのポインタです。
関数の特定バージョンを指す別名のような機能です。
例えば、バージョン 1, 2, 3 が存在する関数で test というエイリアスを作成し、バージョン 1 とエイリアス test を紐づけると、エイリアス test に対する呼び出しではバージョン 1 が呼び出されます。
バージョンについて
Lambda 関数のバージョンを管理する - AWS Lambda
関数のバージョンを公開すると、そのコード、ランタイム、アーキテクチャ、メモリ、レイヤー、その他のほとんどの設定はイミュータブルになります。
いゆわるバージョニング機能です。
関数のコードなどの設定を変更不可能な状態でバージョンを発行できます。
あるランタイムが廃止になったとしても関数の呼び出しは可能なため、新しいバージョンで問題が発生した場合には過去のバージョンに戻して呼び出すことも可能です。
Lambda ランタイム - AWS Lambda
ランタイムが廃止された後も、関数を無期限に呼び出すことができます。
やってみた
Node.js の Lambda 関数で以下のコードを定義して、呼び出された関数の Node.js のバージョンを確認します。
export const handler = async (event) => {
// TODO implement
const response = {
statusCode: 200,
body: JSON.stringify(process.version),
};
return response;
};
上記コードをデプロイ後、ランタイム設定でランタイムを Node.js 20.x に変更しました。
次にバージョンを発行して Node.js 20.x の設定で固定します。
$LATEST の関数のランタイムは Node.js 22.x です。
test というエイリアスを作成して、まずは $LATEST に紐づけました。
API Gateway の統合リクエストで Lambda 関数を指定する際、以下のようにエイリアスを含む ARN を指定しました。
- arn:aws:lambda:ap-northeast-1:012345678901:function:versioning:test
動作確認
$ curl https://8a19k2u56k.execute-api.ap-northeast-1.amazonaws.com/dev
"v22.14.0"
エイリアスが $LATEST を指しているため、Node.js 22.x のランタイムの情報が返されました。
続いて、エイリアスをバージョン 1 と紐づけます。
$ curl https://8a19k2u56k.execute-api.ap-northeast-1.amazonaws.com/dev
"v20.18.3"
エイリアスがバージョン 1 を指しているため、Node.js 20.x のランタイムの情報が返されました。
以上より、エイリアスとバージョンを使用することでランタイムのアップデートやロールバックができることを確認できました。
まとめ
今回はエイリアスとバージョンで Lambda のランタイムの移行に備える方法を紹介しました。
どなたかの参考になれば幸いです。
Discussion