Lambda Functionのバージョン・エイリアス運用方針 #アドカレ2015
丹内です。
掲題の通り、モバイルのバックエンドとしても期待されているAWS Lambdaを継続的に使う際に欠かせない、リリース周りについて考えてみます。
概要の説明
先日の勉強会での発表でLambdaをProduction環境にデプロイした例をお話しました。
しかしながら実務では「デプロイしたらそれっきり」というものは少なく、ビジネスやスケールの変化に伴いコードにも変更が発生します。
日々発生する変更を安全にデプロイし、問題があったらすぐロールバックできるということが、継続的なソフトウェア開発には必要です。
Lambda Functionにはバージョニングとエイリアスという機能が、これを使うことで、Blue-Green Deploymentのようにデプロイやロールバックが可能になります。
以下の図をご覧ください。
この図は、バージョニングとエイリアスを使った場合のデプロイ例を示しています。
LambdaのSimple Iconの下の丸は、コミットグラフを表しています。その右側に緑色でバージョンを、左側に赤色でエイリアスを併記しています。また、下部には本番(Production)にデプロイされているコミットのFunction/Version/AliasそれぞれのARNを示しています。
この運用の場合、イベントソースのARNには一番下のエイリアス付きのものを指定します。そうすることで、エイリアスを張り替えるだけで自動的に実行されるコードも追従して変化します。
上の図で本番環境のFunctionのバージョンを進める場合、production
エイリアスをバージョン2
に張り替えます。
その後問題が発生してロールバックしたい場合は、production
エイリアスをバージョン1
に張り替えます。
実際の手順
この設定を実際に行ってみます。今回のイベントソースはS3 Object Created(Put)です。
また、Lambda Functionは作成済みであるとします。作成直後のLambda Functionにはエイリアスが無く、$LATEST
バージョンのみがあります。
バージョンをPublishする
まずはバージョンをPublishします。マネジメントコンソールでは以下の箇所をクリックします。
出てくるフォームにバージョンを識別できる文言を入力し、submitします。これでバージョンが発行されます。
なお、発行されるバージョン自体は、ユーザが指定することはできません。シーケンシャルな整数が割り当てられるようです。
Publishしたバージョンに対してエイリアスを作成する
次にエイリアスを作成し、先ほど発行したバージョンを設定します。
出てくるフォームに、以下のように入力してsubmitします。ここで選択したVersionに対してエイリアスが発行されます。今回は1
を選びます。
これでエイリアスが発行され、それにバージョン1
が設定されます。以下の画像のようになるはずです。
S3のObject Created(Put)をイベントソースに設定する
S3にオブジェクトをputしたらFunctionが起動するようにイベントソースを設定します。
ここらへんからLambdaのUIが分かりにくくなるのですが、以下のように選択していってAdd Event Source
をクリックします。
出てくるフォームに、適切に入力してsubmitします。ちなみにこの時prefixとsuffixを設定することができ、該当したObject CreatedのみでFunctionが起動するように設定できます。1つのバケットに複数のLambda Functionを設定して使い分ける(ファンアウト)パターンで便利です。
これで、S3に対してLambda Functionを設定できます。以下のように、S3のバケット画面で確認できます。(以下の画面では別なFunctionを設定済みであるため、Functionが2つになっています。)
修正したコードでFunctionを更新する
Nodejs sdkで言うところのupdateFunctionCode()です。
コードを更新すると$LATEST
バージョンのコードが更新されます。
なお関連して、バージョンには以下の制約があります。
- 直前のバージョンと全く同じコードではバージョンをPublishできない(zipファイルの場合も同様)
- PublishしたFunctionのコードは変更できない
次のバージョンをPublishする
バージョン1
からの変更が加えられた$LATEST
に対して、次のバージョンを発行します。
操作は前回と同様なので省略します。
操作後は画像のようになっています。この段階ではバージョン1
と2
が発行され、バージョン1
にproduction
エイリアスが設定されています。したがって、S3 Object Createdで実行されるのは現段階ではバージョン1
です。
次のバージョンにエイリアスを貼り替える
ここまでくると、エイリアスのConfiguration
タブで新たにバージョン2
を選択できるようになっているので、選択します。
これで完了です!
何かあったらエイリアスをバージョン1
に戻すことで、安全にロールバックできます。
まとめ
AWS Lambdaのエイリアスとバージョニング機能を使った、具体的なデプロイとロールバックについての運用方針をご紹介しました。
これを支援するライブラリは、AWS公式のJAWS Framework以外にもたくさんあるようです。
皆さんの環境に合わせた適切な運用の参考になれば幸いです。
明日は橋本さんのAndroidとMobule Hubを一通り簡単に使ったアプリを作ってみるです。お楽しみに!