AWSを使用した、シンプルなRedisのKVS構成
- Makefile
- Server Less Framework(Lambda + APIGateway)
- Terraform(上記以外のAWSリソース諸々)
- jq
- yq
- brewで入れると古すぎてダメ、pipで最新版を入れること。
- macOSでpipがはまる問題:adobe-type-tools/afdko#238 の下の方みろ
を使用した自動構成に対応している。
Makeのたびに引数のAPI_STAGE指定するのがめんど場合、作業毎に、Makefile.envを弄っておくと無指定でOK(言うまでもなくCIで指定して実行するの奨励)
- Api側のプロジェクト初期化
make env
emacs Makefile.env
-
TerraformでResource生成
- Terraform側の初期化はTerraform側のREADME参照
-
Api側のプロジェクトビルド
make all
make package
make api-all
make api-info
Makefile.env の env を書き換えた後、
make api-all
make api-info
を実行する。
Lambda側は、Stageを環境変数で拾って諸々処理しているなら、リビルド不要。
Terraform側は該当環境のリソースディレクトリでよしなにやっておくこと。
- ${opt:stage} を手動でつけておかないと、複数環境でリソース名衝突が起きてエラーになるので注意。
- 具体的に、AWS側でハッシュっぽいのが付いてないリソースがあったら間違いなく起きるので、開発時から注意すること。
C#Library は StackExxange.Redis を使おう! ただし、こいつ、最新バージョンを使うと、Lambdaでの実行時にエラーを吐く。 故に1系を明示指定して、使う必要あり。
dotnet add package StackExchange.Redis --version 1.2.6
ServiceStack.Redis は罠だった。
- Terraform側のディレクトリに入って
make tf-clean
make clean
- その後、ServerlessFramework側のディレクトリに入って
make api-clean
make clean
わりと、手順を忘れるのでメモ。 Stubとかはジェネレーター作っても良い気がする。
- 実装するmodeの名前を決める
- Lambda{MODE}.cs と {MODE}Server.cs にStubを実装
- {MODE}Data.cs と {ACTION}Data.cs に Request定義を実装
- Program.cs に テスト用メソッド定義
- XXXXXXXServer.cs を実装しつつ、Lambda単体テスト
- make package で Lambda Package更新(この後のフローでもLambdaのコード修正するたびに必要なので注意)
- test/*****.json でテスト用引数オブジェクト定義
- Makefile.envの引数指定を変更
- serverless.yml に Endpoint追加
- DeployしてLambda単体テスト
- curl経由で、Server側結合テスト
- LambdaXXXXXX.cs と XXXXXXXClient.cs にStubを実装
- XXXXXXXClient.cs を実装しつつ、C#単体テスト
- make package して lambdaパッケージを更新しないと、 make api で、更新されてないよ!って言われます。
- Serverless Framework v1.0の使い方まとめ
- APIGateway周りの記述方法
- ただし、バージョン依存激しい箇所なので、本家通りでも動かない場合が多々ある。うろたえるな。