課題
これまでLambdaを使用する案件に携わってきました。多くの場面で、ソースコードを作成して「デプロイ」をクリックすることで反映させ、テストを行い、問題がなければ対応完了とする流れを目にしてきました。(*)
確かにこの方法は間違ってはいませんが、最適とは言えません。
メリット
- 対応が迅速に行える
デメリット
- ソースコードの変更履歴が確認できない
- 簡単に修正できてしまう
- うっかり変更してしまった場合、気付きにくく、インシデントが発生しやすい
デプロイ方法の提案
Lambda Version
とLambda Alias
を使います。
上記(*)の流れを踏まえ、Lambda Version
を利用してコードにバージョン
を付けます。これにより、コードが変更されることなく安全に管理できます。もし変更があった場合は、新しいバージョン
を作成します。
次に、Lambda Alias
を作成して、バージョンと紐付けます。
1つのAlias
は複数のバージョンに紐付けることが可能で、weight
を設定することで各バージョン
へのアクセス割合を調整できます。これにより、Blue/Green
デプロイに対応することができます。
Lambda Verion まとめ
- Lambda 関数を作成・編集するときは、$LATEST を使用
- Lambda 関数の公開準備ができたら、バージョンを作成
- バージョンは不変(immutable)
- バージョン番号は連番で増加
- 各バージョンには、それぞれ専用の ARN(Amazon Resource Name)が割り当てられる
- バージョンには、コードと設定が含まれる(変更はできない - 不変)
- 各バージョンの Lambda 関数には、個別にアクセスできる
- 料金が増えない
Lambda Alias まとめ
- Alias は、Lambda 関数のバージョンへの「ポインタ」
- 「dev」「test」「prod」などの Alias を定義し、それぞれ異なる Lambda バージョンに紐付けることができる
- Alias は変更可能(mutable)
- Alias を使用することで、weight を設定して Canary デプロイが可能になる
- Alias により、イベントトリガーやデスティネーションの設定を安定させることができる
- Alias には、それぞれ専用の ARN(Amazon Resource Name)が割り当てられるる
- Alias は、他の Alias を参照することはできない
- 料金が増えない
実行
深く理解できるように以下の模擬案件をしましょう!
Lambda用意
AWS Consoleで Lambdaに入ってNodejsのLambdaファンクションを作成します。
ファンクション仕様をデフォルトに設定してください
ソースコード
以下のコードを貼り付けて、テストして問題なければデブロイします。
export const handler = async (event, context) => {
const version = 1; // 後で2に上げる
const response = {
statusCode: 200,
body: JSON.stringify('API service version'+ version),
};
return response;
};
留意
これまでして本番に反映できますため、恐らく皆さんは完了だと思いがちです。
Lambda Verion作成
画面上部のパンくずリストに /demoFuntionをクリックして上記のようにv2を作成します。const version = 2
に上のコードを修正ください
Lambda Alias 作成
検証
実際でLambdaは複数サービスと紐づけられます。本記事では簡単にするため、何も紐づかなくて、Lambda Function URL作成で公開URLをインタネットから叩きましょう。
Lambda Function URL作成
[Configuration] -> [ Function URL]-> [Create Function URL]
目的はテストですから、NONEを使います。
URL コピーしてブラザーでテストします
結果
上記には、V2とV1のweight
を50%に設定しましたが。ページ再生してV1 そしてV2 返しました。
課金されないように、リソースを削除してください
最後まで読んで頂いて有り難うございます。
役に立つを感じしたらハートやコメントやを残ってください
参考
https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html
https://docs.aws.amazon.com/lambda/latest/dg/configuration-versions.html