cdk deploy でdockerが必要になることがあります。(少なくともlambdaのpythonランタイムのデプロイでは必要だった)
CircleCIで要dockerのcdk deployを実現しようとしてハマったので方法を共有します。
Executor Type
Executor Typeはmachineを選択します。
私は既存のデプロイ環境を元にExecutor Typeをdockerとして、実現方法を探し始めました。
以下の2つのアプローチをしましたが、どちらも中々うまく行かず断念しました。
ダメ1
- Executor Typeは
docker - setup_remote_dockerを使う
- AmazonLinuxベースのdockerを実行環境として、Docker in Docker(以下dind)できるようにしてトライ。
だめな理由
setup_remote_dockerを使って立ち上がるdockerに、ディレクトリのマウントが出来ないことに起因するcdk deployの失敗。(たぶん)
ダメ2
- ダメ1を元に、ディレクトリのマウントも自由にできるという ECRにdocker:dindベースのイメージを作りそれをexecutorとする方法。
だめな理由
- このイメージを実行する時に
--privilegedしないと、dindが実現できないと思われる - しかし
--previledgedを指定してコンテナ(CircleCIの実行環境)を起動する方法がわからなくてCircleCI上でdind出来なかった
具体的な実現方法
実際はもっと複雑ですが、要素だけ抜き出すとこんなconfig.ymlで実現できました。
version: 2.1
orbs:
# cdkの実行に必要
node: circleci/node@5.0.1
jobs:
deploy:
machine:
image: ubuntu-2004:current
steps:
- checkout
- node/install:
install-yarn: true
node-version: '16.13'
# docker使えるか確認
- run: docker info
- run: npm ci && cdk deploy
orbがあるので無理にカスタムdockerイメージを使う必要性がだいぶ少なくなっているのかもしれません。
まとめ
そもそもmachineで調べ始めたらこんな苦労はなかったんだな ![]()