はじめに
みなさんこんにちは。
突然ですが、「Chalice」というPythonのライブラリをご存知でしょうか。
Chaliceを使用するとPythonのソース上でAWSのLambdaとAPI GateWayを組み合わせたサーバーレス環境の設定を行うことができます。
ソースとAPIの設定をPython上で一元管理できるのは便利だと思います。
今回はChaliceの簡単な導入からChaliceの機能を用いて簡単にCI/CD環境を作成していきます。
導入
まずはChaliceをインストールしましょう。
お好みでvirtualenvなどを使って環境を分けておくのもよいでしょう。
$ pip install chalice
コマンドからプロジェクトを作成するとプロジェクト名と同じディレクトリ配下に簡単なひな形が作成されます。
$ chalice new-project blog $ cd blog $ ls -la drwxr-xr-x .chalice/ -rw-r--r-- .gitignore -rw-r--r-- app.py -rw-r--r-- requirements.txt
app.pyファイルはchaliceの主要なファイルとなります。
初期の状態ではルートにアクセスすると{'hello': 'world'}
を返すエンドポイントのみが定義されています。
from chalice import Chalice app = Chalice(app_name='blog') @app.route('/') def index(): return {'hello': 'world'}
この時点でdeployコマンドを叩けばすぐにサーバーレス環境を構築できるのですが、今回はCI/CD環境も構築するので別のコマンドを実行します。
CD環境構築
chaliceはCodePipelineとその他のCodeサービスを構築するためのCloudFormationテンプレートを作成するコマンドを持っています。
このコマンド1つでCodeCommitリポジトリからCodeBuild、CodePipelineを作成できるのでとても便利な機能だと言えます。
$ chalice generate-pipeline pipeline.json $ aws cloudformation deploy --stack-name blog --template-file pipeline.json --capabilities CAPABILITY_IAM Waiting for changeset to be created.. Waiting for stack create/update to complete Successfully created/updated stack - blog
AWS上にきちんとスタックが作成されています。
このスタックは以下のリソースを一括で作成してくれるようなスタックとなっています。
※テンプレートの記載順に並べています。
- CodeCommitリポジトリ
- S3バケット(ソースコード格納用)
- IAMロール(CodeBuild用)
- IAMポリシー(CodeBuild用)
- CodeBuildプロジェクト(デプロイ用)
- CodePipeline(Source→Build→Beta)
- S3バケット(CodePipeline用)
- IAMロール(CodePipeline用)
- IAMロール(Cloudformation用)
はじめてcloudformationのdeployコマンドを叩いた際にはスタックの実行もされるので、すでにこれらのリソースはAWS上に作成されているはずです。
CodePipelineを見てみましょう。
Sourceステージの時点で実行が失敗していますね。
これはまだCodeCommitのリポジトリ上が空であることが理由です。
なので、まずはCodeCommitリポジトリをクローンしてここに先ほどChaliceで作成したプロジェクトソースをPushする必要があります。
※HTTPSでCodeCommitリポジトリにアクセスするには、アクセスに使用するIAMユーザーであらかじめCodeCommit認証情報を取得することを忘れないでください。
$ git clone 【CodeCommitリポジトリのURL】
chaliceプロジェクト内のソースがcloneしたディレクトリに移せたらCodeCommitリポジトリにpushします。
$ git add -A $ git commit -m initial_commit [master (root-commit) 1b41947] initial_commit 5 files changed, 464 insertions(+) create mode 100644 .chalice/config.json create mode 100644 .gitignore create mode 100644 app.py create mode 100644 pipeline.json create mode 100644 requirements.txt $ git push origin master Enumerating objects: 8, done. Counting objects: 100% (8/8), done. Delta compression using up to 12 threads. Compressing objects: 100% (5/5), done. Writing objects: 100% (8/8), 2.91 KiB | 1.45 MiB/s, done. Total 8 (delta 0), reused 0 (delta 0) To https://git-codecommit.XXXXXX * [new branch] master -> master
このpushをトリガーにパイプラインが動き出します。
今度は成功していますね。
しばらくすると、実際にLambda、ApiGatewayを構築するBetaステージが完了します。
このようにApiGatewayが作成されていたら成功です。
おわりに
今回はここまでです。
Chaliceの機能だけでもそれなりの環境が作れることが分かっていただけたかと思います。
次回は、ここからさらにPipelineを改良してよりよいCD環境を構築する方法を紹介したいと思います。
お楽しみに。
xp-cloud.jp