AWS
lambda

AWS LambdaにApexを使ってCircleCIからデプロイする

More than 1 year has passed since last update.


やりたい事

リリースブランチにmergeした場合のみ、circleciからAWS lambdaにdeployをします。

その際Deployの状況をSlackに通知も行いたいと思います。

image.png

Apexの使い方については以前にこちらの記事を書いているので参考にしてみてください。

AWS LambdaをApexでDeployします - Qiita

また、今回はcircleci.ymlをメインに説明したいと思います。


やる事


  • 1.Slackのwebhook設定

  • 2.circleci管理画面からの設定

  • 3.circleci.ymlの作成


1.SlackのWebhook設定

ブラウザからSlackにログインしている状態で以下URLにアクセスします。

https://slack.com/services/new/incoming-webhook

チャンネルを選択し、[着信 Web フック インテグレーションの追加]をクリックします。

ページ遷移し、[Webhook URL]が表示されるのでこれを使用します。


2.circleci管理画面からの設定

先ほど取得したSlackのwebhookやAWS access key等の情報をCircleCiで使用したいのでCircleCIの管理画面からこれらの”key:value”を環境変数に持たせてます。

リポジトリの設定から[Environment Variables

]を選択し、[Add Variable]をクリックすると”key:value”が入力でき、

入力すると末尾4文字だけが表示されますがそれより前はマスクしてくれます。

image.png


3.circleci.ymlの設定

CIでリリースに使用する Apex をインストールとそれをキャッシュさせておく。

キャッシュさせておけばCIの自動時間短縮ができるし、Deployしない場合(testのみ)でもこれをインストールする時間を気にしなくて良い。

また、ブランチを条件判定する事でリリースブランチにマージされた時のみDeployが実行することも可能ですしリリースのSlack通知をしておくと便利です。

version: 2

machine:
timezone:
Asia/Tokyo
services:
- docker

jobs:
build:
docker:
- image: circleci/node:9.4.0

working_directory: ~/repo

steps:
- checkout
- setup_remote_docker

- run: echo 'export PATH=/home/circleci/bin:$PATH' >> $BASH_ENV

- restore_cache:
key: v1-apex
- run:
name: Install Apex
command: |
# apexをインストールする
curl https://raw.githubusercontent.com/apex/apex/master/install.sh | sudo sh
# /usr/local/binでしようするとcacheさせる際に権限が足りなくてcacheできなかったのでユーザのカレントディレクトリに配置する
test -e ./bin || mkdir -m 755 /home/circleci/bin
sudo mv /usr/local/bin/apex /home/circleci/bin/apex
sudo chmod +x /home/circleci/bin/apex
sudo chown circleci:circleci /home/circleci/bin/apex
- save_cache:
key: v1-apex
paths:
- /usr/local/bin/apex

- deploy:
name: apex lambda deploy
command: |
export PATH=/home/circleci/bin:$PATH
if [ "${CIRCLE_BRANCH}" == "release" ]; then
curl -X POST --data-urlencode "payload={\"channel\": \"#deploy\", \"username\": \"Deploy GOD\", \"text\": \"${CIRCLE_USERNAME} さんによるDeployを開始します。\", \"icon_emoji\": \":bowtie:\"}" ${SLACK_TOKEN}
npm install
apex deploy apex_lambda_test \
-s "S3_BUCKET= apex_lambda_test.com" \
-s "S3_PREFIX=apex_lambda_test" \
-s "TABLE_NAME=job_info_lists" || curl -X POST --data-urlencode "payload={\"channel\": \"#deploy\", \"username\": \"Deploy GOD\", \"text\": \"Deployが失敗しました。\", \"icon_emoji\": \":bowtie:\"}" ${SLACK_TOKEN}
curl -X POST --data-urlencode "payload={\"channel\": \"#deploy\", \"username\": \"Deploy GOD\", \"text\": \"Deployが完了しました。\", \"icon_emoji\": \":bowtie:\"}" ${SLACK_TOKEN}
fi