Serverless Application Repositoryからデプロイしたアプリケーションのアップデートを試す
まだ検証したいことはいくつか残っていますが、話題としてキリがよくなってきたので一旦エントリにまとめます。
Serverless Application Repositoryとは、っていう話はこちらから。
アプリケーションの公開も、既に記事になっています。
で、こういうのを見るとアプリケーションのライフサイクルとか更新時どうなってるんだろう、とか諸々考えてしまう性癖なのが私です。
やること
- テスト用のアプリケーションを公開してデプロイ
- アプリケーションの変更をして公開しなおして(同じスタックに)デプロイ
のライフサイクルを実際にやってみて、以下の点について現状の仕様を確認してみようと思います。
- デプロイ済みアプリケーションへの更新通知とか
- アプリケーションの更新手順
これからやりたいこと
以下はこれから検証したいこと。
- デプロイした後にCloudFormationの設定を変更してからアプリケーションの更新
- デプロイした複数のアプリケーションを取りまとめて一つのアプリケーションにするための良いプラクティスの模索
検証
さて、ここから検証です。
アプリケーションの1stバージョンのpublishとデプロイ
これについては先ほどあげたクラスメソッドさんの記事のママで問題ないでしょう。
この記事の通りにやらなかったこととか、書かれていない範囲での気づきは以下の通りです。
- デフォルトでの公開範囲はプライベートで、その場合は作成アカウントから同リージョンのLambdaにのみ作成可能
- 公開でpublishされたアプリケーションは東京リージョンのLambdaへもデプロイ可能
- ライセンスは一度publishすると編集できないっぽい
- デプロイ時にAuthorizerの追加とかデプロイのカスタマイズの設定がない
今回は、適当なJSONレスポンスを返すものを作ってみました。
で、デプロイした時のスタックログとLamndaのテスト実行の結果は以下です。
SAMアプリケーション前提とはいえ、Lambdaのコンソールからデプロイなんだなあ、と少ししっくりきていないところです。
2ndバージョンのpublish
さて、実際のアプリケーションの運用においては、一度publishされたアプリケーションが更新されないことはないと思いますので、アプリケーションを変更してみます。DynamoDBをリソースに追加して、JSONレスポンスに追記してみました。これを、新たなバージョンとしてpublishしてみましょう。
新しいバージョンを追加するには、リポジトリの「マイアプリケーション」からpublish済みアプリケーションのページを開きます。右側のバージョンリストに「新しいバージョンを発行」というボタンが出てるのでそれをクリック。
新しいバージョン番号とyamlを指定します。
「公開バージョン」をクリックすればpublishされます。
2ndバージョンの更新検知の有無を確認
デプロイ済みのアプリケーションに何か通知があったりするかなあ、とか思ってしばらく待っていたのですが、そんなことはありませんでした。
まあ、パッケージリポジトリとパッケージの関係のようなものなので、リポジトリからプッシュ通知みたいなことはしないのでしょう。ましてや問答無用でバージョンアップとかされても怖いですし。
2ndバージョンのデプロイ
同じアプリケーションに更新デプロイしてみます。ここがまだ流れとして不自然だな、と感じたところ。
CloudFormationのスタックからはリポジトリ参照で更新みたいな流れは見つけられなかったので少し逡巡してしまいました。結論としては、Lambdaから新規関数の作成に進んで、リポジトリから選択、スタック名を同じにしてデプロイするという感じです。
デプロイ済みの関数が更新され、関連するCloudFormationスタックのリソースやイベントが更新されています。
まとめ
このリポジトリに公開できるのはSAMなので、どちらかというとこれだけで完結するというよりは、gradleやmavenやGemのようにパッケージとして扱って組合わせてアプリケーションを構築する、みたいな未来をAWSは想像しているはずです。そういう未来になるのは、まだアプリケーションのライフサイクルだったり、パッケージ管理に相当するものだったりが足りないなあ、という印象。同じスタックで新規作成というのも少し迷いました。
ただ、この辺は順次解決されていくでしょう、AWSですから。CloudFormationがServerless Application Respositoryに対応して、パッケージマネージャみたいな位置付けになっていくんじゃないかな、と思います。パッケージマネージャ的なものを自力で作るという手もありますが(Serverless Frameworkのプラグインとか?)。