AMS Lambdaでのバージョン管理

# はじめに

AWS Lambdaではバージョン管理を設定できます。
本記事では、バージョン管理の恩恵と設定方法を紹介したいと思います。

※掲載するコンソールのデザインは執筆時点のイメージとなります。

# バージョン管理とは

文字と通りの意味合いで、Lambdaにデプロイしたモジュールのバージョンを管理します。
Lambdaインスタンスを作成したばかりのデフォルトではバージョン管理を行う設定になっていません。
そのため、デプロイする度に最新のモジュールがLambdaの実行モジュールになります。

# バージョン管理での恩恵

バージョン管理を行うことで以前デプロイしたモジュールの動作を簡単に確認することが可能です。
例えば、実際の開発ではコード修正⇒ビルド⇒デプロイ⇒動作確認を何度も行うかと思います。
そんな時、最新のデプロイモジュールの動作と以前デプロイしたモジュールの動作を比較したケースなどがあるかと考えられます。
バージョン管理をしていない場合、コード修正⇒ビルド⇒デプロイ⇒動作確認のフローを都度実施しなければなりませんが、バージョン管理を行っていればAWSのコンソール上で簡単に以前のモジュールに切り替えて動作を確認することが可能です。

■バージョン管理を行っていない場合
![lambda.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410918/1126ecb3-7e48-218b-642d-53188e2410a9.png)


■バージョン管理を行っている場合
![lambda-managed-version.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410918/5fdb6ff4-9834-c4b9-2463-ff1f0f738e5d.png)

# バージョン管理の設定方法

では、AWS上でどのようにすればバージョン管理を行うことが可能か説明します。
サンプルとしてPythonのhello-worldを使用してバージョン管理が行われていることを確認します。

###1. 初期状態
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410918/775d4a52-4d6b-508c-f59d-0288dacbe773.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410918/0a3c44bd-98ec-fa53-5164-6e6aa7a0349c.png)

###2. バージョン1を発行する
メニューの「アクション」 >「 新規バージョンを発行」からバージョンを発行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410918/276c9488-2ad0-be3a-429a-ecbdd45d021d.png)

モーダルダイアログにてバージョンの説明を入力してます。
「発行」ボタンを押下することでバージョンが発行されます。
※発行されるバージョン番号は```1```から自動的に採番されます。
　開発者が任意に設定することはできません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410918/143afa7f-5304-f508-fdbd-81e604066ed4.png)

発行するバージョンはLATEST（Lambdaにデプロイしている最新モジュール）からしか行なえません。
そのため、一番最新のバージョンとLATESTの実行結果は同じになります。
試しにバージョン1を実行してみるとLATESTの実行結果と同じになることが確認できると思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410918/3ef87112-4031-218e-57fc-31dadf10954c.png)

###2. バージョン2を発行する
次にバージョン1のコードを修正してバージョン2を発行したいと思います。
まずはLambdaのメニューからバージョンをLATESTに変更します。
※画面上にも表示されていますが、バージョン発行したコードの編集は行えません。
　コードの編集はLATESTからのみ可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410918/e04a9e50-6519-1e69-6f6f-d6225c5d4d12.png)

```return "function version 1"```の部分を```return "function version 2"```に変更します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410918/f1c66cc6-5144-e02b-549f-1d8c4970f90a.png)

コードを保存したら「2. バージョン1を発行する」と同じ手順で新規バージョンを発行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410918/a8feb6e6-99d1-6a02-8035-b7ed46d269eb.png)

この状態で実行すると編集した内容が返却されることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410918/45ede1f1-dc28-7225-8946-d9bc0150f028.png)


###3. バージョンの切り替え
バージョンの切り替えはLambdaメニュー上のバージョンから切り替えます。
バージョンを1に戻して実行すると編集前の結果が返却されることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410918/ad787313-de66-14c6-0262-45b2c5693bf6.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410918/e31b9d96-edca-943d-9cf2-baec7652ce1a.png)


# おわりに

以上でバージョン管理について説明させていただきました。。。がこれだけでは今ひとつメリットを感じられないかもしれません。
実はこのバージョン管理機能はエイリアスと組み合わせることで効力を十分に発揮します。

詳細については別途執筆したいと思います。
お付き合いいただきありがとうございました。

ではまた。:sparkles: