Travis CIによるLambdaの自動デプロイ with AWS SAM in Go
Summary
- AWS SAMで管理しているLambda Functionのデプロイ自動化を、AWS CodePipelineやAWS CodeBuildを使うことなく Travis CIを活用して行う
- 今回利用したLambda FunctionはGo製
- Pull Requestのmasterブランチへのmerge時に、samコマンドで自動デプロイ
前提条件
- Lambdaのリポジトリはgithub
- 各種バージョン情報は下記の通り
|
|
SAMで管理しているLambdaのデプロイをTravis CIで自動化したい
SAMで管理しているLambdaのデプロイ自動化をTravis CIで行います。SAMで管理しているからにはSAMのテンプレートとaws-sam-cliを使ってデプロイを行いたいです。なのでTravis公式のLambdaデプロイサポートは使用しません。
- branch != master の場合のCI
- Lambdaコードのテスト
- Lambdaコードのlint(golintやgo vetなど)
sam validate
- branch == master の場合のCI, デプロイ
- CI時に実施した事全て
sam package
sam deploy
これらを.travis.ymlで定義してデプロイを自動化します。
セキュアな環境変数の設定
Travis CIでsamコマンドを実行したい場合に必要な環境変数は下記の3つです。
- AWS_ACCESS_KEY_ID
- AWS_SECRET_ACCESS_KEY
- AWS_DEFAULT_REGION
セキュアな変数は travis encrypt
コマンドで暗号化して.travis.yml に設定します。
|
|
.travis.yml
|
|
pythonのバージョンが古いとsam
コマンドがコケるのでdist: xenial
でXenialベースのイメージを指定し、極力新しいバージョンのpythonを利用できるようにします。
language: go
なビルドイメージにインストールされているpythonのバージョンは、dist: xenial
を指定しない=dist: trusty
が選択されれば(この記事の執筆時点では)2.7.6になります。例えばsam validate
をver 2.7.6なpython環境で実行すると、SNIMissingWarningが発生してしまいます。
|
|
deployセクションのscriptでgo build
=> sam package
=> sam deploy
を実行するスクリプトを用意・指定します。
|
|
これで、今後masterブランチへのpushをトリガーにgo build
=> sam package
=> sam deploy
によるデプロイが自動で行われるようになります。
今回の例のようにsam package
=> sam deploy
をシンプルに実行するだけのフローであれば(且つCodePipeline導入によるメリットを享受したい強い理由が無ければ)、Travis CIでも十分でした、という所感です。
ブックマーク
- Deploy AWS Lambda functions with aws-sam-cli and Travis-CI - DEV Community 👩💻👨💻
- Deploy AWS Lambda functions with aws-sam-cli and Travis-CI: Part 2 - DEV Community 👩💻👨💻
- AWS CodePipeline を使用して Lambda アプリケーションの継続的な配信パイプラインを構築する - AWS Lambda
- aws-samples/cookiecutter-aws-sam-pipeline: Cookiecutter is an Open Source BSD-3 licensed that provides a template engine to scaffold projects. This project is a a cookiecutter template to create a generic CI/CD pipeline for Serverless App based on Serverless Application Model (SAM).
- Giftbit/sam-scaffold: A template for an AWS SAM project with continuous integration.
- AWS SAMで管理しているLambdaプロジェクト向けのCI雛形集