セクションナイン の 吉田真吾(@yoshidashingo)です。
Serverless Advent Calendar 2016の5日目です。
今日はCircleCIを使って簡単にSAMの自動デプロイフローを作ってみましょう。
準備
準備の流れは以下のとおり
- GitHubリポジトリを作成してCircleCIのプロジェクトとひもづけておく
- ソースコード(index.js)を用意する
- IAM Userのクレデンシャルを用意する
- リリースステージ用のS3バケットを作成する
- app-spec.ymlを用意する
- circle.ymlを用意する
- CircleCIのプロジェクトにAWSのクレデンシャルと環境変数を設定する
1. GitHubリポジトリを作成してCircleCIのプロジェクトとひもづけておく
適当にGitHubリポジトリを作ってください。今回のサンプルは最終的に以下のような構成になります。
├── README.md ├── app-spec.yml ├── circle.yml └── index.js
サンプルはここに置いておきます。
できたらCircleCI側でもこのリポジトリに紐づくプロジェクトを作っておきます。
※template.yaml = app-spec.yml
2. ソースコード(index.js)を用意する
今回作るのは以下のSAMのサンプルのAPI Backendを参考にします。
https://github.com/awslabs/serverless-application-model/tree/master/examples/2016-10-31/api_backendgithub.com
3. IAM Userのクレデンシャルを用意する
7でCircleCIのプロジェクト設定に追加するCloudFormation用のIAM Userのクレデンシャル(Access Key ID と Secret Access Key)を用意します。 権限は今回省略しますが適宜つけておいてください。
4. リリースステージ用のS3バケットを作成する
作成するAPIバックエンドと同一のリージョンにソースコードリリースステージ用のバケットを作成してください。
5. app-spec.ymlを用意する
SAMの定義ファイルを作成します。
6. circle.ymlを用意する
7. CircleCIのプロジェクトにAWSのクレデンシャルと環境変数を設定する
- Project > AWS Permissions に Access Key ID と Secret Access Key を設定します。
- Project > Environment Variables に以下の環境変数を設定します
- REGION : スタックを作成するリージョン、ap-northeast-1 とか
- S3_BUCKET_NAME : 4で作ったコードをステージするS3バケット名
- STACK_NAME : CloudFormationのスタック名、適当につけて大丈夫です。
実行
GitHubにPushすれば
CircleCIが回って
CloudFormationが動いて
APIバックエンドができました。
最後に
SAMに限らずサーバーレスアプリケーションを構築するフレームワークの多くが手元から簡単に使えますが、PR駆動なチーム開発をしようとした場合にはこういったCIのサービスと連携する必要が出てきます。当初このフローも先日リリースされたばかりのCodeBuildを利用してみようと思いましたが、7で設定したような環境変数が設定できなさそうだったので、使い慣れたCircleCIをベースにやってみましたが、日々ツールは進化するので、定期的に見直すことで開発フローをよりよくしていきたいですね。