Docker上でAWS CDKを実行する方法
AWS CDKは、使い慣れたプログラミング言語を使ってAWSのクラウドリソースを定義できる、オープンソースのソフトウェア開発フレームワークです。
しかし、AWS CDKを利用する上で、Pythonなどの環境設定が面倒で、Pythonのバージョン、Node、AWS CLI、AWS CDKなど、両方を指定しなければならないのがややこしいところです。
CDKのバージョンアップが早いし、チームで作業する場合、全員が環境を同期させるのは大変なことなんです。
その際、全員の開発環境を統一するためにDockerを使用することをおすすめです。
Dockerを使用してAWS CDKを実行する方法について説明します。
1.Docker、AWS CLIをインストールする
CDKプロジェクトの初期化はコンテナ内で行えるので、NodeやAWS CDK関連のパッケージをローカルにインストールする必要はなく、最低限のDockerとAWS CLIがあればOKです。
brew install docker awscli
2.aws configureコマンドでAWS認証情報を設定する。
Dockerは実行時にローカルのAWS認証情報を共有する必要があるため、まずAWS認証を設定する必要があります。
aws configure
----
AWS Access Key ID [********************]: AWS Access Key IDを入力します。
AWS Secret Access Key [********************]: Secret Access Keyを入力します。
Default region []: AWSリージョンを記入します。
Default output format []: jsonを記入します。
3.Dockerfileを書く
最初はUbuntuのベースイメージを使って、NodeとPythonのバージョンを分けてインストールしていたのですが、調べてみたら誰かがすでにやっていた...
Dockerfile:
FROM nikolaik/python-nodejs:python3.9-nodejs14
RUN apt-get update && apt-get install -y curl unzip
RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
RUN unzip awscliv2.zip && ./aws/install
RUN npm install -g aws-cdk@2.20
4. Dockerイメージを作る
Dockerを実行する際に、ローカルのAWS認証情報を共有することで、AWS認証情報を再度手動で入力する必要がありません。
4.1 Build image
docker build -t aws-cdk-python-docker .
4.2 Docker run
docker run --rm -itd -v `pwd`:/app -v ${HOME}/.aws/credentials:/root/.aws/credentials:ro aws-cdk-python-docker
4.3 DockerコンテナIDを確認する
docker ps
4.4 Docker execコマンドでDockerコンテナの中に入る
docker exec -it <container-id> bash
5. Dockerコンテナ内でAWS CDKプロジェクトを初期化する
コンテナを入力するローカルディレクトリにファイルがない場合、CDKの初期化でエラーが発生しますのでご注意ください。
cdk init app --language=python
正常に実行されると、ローカルディレクトリにも初期化されたCDKファイルがあると思います。
この時点で、Dockerコンテナを一旦終了し、Dockerfileを少し修正します。
6. Dockerfileを編集する
Docker がイメージを作成する際に、必要なパッケージを自動的にインストールするように、Dockerfile を少し修正します。
FROM nikolaik/python-nodejs:python3.9-nodejs14
RUN apt-get update && apt-get install -y curl unzip
RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-aarch64.zip" -o "awscliv2.zip"
RUN unzip awscliv2.zip && ./aws/install
RUN npm install -g aws-cdk@latest
# 下記のコマンドを追加します。
COPY requirements.txt ./
RUN pip3 install -r requirements.txt
7. 再度イメージをビルドして、終わり
手順4のdocker buildコマンドを再度実行すると、依存関係が完全なDockerイメージをパッケージ化することができます。
以上
Discussion