Help us understand the problem. What is going on with this article?

AWS Lambdaバージョン管理のススメ

More than 1 year has passed since last update.

『今日のゴミ出し』というAlexaスキルを公開しました。
Alexaスキル - 今日のゴミ出し

初めてAlexaスキルを公開してから失敗した!と思ったことのひとつに、

「Lambdaのモジュールにバージョンを付けていなかった」

という点があります。



Alexaスキルに限らず、普通に開発する人なら「何を今さら」という感じでしょうが、「Lambdaとか雰囲気で使ってるんだよね。」という私のような初学者に向けてAlexaスキル開発を例に取り、AWS Lambdaバージョン管理のススメをまとめます。

Alexaスキル開発とAWS Lambda

なぜAlexaスキル開発時にAWS Lambdaのバージョン管理を推奨するのか。それはバージョン管理をしていない場合、

公開後のアップデートが面倒臭くなるから

です。

Alexaスキル公開後の流れ

Alexaスキル開発ではデフォルトのエンドポイントにAWS Lambda関数のARNを指定します。

自分が開発したAlexaスキルは審査を通過すると自動的にストアに公開されます。それと同時に、スキルの開発バージョンが自動的に生成されます。

スキル公開後にAlexa Skill Kitコンソールを見ると「公開バージョン」「開発バージョン」が表示さていることが分かります。

2018-04-01_18h33_51.png

公開バージョンは閲覧専用で、開発バージョンを使ってスキルをアップデートしていきます。

スキル公開直後、開発バージョンには公開バージョンと同じエンドポイントが指定されています。
2018-04-01_18h48_35.png

開発バージョンだけLambdaを更新したい!

ではこの時Lambdaモジュールを更新して開発バージョンにのみ更新を適用したい場合、どうしたら良いでしょう。

……

Lambdaでバージョン管理をしていない場合、公開バージョンは常に最新のLambda関数を参照しているため、Lambda関数を新規に作成するしかありません。環境変数もテストパターンもそっくり同じものを作らなければならないので、とてつもなく面倒くさいです。(AWSコンソールを見る限り「既存の関数をコピーする」といったことはできない気がします。)

AWS Lambdaのバージョン管理

この問題を解決するためにAWS Lambdaでバージョン管理します。

バージョン管理の概要

具体的な手順の前にLambdaのバージョン管理について概要をさらっと記します。

AWS Lambdaのバージョン管理の要点は以下2つです。

  • バージョンごとにARN(エンドポイント)が変わる
  • 編集できるのは最新バージョン($LATEST)のみ

バージョンごとにARN(エンドポイント)が変わる

AlexaスキルのエンドポイントにはLambdaのARNを指定します。

2018-04-01_19h00_04.png

Lambdaでバージョンを発行するとARNがバージョンごとに一意になります。具体的には一番最後にバージョン番号が付与されます。

例えば最新を示すバージョンであれば「$LATEST」が末尾に付きます。これはバージョンを付けない場合と同意です。
2018-04-01_19h04_23.png

一方で過去に発行したバージョンは末尾にバージョン番号が付きます。(以下の例ではバージョン「1」
2018-04-01_19h04_34.png

これによって公開中のスキルと開発中のスキルに同じLambda関数の異なるバージョンを使い分けることができます。

編集できるのは最新バージョンのみ

Lambda関数の最新バージョンは$LATESTとなり、最新バージョンのみモジュールが更新可能になります。通常のバージョンはコードはもちろん環境変数なども更新は行えず読み取り専用になります。

2018-04-01_20h14_30.png

2018-04-01_20h14_47.png

このためスキル申請のタイミングでLambdaのバージョンを発行しエンドポイントに設定することで「誤って公開バージョンを変更してしまう」などを防ぐことができます。

新しいバージョンを発行する

バージョンの発行はとても簡単です。

AWS Lambdaの関数コンソールのバージョンから$LATESTを選択し「アクション」=>「新しいバージョンを発行」をクリックします。
2018-04-01_20h21_06.png

ダイアログが表示されるので「バージョンの説明」を入力して「発行」を実行します。
2018-04-01_20h24_46.png

これで自動でバージョンが採番されます。
2018-04-01_20h26_30.png

注意点

AWS Lambdaで新しいバージョンを発行すると、新バージョンの「トリガー」がリセットされるようです。Alexaスキルで利用する場合は新バージョンで「Alexa Skills Kit」をトリガーに追加して保存しましょう。(トリガーの変更は可能)

2018-04-01_20h33_17.png

まとめ(Alexaスキル開発の流れ)

ということでAlexaスキル開発を例にAWS Lmabdaのバージョン管理のススメでした。

Alexaスキル開発の流れでまとめると、

  1. Alexaスキル開発
  2. 公開申請手前でLambdaのバージョン発行
  3. 発行されたバージョンでARNを修正し、スキルを公開申請する
  4. 公開後の開発は最新バージョン($LATEST)を使って1に戻る

という感じになります。

以上!

quotto
しがないSIerです。
http://blog.wackwack.net
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした