Lambda ランタイムで「関数の更新をブロックする」フェーズの挙動を確認してみた
アノテーション・テクニカルサポートチームの hato です。
非推奨になった Lambda ランタイムは、フェーズによってできることが変わります。
最終フェーズである「関数の更新をブロックする(Block function update)」では具体的にどのような操作ができないか、確認してみました。
まとめ
- ソースコードの更新はできない
- 非推奨のランタイムを指定し、関数の設定変更はできない
後者について、具体的には、既に「関数の更新をブロックする」フェーズになっている Node.js 12 ランタイムの Lambda 関数に対して、次のようなコマンド(メモリ設定変更)は実行できますが、
$ aws lambda update-function-configuration \
--function-name hato-eol-nodejs12 \
--memory-size 128 \
次のようにコマンド内でランタイムを明示的に指定すると、エラーになります。
$ aws lambda update-function-configuration \
--function-name hato-eol-nodejs12 \
--memory-size 128 \
--runtime nodejs12.x
ドキュメントを調べる
AWS 公式ドキュメントにはフェーズについて、次の通り記載されています。
ランタイムが非奨励になった後はいつでも、関数を更新すると、サポートされている新しいランタイムバージョンを使用できます。本番環境に変更を適用する前に、新しいランタイムで関数をテストすることをお勧めします。関数の更新がブロックされると、非推奨になったランタイムに戻すことはできません。ロールバックによる安全なデプロイを有効にするには、関数のバージョンとエイリアスを使用することをお勧めします。
次のタイムラインは、ランタイムが非推奨になったときにどうなるかを示しています。
ランタイムライフサイクルフェーズ メトリック 説明 非推奨通知期間 非推奨になる少なくとも 180 日前 AWS は、このランタイムを $LATEST バージョンで使用している関数を持つアカウントに対し、E メールと AWS Health Dashboard を通じて通知を送信します。影響を受ける関数は、AWS Health Dashboard のスケジュールされた変更タブと AWS Trusted Advisor の非推奨のランタイムチェックにも表示されます。 廃止 廃止日 AWS では、セキュリティ更新プログラムやその他の更新プログラムを適用しなくなる場合があります。関数はテクニカルサポートの対象ではなくなりました。Lambda コンソールで非推奨になったランタイムを使用して新しい関数を作成または更新できなくなりました。AWS CLI、AWS SAM、または AWS CloudFormation を使用して関数を引き続き作成および更新できます。 関数の作成をブロックする 非推奨になってから少なくとも 30 日後 Lambda は新しい関数の作成をブロックし始めます。AWS CLI、AWS SAM、または AWS CloudFormation を使用して、既存の関数のコードと設定は引き続き更新できます。 関数の更新をブロックする 非推奨になってから少なくとも 60 日後 Lambda は既存の関数のコードと構成の更新をブロックし始めます。関数設定は、サポートされているランタイムにアップグレードすることもできます。ただし、非推奨になったランタイムへのロールバックはブロックされる可能性があります。
ドキュメントの該当部分だけを見ると「コード変更と設定変更がブロックされる。ただし、サポートされているランタイムへの更新はできる」になりそうです。
実際に確認してみた
2023 年 4 月 30 日に「関数の更新をブロックする」フェーズになった Node.js 12 ランタイムの Lambda 関数に対して検証しました。
呼び出しはできる?
AWS マネジメントコンソールおよび AWS CLI から関数の呼び出しができるか確認します。
結果として、問題なく呼び出しに成功しました。また、AWS マネジメントコンソールから「テストイベント」の新規保存もできました。

$ aws lambda invoke \
--function-name hato-eol-nodejs12 \
--cli-binary-format raw-in-base64-out \
--payload file://test-event.json \
response.json
{
"StatusCode": 200,
"ExecutedVersion": "$LATEST"
}
コードの更新はできる?
AWS マネジメントコンソールおよび AWS CLI からコードの更新ができるか確認します。
結果として、「サポートされなくなりました」という趣旨のエラーで失敗しました。

