AWS Lambdaは、必要な時に必要な分だけアプリケーションを実行できるサーバーレスサービスです。AWSが提供するLambdaを使用すれば、アプリケーションを実行するためのサーバーの構築、管理をAWSにお任せすることができることができます。そのため開発者は、インフラ運用、管理の手間を省き、アプリケーションのコードに集中することができます。
Lambdaの基本的な部分は、以下の記事で詳しく解説しています。
このLambdaを利用する際に理解しておきたいポイントとして、「バージョン管理」があります。
この記事では、Lambda関数の中でも「バージョン管理」について解説していきます。
実務でLambdaを扱う際には、バージョン管理の理解も必要不可欠になりますので、この記事を通して一緒に学んでいきましょう。
バージョン管理とは
Lambda関数のバージョン管理とは、特定の関数の状態(コードや設定)を保存し、そのバージョンを切り替えることができる仕組みのことです。
バージョンを作成することで、ある段階で関数のコードを改良したいとき、古いバージョンを記録しながら新しいバージョンを作成することができます。古いバージョンを残しておけば、新しいバージョンに問題があった場合、すぐに以前の安定したバージョンに戻すことが可能です。
バージョン管理の特徴
Lambdaのバージョン管理には、次のような特徴があります。
コード、設定の固定化
Lambda関数の新しいバージョンを発行すると、その時点の関数コードと、メモリ、タイムアウト値、環境変数などその時に使用していた設定が固定されます。そのため、バージョン発行後はそのバージョンのコード、設定内容は変更することができなくなります。
また、バージョンを発行するとLambda関数には1から順に一意の番号が割り振られます。
他のリソースからLambda関数のバージョンを呼び出す際は、このバージョンに割り振られた番号を指定する必要があります。
# バージョンの例
arn:aws:lambda:aws-region:acct-id:function:dev-function:1
仮に途中で作成したバージョンを削除した場合、バージョン番号は前に戻ることはなく、新しい番号が常に割り振られます。
バージョン管理の詳細は以下ドキュメントを参照ください。
デフォルトバージョンは変更可能
Lambda関数をデプロイした際に、自動で生成される最新バージョンは$LATEST
と呼ばれます。
この$LATEST
はソースコード、タイムアウト値や環境変数などの変更が可能なため、開発中やテスト段階ではこの$LATEST
バージョンを使用します。
なぜバージョン管理が必要なのか
Lambdaのバージョン管理機能を利用することで、アプリケーションの安定性の維持、トラブル時の素早い対応、機能追加などを安全に行うことができます。
ここからは、バージョン管理が必要な理由にはどんなことがあるのかを解説します。
安定したリリースとロールバックの実現
バージョン管理を行うことで、ある時点の安定したコードや設定を保持できます。
Lambda関数を実行するアプリケーションは、その関数によって新機能の追加やバグ修正などの変更が行われる場合があります。
万が一、変更が加えられたコードに問題があった場合、アプリケーション全体に影響が及ぶリスクが考えらます。
新しいバージョンをリリースした際に問題が発生した場合でも、安定して動いていたバージョンに向き先を変更することで、すぐに以前のバージョンに戻す(ロールバックする)ことができるため、アプリケーションの安定性を維持することが可能です。
設定の確認と再現性の確保ができる
Lambda関数には、メモリサイズやタイムアウト時間、環境変数など、さまざまな設定が含まれています。バージョン管理を行うことで、各バージョンごとの設定を固定化することができます。
例えば、「以前のバージョンで使用していた設定を再現したい」「特定のバージョンでどの設定を使用していたのか確認したい」という場合にも、バージョン管理が役立ちます。過去の設定情報をすぐに取得できるため、必要な時にすぐに設定を再現することが可能です。
運用環境と開発環境を分けられる
バージョンを作成しておき、呼び出すリソースからは使用したいバージョンを呼び出すようにすることで、運用環境と開発環境を分けることができます。
Lambdaはトリガーとなるリソースから呼び出すバージョンを指定することができます。
トリガー側で動作確認できているバージョンを指定することで、開発に使用する$LATEST
バージョンと使い分けることができます。そのため、$LATEST
バージョンの内容を変更しても運用には影響を与えることはありません。
バージョン管理を行うことで運用と開発のフェーズを分けることができるため、テストや開発時に発生するエラーが運用環境に影響を与えるリスクを軽減することができます。
バージョン管理時の注意点
ここからは、Lambda関数をバージョン管理する上で、注意すべき点はどのようなものがあるかを解説します。
それぞれの値が固定される
先述したように、バージョンを発行すると、発行した時点のコード、メモリ、レイヤーなどほとんどの設定が固定され、編集することができません。
バージョン発行後に「やっぱりメモリサイズを修正したい」となった場合でも、そのバージョンの設定は固定されているため、直接修正することはできず新しいバージョンを発行する必要があります。
安易にバージョンを発行すると、その分不要なバージョンも増えてしまうことになり、「安定したバージョンがどのバージョンかすぐに分からない」など、管理が複雑になってしまう可能性があります。
修飾ARNと非修飾 ARN
Lambda関数のARNには、修飾ARN(Qualified ARN)と非修飾ARN(Unqualified ARN)の2種類が存在します。
修飾ARNはバージョン番号が付与されたARNで、特定のバージョンを明確に指定して呼び出すことができます。
# バージョンの例
arn:aws:lambda:aws-region:acct-id:function:dev-function:1
一方、非修飾ARNはバージョン番号が付与されていないARNで、常に$LATEST
バージョンを指します。
# バージョンの例
arn:aws:lambda:aws-region:acct-id:function:dev-function
トリガーからLambda関数を呼び出す際、非修飾ARNを指定すると$LATEST
バージョンが実行されます。特定のバージョンを運用環境で使用する場合には、修飾ARNをトリガー側で指定する必要があるため、この違いを理解して適切にARNを使用することが重要です。
まとめ
この記事では、Lambda関数の中でも「バージョン管理」に焦点を当てて解説しました。
Lambda関数をバージョンで管理することで、安定した状態を保持しつつ、開発やテストを進めることが可能です。
また、特定のバージョンに問題が発生した場合でも、すぐに以前のバージョンに戻してシステムの安定性を保つことができるのもメリットの一つです。
1つ必ず理解しておきたい点として、バージョンを作成した場合、メモリサイズや環境変数などの設定値が固定されてしまうことです。
固定されることによるメリットもありますが、気軽に変更できなくなるデメリットもあるため、バージョンを作成する際はこの点も注意が必要になります。
Lambda関数に関しては、Terraformを使ったハンズオン記事も公開しています。
Terraformを使ったLambda関数作成に興味がある方は、次の記事を参照ください。
【Terraformハンズオン】同期呼び出しのLambda関数をデプロイしてみよう
【Terraformハンズオン】非同期呼び出しのLambda関数をデプロイしてみよう
【Terraformハンズオン】Lambda関数にレイヤーを追加してみよう
参考記事
【Terraformハンズオン】同期呼び出しのLambda関数をデプロイしてみよう
【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
プログラミング塾に半年通えば、一人前になれると思っているあなた。それ、勘違いですよ。「なぜ間違いなの?」「正しい勉強法とは何なの?」ITを学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。
「フリーランスエンジニア」
近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。
「成功する人とそうでない人の違いは何か?」
私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。
比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。
多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、
エンベーダー編集部
エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。
関連記事
2020.02.25
完全未経験からエンジニアを目指す爆速勉強法
USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
- キャリア・学習法
- エンジニア
2024.04.06
[ハンズオン]AWS Backupで作成したAMIをLambdaを使用して起動テンプレートに適用
この記事では、AWS上でのリソース管理を自動化する方法を実践的に解説します。特に、開発環境やプロダクション環境におけるデプロイメントプロセスの簡素化や、ディザスタリカバリ準備の一環として、最新のAMIを定期的に起動テンプレートに適用する自動化手法を紹介します。
- AWS
- インフラエンジニア
- ハンズオン
2024.07.31
Terraformハンズオン】EC2のスケールアウトをスケジュールしてみよう
こちらの記事では、IaCツールのTerraformを使用し、EC2インスタンスのスケールアウトをスケジュールして実行する方法を解説します。
- AWS
- ハンズオン
2024.04.17
Terraform活用法: AWS EC2 Auto ScalingGroupを構築してみよう
こちらの記事では、Amazon EC2 Auto Scalingの機能を[Terraform](https://www.terraform.io/)で実装する方法を解説します。
- AWS
- ハンズオン
- Terraform