手順
dockerとdocker-composeがインストールされている環境で、以下の通り準備および実行します。
0. ディレクトリ構成
aws-cdk
- Dockerfile
- docker-compose.yml
- docker-compose-run.sh
以下、aws-cdkディレクトリ内での作業となります。
1. Dockerfileを作成
Pythonの公式コンテナイメージを使って、AWS CDK入りのコンテナイメージを作成します。
必要なコマンドをDockerfileに書き連ねていきます。
インストールされるAWS CDKはPython3対応です。
# the latest Python
FROM python:latest
# install the latest nodejs & npm
RUN apt update \
&& apt install -y nodejs \
npm \
&& apt clean
# install the latest AWS CDK
RUN npm install -g aws-cdk \
&& pip3 install --upgrade aws-cdk.core
# install the latest AWSCLI
RUN pip3 install awscli --upgrade
2. docker-compose.ymlを作成
AWS CLIの認証情報を持つための、コンテナ側の環境変数を定義しておきます。
後にdocker-compose runを実行する時に、ホスト側の環境変数から渡すようにしています。
これは、不特定多数が使う可能性のあるコンテナイメージの構成情報と言えるdocker-compose.ymlそのものに、認証情報を埋め込まないための対策です。
version: '3'
services:
aws-cdk:
build:
context: ./
dockerfile: ./Dockerfile
image: aws-cdk
container_name: aws-cdk
tty: true
environment:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: ${AWS_DEFAULT_REGION}
AWS_DEFAULT_OUTPUT: ${AWS_DEFAULT_OUTPUT}
3. docker-compose buildを実行
docker-compose buildを実行すれば、コンテナイメージの出来上がりです。
$ docker-compose build
(結果は省略)
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
aws-cdk latest 6bf38dcfd3e6 27 minutes ago 1.16GB
python latest d6a7b0694364 2 weeks ago 932MB
4. docker-compose-run.shを作成
各自で払い出したAWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEYで<>ごと置き換えてください。
--rmはテスト用で入っていますが、お好みで外してください。
ここで指定したアクセスキーはdocker-compose runする時に渡されます。
#!/bin/bash
export AWS_ACCESS_KEY_ID=<各自のAWS_ACCESS_KEY_ID>
export AWS_SECRET_ACCESS_KEY=<各自のAWS_SECRET_ACCESS_KEY>
export AWS_DEFAULT_REGION=ap-northeast-1
export AWS_DEFAULT_OUTPUT=json
docker-compose run --rm aws-cdk /bin/bash
注: gitに上げないようにしましょう。
5. docker-compose-run.shを実行
4.で作っておいた.shを使ってコンテナを起動します。
$ ./docker-compose-run.sh
root@23c8612bfd7b:/# aws --version
aws-cli/1.16.272 Python/3.8.0 Linux/4.14.146-93.123.amzn1.x86_64 botocore/1.13.8
root@23c8612bfd7b:/# cdk --version
1.15.0 (build bdbe3aa)
簡単かつ少ない手順で、AWS CDKをコンテナで動かすことができました。