【AWS CDK】Dev ContainerでAWS CDKの環境構築 on Windows

記事タイトルとURLをコピーする

エンタープライズクラウド部の松田です。こんにちは。

AWS CDKに入門してみました。
色々触ってみたので、備忘として記事にしておきます。

はじめに

本記事では環境構築の手順をまとめます。

構築後に色々動かしてみるのは別の記事としてまとめる予定ですが、本記事では触れませんのでご容赦ください。

開発環境の概要

今回作る環境ですが、物理はWindowsで、その上にWSL2でUbuntu、更にその上にコンテナ(ここがCDK開発環境!)という構成です。

各レイヤーでは以下をインストールしています。

Windows(11 22H2)

  • VS Code
  • VS Code 拡張機能
    • Remote Deployment
    • Dev Containers
  • WSL2

Ubuntu(22.04)

  • Docker

コンテナ(Debian 11 Bullseye)

  • AWS CLI
  • AWS CDK
  • Git
  • Python3.11
  • Node.js
  • TypreScript

環境構築手順

環境構築の手順を記載します。

環境構築(Windows)

VS Code

下記の公式ページからダウンロードし、ウィザードに従ってインストールします。

code.visualstudio.com

以下ブログは参考まで(「VSCodeのインストール」の項に詳しく載っています)。

blog.serverworks.co.jp

VS Code拡張機能(Remote Deployment)

VS Codeを起動し、拡張機能のアイコンをクリックして、検索窓から「Remote Deployment」を探します。
私の環境ではインストール済みなので表示されませんが、「Install」で拡張機能がインストールされます。

VS Code拡張機能(Dev Containers)

Remote Deploymentと同様に、検索窓から「Dev Container」を探してインストールします。

WSL2(Ubuntu 22.04)

Powershellを起動し、以下のコマンドを実行します。

wsl --install Ubuntu-22.04

参考までにブログを貼っておきます。Ubuntuのバージョンが違うため多少の差異はありますが、「手順2.WSL2インストール」の項をご参照ください。

blog.serverworks.co.jp

セットアップ確認

ここまででWindows上での準備は完了です。

WSL2のコマンドラインで以下を実行し、VS Codeが起動するか確認しておきます。

code .

VS Codeが起動し、左下部に「WSL: Ubuntu-22.04」と表示されていればOKです。

ちなみにGUIからでもUbuntu環境にリモート接続可能です。左下部のアイコンをクリックし、「Connect to WSL」で同じように接続できます。

うまくいかない場合は、以下ページなどを参考に頑張ります。ハマってしまってなんだかよく分からなくなってきたときは、WSL2でインストールしたUbuntuをアンインストールして、最初からもう一度試すなどするとよいです。

learn.microsoft.com

環境構築(Ubuntu)

Docker

先んじてパッケージの更新をします。

sudo apt-get update
sudo apt-get install ca-certificates curl gnupg

Dockerの公式GPGキーをダウンロードします。

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

Dockerのリポジトリを追加します。

echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Dockerをインストールします。

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

ユーザーをDockerグループに追加し、sudoなしで実行できるようにします。 ※設定が反映されない場合があるため、WSLを再起動すると確実です。

sudo usermod -aG docker $USER

セットアップ確認

Dockerのバージョンが表示されるか確認します。

docker --version

hello-world イメージををrunしてみます。Hello from Docker! と表示されればOKです。

docker run hello-world

動作を確認したら、hello-world は消しておきましょう。Conteiner IDは docker ps -a で確認できます。

docker rm [hello-worldのContainer ID]

環境構築(コンテナ)

Dev Containerを使ってコンテナを起動します。

Ubuntuに適当なディレクトリを作り、その中に devcontainer/devcontainer.json ファイルを作成します。

mkdir -p tmp/.devcontainer
touch tmp/.devcontainer/devcontainer.json

devcontainer.json の中身は以下としてください。

// For format details, see https://aka.ms/devcontainer.json. For config options, see the
// README at: https://github.com/devcontainers/templates/tree/main/src/typescript-node
{
    "name": "Node.js & TypeScript",
    // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
    "image": "mcr.microsoft.com/devcontainers/typescript-node:1-20-bullseye",
    "features": {
        "ghcr.io/devcontainers/features/aws-cli:1": {},
        "ghcr.io/devcontainers/features/docker-in-docker:2": {},
        "ghcr.io/devcontainers/features/git:1": {},
        "ghcr.io/devcontainers-contrib/features/aws-cdk:2": {},
        "ghcr.io/devcontainers/features/python:1": {
            "installTools": true,
            "version": "3.11"
        }
    }
}

VS Codeで適当に作ったディレクトリを開きます。
※後続の手順でコンテナのリビルドを行う際、VS Codeで開いたディレクトリの直下に .devcontainer が無いとエラーになります。

画像の様になっていればOKです。

コマンドパレット(Ctrl + Shift + P)で Dev Containers: Rebuild and Reopen in Container を実行します。これでコンテナが起動してきます。

左下部が「Dev Container: Node.js & TypeScript」となっていればOKです。コンテナにVS Codeでリモート接続している状態です。

必要な各ツールがインストールされていることを確認しておきます。

# AWS CLI
$ aws --version
aws-cli/2.13.25 Python/3.11.5 Linux/5.15.90.1-microsoft-standard-WSL2 exe/x86_64.ubuntu.22 prompt/off

# CDK
$ cdk --version
2.106.0 (build 0d1a333)

# Git
$ git --version
git version 2.42.1

# Node.js
$ node --version
v20.9.0

# TypeScript
$ tsc --version
Version 5.2.2

まとめ

環境構築は以上で完了です。
準備だけでこれか...と面倒に感じられるかもしれませんが、Dev Containerを使うと環境の作り直しや複製がとにかく容易になります。かけた手間に見合うメリットはありますので、初学者であっても積極的に使っていくとよいかなと思います。

環境構築だけで思ったより長くなってしまったので、本記事はここまでとなりますが、実際にCDKを使ってリソースを作ったりといった続編も執筆予定です。

ここまでお読みくださりありがとうございました。

松田 渓(記事一覧)

2021年10月入社。散歩が得意です。