$ aws lambda update-function-code \
--function-name hato-eol-nodejs12 \
--zip-file fileb://Code.zip
An error occurred (InvalidParameterValueException) when calling the UpdateFunctionCode operation: The runtime parameter of nodejs12.x is no longer supported for creating or updating AWS Lambda functions. We recommend you use a supported runtime while creating or updating functions.
設定は更新はできる?
AWS マネジメントコンソールおよび AWS CLI から、一般設定やアクセス権限などの設定ができるか確認します。
結果として、AWS マネジメントコンソールでは成功しましたが、AWS CLI の場合はランタイムを明示的に指定するとエラーになりました。

# ランタイムを指定しない
$ aws lambda update-function-configuration \
--function-name hato-eol-nodejs12 \
--description "`date`" \
{
"FunctionName": "hato-eol-nodejs12",
"FunctionArn": "arn:aws:lambda:ap-northeast-1:123456789012:function:hato-eol-nodejs12",
"Runtime": "nodejs12.x",
...
# ランタイムを指定した
$ aws lambda update-function-configuration \
--function-name hato-eol-nodejs12 \
--description "`date`" \
--runtime nodejs12.x
An error occurred (InvalidParameterValueException) when calling the UpdateFunctionConfiguration operation: The runtime parameter of nodejs12.x is no longer supported for creating or updating AWS Lambda functions. We recommend you use a supported runtime while creating or updating functions.
試した内容は次の通りで、変更できない設定はなさそうです。
- 「説明」の変更
- メモリサイズの変更
- タイムアウトの更新
- 環境変数の変更
- 関数 URL の作成・削除
- VPC への関連付け・解除
- リソースベースポリシーの追加・削除
- Lambda レイヤーの追加・削除
- バージョンの発行・削除
ただ、上述のとおり、AWS CLI の場合は--runtimeを指定するとエラーになるようです。
ランタイムは更新できる?
AWS CLI からランタイムのバージョンが更新できるか確認します。
結果として、問題なく更新できました。ただし、切り戻しはエラーになりました。
$ aws lambda update-function-configuration \
--function-name hato-eol-nodejs12 \
--runtime nodejs14.x
{
"FunctionName": "hato-eol-nodejs12",
"FunctionArn": "arn:aws:lambda:ap-northeast-1:123456789012:function:hato-eol-nodejs12",
"Runtime": "nodejs14.x",
...
$ aws lambda update-function-configuration \
--function-name hato-eol-nodejs12 \
--runtime nodejs12.x
An error occurred (InvalidParameterValueException) when calling the UpdateFunctionConfiguration operation: The runtime parameter of nodejs12.x is no longer supported for creating or updating AWS Lambda functions. We recommend you use a supported runtime while creating or updating functions.
最後に
今回の検証では「関数の更新をブロックする」フェーズでも、呼び出しや、条件付きで設定変更ができることを確認しました。
非推奨化になったランタイムは「現状のまま」の保証なしで提供され、脆弱性やバグが含まれている場合があります。
テクニカルサポートも提供されませんので、計画的なアップデートを推奨します。
参考資料
ランタイムが非推奨になると、AWS はご使用のランタイムにセキュリティパッチを適用しなくなります。これにより、そのランタイムを使用する関数はテクニカルサポートの対象ではなくなります。関数を無期限に呼び出すことはできますが、AWS ではサポートされているランタイムへの移行を強くお勧めします。非推奨のランタイムは、「現状のまま」の保証なしで提供されるため、バグ、エラー、欠陥、またはその他の脆弱性が含まれている可能性があります。非推奨のランタイムを使用する関数は、パフォーマンスが低下したり、証明書の有効期限切れなどの問題が発生したりして、正しく動作しなくなる可能性があります。
アノテーション株式会社について
アノテーション株式会社はクラスメソッドグループのオペレーション専門特化企業です。サポート・運用・開発保守・情シス・バックオフィスの専門チームが、最新 IT テクノロジー、高い技術力、蓄積されたノウハウをフル活用し、お客様の課題解決を行っています。当社は様々な職種でメンバーを募集しています。「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、アノテーション株式会社 採用サイト をぜひご覧ください。








