【環境構築編】プロフィールサイトAWS移行メモ 〜インフラ初心者を添えて〜
はじめに
この記事では、前回の構成編に引き続き、プロフィールサイトAWS移行の環境構築を行っていきたいと思います。
今回の記事からいよいよCDKの導入を行い、本格的にIaCのコードを実装していきます。
まだ前回の記事を見ていない方は、ぜひ以下のリンクよりご覧ください。
【構成編】プロフィールサイトAWS移行メモ 〜インフラ初心者を添えて〜
No description available.
miyazaki-profile.com

IaC とは
IaC(Infrastructure as Code)とは、手動ではなく、コードによってインフラストラクチャの管理やプロビジョニングを行うプロセスのことです。
その中でも今回は「宣言的」なアプローチに焦点をあてます。
宣言的アプローチでは「リソースのあるべき状態(desired state)」をコードで定義します。この時、リソースを作成するための具体的な手順を書かないことがポイントです。
コードをIaCツールに渡すと、現在のリソースの状態を「あるべき状態」にするためにAPIを呼び出します。
例えば、S3バケットが存在しなかったら作成、存在していても設定が異なっていれば変更、すでにあるべき状態になっていれば何もしない、などです。
これにより結果として、リソースは「あるべき状態」に収束します。
▼ 宣言的アプローチのメリット
- 安全性:同じコードを何度適用しても同じ状態に落ち着く(冪等・差分適用)。
- 再現性とレビュー:コードを Git 管理でき、レビュー(PR)やロールバックがしやすい。
- 継続的デリバリーに適合:差分が明確で、自動化パイプラインに組み込みやすい。
AWS CDK とは?
では、上記を踏まえて AWS CDK とは何なのかについてざっくり解説したいと思います。
AWS Cloud Development Kit (AWS CDK)は、TypeScript, JavaScript, Pythonなどのプログラミング言語を使用してインフラのリソースをコードで管理できるようにする仕組みのことで、IaC のうちの一つです。
インフラをコード化する技術・手段としては、CDKの他にもTerraformなどが挙げられます。
Terraformは1つのプロバイダー(AWS, GCP, Azure等)に依存することなく、他のプロバイダーのクラウドインフラを扱える点ではメリットがありますが、CDKはAWS環境において最適化されているので、AWSを扱う場合はCDKを用いるのが良いと言えます。
前提
以降を進めるにあたり、いくつかの前提条件があります。
- お使いのPCに Docker Desktop がインストールされていること
- AWSアカウントを作成済みであること(以下を参考に作成)
簡単5ステップ!AWSアカウント作成の手順 | AWS公式
日本のお客様にAWSアカウント作成の手順をステップバイステップでご紹介します。アカウントを作成すると、Amazon EC2やAmazon S3をはじめとした 100以上のAWS製品を無料でお試しいただけます。また、AWSの世界中のリージョンで提供されるすべてのサービスを始めることができます。
aws.amazon.com

AIMを作成する
まずは、AWSのベストプラクティスに則ってプロフィールサイト用のIAMを作成していきます。
IAMユーザーの作成
- AWS アカウントにサインインします。
- AWS IAM コンソールに移動し、新しいユーザーを作成します。
- ユーザーの名前(例:
cdk-workshop
)を入力し、次へ進みます。 - 許可の設定で「ポリシーを直接アタッチする」を選択し、AdministratorAccessを選択します。(※本来であれば最小権限の原則に従って厳密に設定することが推奨されますが、今回は許容します。)
- 確認画面で内容に問題がなければ、IAMユーザーを作成します。
作成したIAMユーザーのアクセスキーを取得
- IAM コンソールにて作成されたユーザーを選択し、「セキュリティ認証情報」タブを開きます。
- 「アクセスキーを作成」を選択。
- ユースケースの選択にて「コマンドラインインターフェース(CLI)」を選択。下部の確認ボックスを選択し、次へ。
- 説明タグの設定画面になります。これはオプションなので設定しなくてもアクセスキーは発行できますが、棚卸しを楽にするためにつけておくことを推奨します。
- 「アクセスキーを作成」を押すと、アクセスキーとシークレットアクセスキーが表示されます。csvファイルをダウンロードできるのはこの画面でのみなので、必要であれば必ずダウンロードします。
- 確認が完了したら「完了」を押します。
[初心者向け] IAMユーザーにアクセスキーを払い出す手順を確認してみた | DevelopersIO
IAMユーザー発行時にアクセスキーを作成するオプションが消えていたので、発行手順を確認してみました。取り扱いはご安全に!
dev.classmethod.jp

ローカル環境を構築する
IaCを実現するために「AWS CLI」と「CDK」をインストールしていきます。
私にはローカル環境をなるべく汚したくないという面倒くさいこだわりがあるため、Dockerを利用してローカル環境を構築しました。
以下にコードを記載しますので、参考にしていただけますと幸いです。なお、インストールコマンドなどは下記の公式インストール手順を参考にしています。
AWS CLI の最新バージョンのインストールまたは更新 - AWS Command Line Interface
システムに AWS CLI をインストールまたは更新する手順。
docs.aws.amazon.com

