AWSは最近、Lambdaが関数にランタイムの更新を適用する際に、より多くの可視性と制御を提供する ランタイム管理コントロールを導入した。
ランタイム管理コントロールによって、開発者は3つの新しい機能を利用できるようになったのである。
-
ランタイム関数がどのパッチバージョンを使用しているか、いつランタイム更新が適用されるかを可視化する
-
ランタイム更新と関数のデプロイメントを同期させる
-
関数を以前のランタイムバージョンにロールバックする
これらの機能は、AWS CLIとLambda AWS Management Consoleを使用して、Lambdaランタイムの更新モードの1つを選択することで利用可能だ。さらに、開発者はInfrastructure as Code(IaC)ルートを選択し、AWS CloudFormationやAWS Serverless Application Model(AWS SAM)などのツールを使用可能だ。
AWSのプリンシパル・プロダクトマネージャであるJonathan Tuliani氏は、AWSのブログ記事でランタイムバージョンの更新モードについて説明している。
ランタイムの更新モードは、自動、関数更新、手動の3つから1つを指定できる。ランタイムの更新モードは、Lambdaが関数のバージョンを新しいランタイムバージョンに更新するタイミングを制御する。
出典: https://aws.amazon.com/blogs/compute/introducing-aws-lambda-runtime-management-controls/
auto:モードはデフォルトで、Lambdaが更新を担当し、関数は2つのフェーズでランタイム更新を受け取る。まず、Lambdaは新しく作成または更新された関数に新しいランタイムバージョンを適用し、その後、残っている関数にも適用する。
function update:開発者が関数のコードや設定を変更するたびに、Lambdaは関数を最新のランタイムバージョンに更新する。これは自動モードの最初のフェーズと同様だが、他の関数は変更されないままだ。
manual:開発者が関数のランタイムバージョンを完全に制御できるようにする。以前のバージョンにロールバックすることができるが,AWSはmanualモードをコードの非互換性を短期間で修正するときにだけ使用することを強く推奨している。
AWS HeroであるEric Hammondは、AWS CommunityのSocial.NETに投稿した。
私はAWS Lambdaのランタイムスタックに関しては、デフォルトの「Automatic」更新しか使わないと思う.
なぜなら、
- 関数内のコードを更新することはほとんどない
- 手作業を増やしたくない
- 自動更新で問題が発生したことは今のところ一度もない。AWS Lambdaを使ったサービスを8年以上運用していて、一度もだ.
さらに、AWS Serverless HeroであるBen Kehoe氏はこうツイートしている。
サーバーレスで一番難しいのは、コントロールを放棄することだ。誰もが、依存関係やランタイムのバージョンを更新するのは"良いこと"だと言う。それを強制されるのは、"良いこと"である。
さらに、こうもツイートしている。
この新しいLambdaのランタイムバージョンコントロールの使用法は、いざというときのために知っておくべきだが、安易に扱ってはならない。1、2スプリント後に自動的にオフにするStep関数を使用してほしい。
ランタイム管理コントロールの詳細については、ドキュメントページに掲載されている。