Chaliceを用いたCD環境の構築(基本編)

はじめに

みなさんこんにちは。

突然ですが、「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上にきちんとスタックが作成されています。
AWS スタック

 

このスタックは以下のリソースを一括で作成してくれるようなスタックとなっています。
※テンプレートの記載順に並べています。

  • CodeCommitリポジトリ
  • S3バケットソースコード格納用)
  • IAMロール(CodeBuild用)
  • IAMポリシー(CodeBuild用)
  • CodeBuildプロジェクト(デプロイ用)
  • CodePipeline(Source→Build→Beta)
  • S3バケット(CodePipeline用)
  • IAMロール(CodePipeline用)
  • IAMロール(Cloudformation用)

 

はじめてcloudformationのdeployコマンドを叩いた際にはスタックの実行もされるので、すでにこれらのリソースはAWS上に作成されているはずです。
CodePipelineを見てみましょう。

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をトリガーにパイプラインが動き出します。
今度は成功していますね。
Pipeline

 

しばらくすると、実際にLambda、ApiGatewayを構築するBetaステージが完了します。
このようにApiGatewayが作成されていたら成功です。

ApiGateway

 

おわりに

今回はここまでです。
Chaliceの機能だけでもそれなりの環境が作れることが分かっていただけたかと思います。
次回は、ここからさらにPipelineを改良してよりよいCD環境を構築する方法を紹介したいと思います。
お楽しみに。
xp-cloud.jp
      ブログ著者