docker関連ファイルの作成
以下の2ファイルを作成します。
version: "3.9"
services:
my_profile-infra:
build:
context: .
dockerfile: Dockerfile
container_name: aws-cdk
volumes:
- ./:/app
tty: true
stdin_open: true
working_dir: /app
# Node.js v20(Debianベース、Linux x86用)
FROM node:20
# 作業ディレクトリ
WORKDIR /app
# 必要最低限のツールのみインストール
# - curl: AWS CLIのZIPをダウンロード
# - unzip: ZIPを展開
# - ca-certificates: HTTPS通信に必要
RUN apt-get update && apt-get install -y --no-install-recommends \
curl unzip ca-certificates \
&& rm -rf /var/lib/apt/lists/*
# AWS CLI v2(Linux x86_64用)を公式手順でインストール
# コンテナのアーキに合わせて AWS CLI を入れる(マルチアーキ対応)
# ARMコンテナなら aarch64 用、x86コンテナなら x86_64 用を落とす。
ARG TARGETARCH
RUN set -eux; \
if [ "$TARGETARCH" = "amd64" ]; then ARCH="x86_64"; \
elif [ "$TARGETARCH" = "arm64" ]; then ARCH="aarch64"; \
else echo "Unsupported arch: $TARGETARCH" && exit 1; fi; \
curl -fsSL "https://awscli.amazonaws.com/awscli-exe-linux-${ARCH}.zip" -o "awscliv2.zip"; \
unzip -q awscliv2.zip; \
./aws/install; \
rm -rf aws awscliv2.zip
# AWS CDK CLI と TypeScript開発に必要なツールをインストール
RUN npm install -g aws-cdk typescript ts-node
# 対話作業用
CMD ["/bin/bash"]
dockerコンテナの立ち上げ
では、コンテナを立ち上げていきましょう。
上記のdockerファイルを作成できたら、以下のコマンドを実行します。
$ docker compose build --no-cache
$ docker compose up -d
動作確認
実際にインストールが正常にできているか、確認します。
まず、以下のコマンドでコンテナの中に入ります。
$ docker compose exec -it my_profile-infra /bin/bash
そして、AWS CLI がインストールされていることを確認します。
(バージョン等は異なっていても問題ありません。)
$ which aws
/usr/local/bin/aws
$ aws --version
aws-cli/2.28.9 Python/3.13.4 Linux/6.10.14-linuxkit exe/aarch64.debian.12
CDK についても同様に確認します。
$ cdk --version
2.1025.0 (build 409f8e7)
初期設定
無事にインストール完了したら、初期設定を行っていきます。
ここで、上記で作成したIAMユーザーの以下の情報が必要になります。
- Access Key ID
- Secret Access Key
以下のコマンドを実行し、情報を入力していきます。
Default region Name
と Default output format
は任意のもので問題ありませんが、基本的には下記の設定で問題ないかと思います。
$ aws configure
AWS Access Key ID [None]: アクセスキー
AWS Secret Access Key [None]: アクセスキーのシークレット
Default region name [None]: ap-northeast-1
Default output format [None]: json
CDK プロジェクトの作成
ここまでの環境構築が完了したところで、続いてCDKのプロジェクトを作成していきます。
言語は、TypeScriptを用いて行っていきます。
CDKの開発自体、TypeScriptで行われていることもあり、CDKのドキュメントや技術記事等もTypeScriptで解説されているものが多いのでおすすめです。
システム上に空のディレクトリを作成します。
$ mkdir My_profile-cdk && cd My_profile-cdk
cdk init
を使用して、新しい TypeScript CDK プロジェクトを作成します。
git がインストールされていない場合、Git リポジトリの初期化に関する警告が表示されますが、無視しても問題ありません。
$ cdk init sample-app --language typescript
プロジェクトディレクトリを見てみる
生成されたファイルやディレクトリ構造は、以下の画像のようになっていると思います。
.png)
それぞれの役割について、簡単に説明します。
lib/cdk-workshop-stack.ts
:CDK アプリケーションのメインスタックが定義されている場所です。 ここで最も時間を費やすことになります。bin/cdk-workshop.ts
:CDK アプリケーションのエントリーポイントです。lib/cdk-workshop-stack.ts
で定義されたスタックを読み込みます。package.json
;npm モジュールマニフェストです。アプリケーション名、バージョン、依存関係、「watch」や「build」などのビルドスクリプトが含まれます。cdk.json
:アプリケーションの実行方法を AWS CDK Toolkit に指示します。この場合、"npx ts-node bin/cdk-workshop.ts"
になります。tsconfig.json
:プロジェクトの TypeScript 設定 です。.gitignore
と.npmignore
:ソース管理やこのモジュールをパッケージマネージャに公開する際に、git と npm が除外する/含めるファイルを指示します。node_modules
:npm によって管理され、プロジェクトのすべての依存関係が含まれます。
まとめ
いかがでしたでしょうか。
ここまでが、AWS CDKの環境構築になります。
次回の記事から、本格的にCDKのコードを実装していきます。
気になる方は、以降の記事もぜひご覧ください!
参考
【入門】AWS CDK (TypeScript) 開発環境構築
エンジニアとして日頃の気づきやアウトプットを投稿しているブログです。
koutaroinoue-log.com
Workshop Studio
Discover and participate in AWS workshops and GameDays
catalog.us-east-1.prod.workshops.aws
