66
41

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

皆さんはLambda を最適にデプロイしているか?

Posted at

課題

これまでLambdaを使用する案件に携わってきました。多くの場面で、ソースコードを作成して「デプロイ」をクリックすることで反映させ、テストを行い、問題がなければ対応完了とする流れを目にしてきました。(*)

image.png

確かにこの方法は間違ってはいませんが、最適とは言えません。

メリット
  • 対応が迅速に行える
デメリット
  • ソースコードの変更履歴が確認できない
  • 簡単に修正できてしまう
  • うっかり変更してしまった場合、気付きにくく、インシデントが発生しやすい

デプロイ方法の提案

Lambda VersionLambda 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;
};

image.png

留意
これまでして本番に反映できますため、恐らく皆さんは完了だと思いがちです。

Lambda Verion作成

image.png
こんな感じです
image.png

画面上部のパンくずリストに /demoFuntionをクリックして上記のようにv2を作成します。const version = 2に上のコードを修正ください

Lambda Alias 作成

image.png

image.png
後でテストするためweightを半分に設定します。

検証

実際でLambdaは複数サービスと紐づけられます。本記事では簡単にするため、何も紐づかなくて、Lambda Function URL作成で公開URLをインタネットから叩きましょう。

Lambda Function URL作成

Aliasに入ります
image.png

[Configuration] -> [ Function URL]-> [Create Function URL]
image.png

目的はテストですから、NONEを使います。
image.png
URL コピーしてブラザーでテストします
image.png

結果

上記には、V2とV1のweightを50%に設定しましたが。ページ再生してV1 そしてV2 返しました。
Screen Recording 2025-02-16 at 16.53.08.gif

課金されないように、リソースを削除してください

最後まで読んで頂いて有り難うございます。:bow:
役に立つを感じしたらハートやコメントやを残ってください:bow:

参考

https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html
https://docs.aws.amazon.com/lambda/latest/dg/configuration-versions.html

66
41
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
66
41

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?