Lambdaのバージョンとエイリアス

6月 5, 2022

どもども、SRE NEXT両日しっかり参加てお疲れ気味の僕です。参加ウェビナーについてまたレポートを書きます。


さて、本日はAWS Lambdaの機能である、バージョンとエイリアスについて実際に操作しつつ理解を深めていきたいと思います。


Lambdaを本番、開発など環境で分ける時などに有用ですので、是非ともチェックしてください!

Lambdaをバージョン管理する

まずはLambdaのバージョンという機能についてみていきたいと思います。


Lambda関数はその設定も含めてバージョンとして記録しておくことができます。デプロイされた状態のLambdaにはlatestというバージョンが付与されており、そこからバージョンを発行することになります。


早速バージョンを発行してみましょう。まずはサンプルとなる関数を用意します。言語はとくになんでもいいのですが、今回はPythonを使用することにしました。

作成されましたら、AWS CLIを利用して実行してみましょう。

$ aws lambda invoke --function-name version-test response.json
{
    "StatusCode": 200,
    "ExecutedVersion": "$LATEST"
}

レスポンスが返ってきましたね!実行バージョンがLatestであることがわかります。


それではバージョンを発行していきましょう。バージョンタブから発行できます。

バージョンの説明を入力し発行してください。

発行されたバージョンの操作ページに移動しましたね。とはいうものの、バージョンとはすなわちスナップショットですのでコードの変更を行うことはできません。変更するバージョンは常にlatestということになります。


それでは新しく発行したバージョンのLambdaを実行してみます。関数名の後に発行されたバージョンを指定してください。僕はバージョン2が発行されているので2を指定しています。

$ aws lambda invoke --function-name version-test:2 response.json
{
    "StatusCode": 200,
    "ExecutedVersion": "2"
}

実行バージョンが変わったことが分かりますね!例えばlatestのLambdaに何かしらの変更がデプロイされたとしても、バージョンを発行していれば発行時の関数を呼び出すことができるということが分かります。


バージョニング、バックアップとして使用するのであればこのバージョンで充分そうです。


次はもう一歩踏み込んで、エイリアスを使用したLambda関数を環境分けしてみたいと思います。

エイリアスを使用する

エイリアスはLambdaの機能で、特定のバージョンへのポインタを作成することができます。


現在、皆さんのLambdaには少なくともlatestと発行されたバージョンの二つのバージョンが存在するはずなので、エイリアスを作成しそれぞれのバージョンを紐づけていきましょう。


まずは簡単なユースケースとして以下を想定します。

新しくデプロイされた関数はまず開発用として扱う。安定動作を確認次第バージョンを発行しそのバージョンを本番用とする

早速エイリアスを作成していきましょう。まずはdevelopエイリアスを作成していきます。ユースケースによるとデプロイされたらまずは開発用とするので、latestを紐づけておきます。


エイリアスはエイリアスタブより作成可能です。

作成が完了すると、バージョンの時と同様操作ページに移動します。エイリアスもバージョン同様コードの修正を行うことはできません。


元のLambdaのページに戻り、productionエイリアスも作成しましょう。要領は同じですが、こちらでは先ほど発行されたバージョンを紐づけておきましょう。

エイリアスの作成はこれで完了です。早速それぞれをCLIで呼び出してみましょう。

$ aws lambda invoke --function-name version-test:develop response.json
{
    "StatusCode": 200,
    "ExecutedVersion": "$LATEST"
}
aws lambda invoke --function-name version-test:production response.json
{
    "StatusCode": 200,
    "ExecutedVersion": "2"
}

エイリアスを指定すると、対応するバージョンのLambdaが呼び出されたことが確認できました!エイリアスに紐づけるバージョンは後から変更も可能なので、他のバージョンを発行して試してみてもいいかもしれません。


これで想定していたユースケースを満たしているといえるのではないでしょうか!最後に最近登場したFunction URLsを各エイリアスに設定してみましょう!

エイリアス単位でFunction URLsを発行する

皆さんはつい先日発表された激アツアップデートであるFunction URLsはもう確認しておりますでしょうか?

簡単に説明するとLambda関数のエンドポイントURLを発行できるというもので、API Gatewayを利用しなくでもそのエンドポイントを叩くだけで関数を実行することが可能となりました!

実はこのFunction URLs、エイリアスごとに発行することが可能です。上記のケースでいうと、開発用と本番用のエンドポイントを作成することができるということになります。早速試してみましょう!


まずはdevelopエイリアスのページに移動し、設定からURLを発行してください。

今回は認証はなしで検証します。

次に、productionの方でも同じ手順でURLを発行してください。

完了したら元のLambdaのページに戻り、コードに少し手を加えてみます。今回はリクエストボディの文字列を変更してみました。保存とDeployまで完了させておいてください。

    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Latest!')
    }

これでlatestと発行したバージョンでコードの内容に差分が出ました。実際にそれぞれのエイリアスのURLエンドポイントを叩くとどのようになるのか確認してみましょう。

$ curl -sS <developエイリアスのエンドポイントURL>
"Hello from Latest!"%
$ curl -sS <productionエイリアスのエンドポイントURL>
"Hello from Lambda!"%

それぞれの実行結果に差分が出ましたね!Function URLsを使用するケースにおいてもエイリアスを使用した環境分けを行うことができました!

まとめ

今回はAWS Lambdaのバージョンとエイリアスについて記事にしてみました。


同一動作のLambdaを環境分複数作成しているといった方などにぜひ参考にしていただきたい内容です。


ちなみに当然関数が消えるとバージョンもエイリアスも全て吹き飛ぶのでお気をつけください!


最後まで読んでいただきありがとうございます!

本日のオススメ

AWS

Posted by CY