みかづきメモ

プログラミング学習帳 ♪(✿╹ヮ╹)ノ 書いてあるコードは自己責任でご自由にどうぞ

GitHub + CircleCI + AWS CDK で自動デプロイをやりたい

ブログネタ何か欲しいとつぶやいたら、「AWS CDK で何か書いて」とネタをもらったので、
AWS CDK でのデプロイを自動化しました。
自動化は正義です。


前提 :

  • AWS CDK 0.18.1 (TypeScript)
  • CircleCI

GitHub に push したら、良い感じに cdk deploy が走るよう CircleCI に設定します。
こんな感じ

# Javascript Node CircleCI 2.0 configuration file
#
# Check https://circleci.com/docs/2.0/language-javascript/ for more details
#
version: 2
jobs:
  build:
    docker:
      # specify the version you desire here
      - image: circleci/node:7.10

    working_directory: ~/repo

    steps:
      - checkout

      # Download and cache dependencies
      - restore_cache:
          keys:
          - v1-dependencies-{{ checksum "package.json" }}
          # fallback to using the latest cache if no exact match is found
          - v1-dependencies-

      - run: yarn install

      - save_cache:
          paths:
            - node_modules
          key: v1-dependencies-{{ checksum "package.json" }}

      - run:
          name: Install aws-cli
          command: |
            sudo apt update
            sudo apt install -y awscli

      - run:
          name: Build
          command: |
            yarn run build

      - run:
          name: Configure AWS region
          command: |
            aws configure set region ap-northeast-1

      - deploy:
          name: Deployment
          command: |
            yarn run cdk deploy

CircleCI の AWS Deployment の設定にアクセスキーなどを設定しておきます。
途中で aws-cli をインストール、設定しているのは、 CircleCI には region の設定がないため。
そのほかは、 Nuxt.js のデプロイとかと変わらないです。

ちなみに、 AMI で CloudFormation なんちゃらと文句言われたら、
このポリシー付けておくと良いと思います (必要最低限のポリシー)。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "cloudformation:CreateChangeSet",
                "cloudformation:ExecuteChangeSet",
                "cloudformation:DescribeStackEvents"
            ],
            "Resource": "arn:aws:cloudformation:ap-northeast-1:ID:stack/NAME/*"
        }
    ]
}

ではでは\\٩( 'ω' )و //