はじめに
WSL2のUbuntuディストリビューション上に、AWS CDK v2の実行環境を構築する手順をまとめます。
すでに山ほどあるだろうと思ってググったのですが、断片的な情報が多い/余計な情報が付加されているものが多いので、自分用にまとめました。
環境
環境構築に用いたディストリビューションは下記のとおりです。
- WSL2
- Ubuntu 22.04.2 LTS
本稿の手順でWSL2 Ubuntu上にインストールされるもの、およびインストールされるバージョン(2023/6/24現在)は以下のとおりです。
Node.jsはOSに直接インストールするのではなく、nvmを利用してインストールします。
- AWS CLI v2 2.12.3
- Node環境
- nvm v0.39.3
- node.js v18.16.1
- AWS CDK 2.85.0 (build 4e0d726)
本稿の手順は、実際にAWSアカウントにCDKのサンプルをデプロイします。
AWS環境は下記のとおりです。
- AWS環境
- AWS AccountID: 123456789012
- 利用したリージョン: us-west-2
- AWS CLIプロファイル名: yourprofile
作業手順(概要)
作業ステップは下記のとおりです。
なお環境構築完了後、CDKのサンプルをデプロイし、意図したとおりに動くことを確認します。
- WSL2(Ubuntu)の初期化
- AWS CDK v2環境の構築(各ツールのインストール)
2-1. AWS CLI v2のインストール
2-2. Node環境構築
2-2-1. nvmのインストール
2-2-2. node.jsのインストール
2-3. AWS CDKのインストール - 動作確認
3-1. cdk bootstrapの実行
3-2. AWS CDKのサンプルを取得
3-3. 適当なサンプルをデプロイ
作業手順(詳細)
1. WSL2(Ubuntu)の初期化
Ubuntuディストリビューション環境が汚れている場合は、必要に応じてアンインストール/再インストールします。
再インストール手順は以下を参照してください。
2. AWS CDK v2環境の構築(各ツールのインストール)
2-1. AWS CLI v2のインストール
まずは以下の公式ドキュメントに従い、AWS CLI v2をインストールします。
unzipコマンドがおそらくインストールされていないので、インストールします。
$ sudo apt install unzip
ドキュメント通りに実行し、AWS CLI v2をインストールします。
$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
$ unzip awscliv2.zip
$ sudo ./aws/install
インストール直後はパスが通っていないので、シェルを新しく実行しなおします。
その後、バージョンを確認します。
# シェルの実行しなおし
$ exec bash
# バージョン確認
$ aws --version
aws-cli/2.12.3 Python/3.11.4 Linux/5.15.90.1-microsoft-standard-WSL2 exe/x86_64.ubuntu.22 prompt/off
インストール後、必要に応じてAWS CLIのプロファイルを設定しておきます。
本稿では、 yourprofile
という名称で設定します。
$ aws configure --profile yourprofile
AWS Access Key ID [None]: ****************
AWS Secret Access Key [None]: ****************
Default region name [None]: us-west-2
Default output format [None]: json
2-2. Node環境構築
2-2-1. nvmのインストール
Node環境のバージョン切り替え、作り直しが容易になるよう、nvmをインストールします。
下記、インストール手順に従いインストールします。
$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
$ wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
インストール後、nvmのバージョンを確認します。
# シェルの実行しなおし
$ exec bash
# バージョン確認
$ nvm --version
0.39.3
2-2-2. node.jsのインストール
nvmから、Node.jsの最新のLTSを確認します。
$ nvm ls-remote --lts
※途中省略
v16.20.0 (LTS: Gallium)
v16.20.1 (Latest LTS: Gallium)
v18.12.0 (LTS: Hydrogen)
v18.12.1 (LTS: Hydrogen)
v18.13.0 (LTS: Hydrogen)
v18.14.0 (LTS: Hydrogen)
v18.14.1 (LTS: Hydrogen)
v18.14.2 (LTS: Hydrogen)
v18.15.0 (LTS: Hydrogen)
v18.16.0 (LTS: Hydrogen)
v18.16.1 (Latest LTS: Hydrogen)
本稿時点ではv18.16.1が最新なのでこれをインストールします。
nvm install v18.16.1
Node.jsがインストールされていることを確認します。
$ node -v
v18.16.1
$ npm -v
9.5.1
2-3. AWS CDKのインストール
下記、Get Started with AWS CDKに従い、AWS CDKをインストールします。
https://aws.amazon.com/jp/getting-started/guides/setup-cdk/module-one/
https://aws.amazon.com/jp/getting-started/guides/setup-cdk/module-two/
まず、TypeScriptをインストールします。
$ npm install -g typescript
その後、CDKをインストールします。
$ npm install -g aws-cdk
CDKのインストール後、バージョンを確認します。
$ cdk --version
2.85.0 (build 4e0d726)
3. 動作確認
3-1. cdk bootstrapの実行
AWS環境上にデプロイするため、cdk bootstrapを実行します。
まず、AWS CLIに設定したプロファイルが有効であることを確認します。
aws sts get-caller-identityが成功すればOKです。
$ aws --profile yourprofile sts get-caller-identity
{
"UserId": "AROA***************:botocore-session-1687608871",
"Account": "123456789012",
"Arn": "arn:aws:sts::123456789012:assumed-role/OrganizationAccountAccessRole/botocore-session-1687608871"
}
cdk bootstrapを実行します。 --profile
オプションの指定を忘れないように。
$ cdk --profile yourprofile bootstrap aws://123456789012/us-west-2
? Bootstrapping environment aws://123456789012/us-west-2...
Trusted accounts for deployment: (none)
Trusted accounts for lookup: (none)
Using default execution policy of 'arn:aws:iam::aws:policy/AdministratorAccess'. Pass '--cloudformation-execution-policies' to customize.
CDKToolkit: creating CloudFormation changeset...
? Environment aws://123456789012/us-west-2 bootstrapped.
3-2. AWS CDKのサンプルを取得
AWSが公式で公開しているCDKのサンプルを用います。
まず、WSL(Ubuntu)上で、上記リポジトリをcloneします。
$ cd ~/
$ git clone https://github.com/aws-samples/aws-cdk-examples.git
3-3. 適当なサンプルをデプロイ
何をデプロイしてもよいですが、ここでは規模が小さい typescript/lambda-cron
をデプロイしてみます。
まず、対象ディレクトリに移動します。
$ cd ~/aws-cdk-examples/typescript/lambda-cron/
npm install
で必要なnode moduleをインストールしたのち、 npm run build
および cdk deploy
を実行します。
# 必要なnode moduleのインストール
$ npm install
# npm run buildの実行
$ npm run build
# デプロイ
$ cdk deploy
このサンプルは、「LambdaCronExample」という名称のStackを作ります、
デプロイ完了後、このStackが生成され、またStatusが CREATE_COMPLETE
となっていることを確認します。
$ aws --profile yourprofile cloudformation describe-stacks --query 'Stacks[?StackName==`LambdaCronExample`]'
[
{
"StackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/LambdaCronExample/6ddf4cdb-ca3f-9712-f4f3-e7674e3470a2",
"StackName": "LambdaCronExample",
"ChangeSetId": "arn:aws:cloudformation:us-west-2:123456789012:changeSet/cdk-deploy-change-set/03af9f30-872b-3fa4-e158-947d34daaab1",
"Parameters": [
{
"ParameterKey": "BootstrapVersion",
"ParameterValue": "/cdk-bootstrap/hnb659fds/version",
"ResolvedValue": "18"
}
],
"CreationTime": "2023-06-24T13:48:16.177000+00:00",
"LastUpdatedTime": "2023-06-24T13:48:23.238000+00:00",
"RollbackConfiguration": {},
"StackStatus": "CREATE_COMPLETE",
"DisableRollback": false,
"NotificationARNs": [],
"Capabilities": [
"CAPABILITY_IAM",
"CAPABILITY_NAMED_IAM",
"CAPABILITY_AUTO_EXPAND"
],
"RoleARN": "arn:aws:iam::123456789012:role/cdk-hnb659fds-cfn-exec-role-123456789012-us-west-2",
"Tags": [],
"DriftInformation": {
"StackDriftStatus": "NOT_CHECKED"
}
}
]
おわりに
本稿の手順をそのままなぞるだけで、きちんと動く環境ができると思います。
なお環境構築手順は、環境構築するところで終わらせるのではなく、何らかのサンプルを実行したりデプロイしたりするところまで確認できるものがベターです。
本稿もそこまでの手順を記載しています。