こんにちは、soraです。
今回は、WindowsPCでWSL2を有効化してCDKとTerraformが使えるようにしてみたことについて書いていきます。
想定より少し面倒だったので、どなたかの参考になれば幸いです。
WSL2有効化+Ubuntuインストール
Linux上で操作したほうが勝手が良いため、WSL2を有効化してUbuntuをインストールします。
インストール方法などは、以下のページにわかりやすくまとめられています。
以降はインストールしたUbuntu上でコマンドを実行していきます。
tfenvのインストール
Terraformをインストールします。
Terraformを使わない方は、スキップしていただいても問題ありません。
# Terraformのバージョン管理ツール「tfenv」のインストール
$ sudo apt update && sudo apt upgrade
$ git clone https://github.com/tfutils/tfenv.git ~/.tfenv
$ echo 'export PATH="$HOME/.tfenv/bin:$PATH"' >> ~/.bash_profile
$ source ~/.bash_profile
# tfenvのバージョン確認
$ tfenv --version
tfenv 3.0.0-18-g1ccfddb
# インストール可能なTerraformのバージョン確認
$ tfenv list-remote
1.4.0-beta1
1.4.0-alpha20221207
1.4.0-alpha20221109
1.3.8
……
0.1.0
# Terraformのインストール
$ tfenv install 1.3.8
# ※zipが入っていなくてエラーになったため、zipのインストール
$ sudo apt-get install zip
# 改めてTerraformのインストール
$ tfenv install 1.3.8
# 使用するTerraformのバージョンを指定
$ tfenv use 1.3.8
AWS CLIのインストール
AWS CDKを使うために必要なAWS CLIをインストールします。
# AWS CLIのインストール
$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
$ unzip awscliv2.zip
$ sudo ./aws/install
# AWS CLIのバージョン確認
$ aws --version
aws-cli/2.9.23 Python/3.9.11 Linux/5.10.16.3-microsoft-standard-WSL2 exe/x86_64.ubuntu.22 prompt/off
Node.jsのインストール
AWS CDKを使うために必要なNode.jsをインストールします。
普通にaptでインストールすると、Node.jsのバージョンが古かったり、nodeコマンドでなくnodejsコマンドで登録されたりするらしいため、以下の参考ページに従ってNode.jsのバージョン管理ツール「n」を使ってインストールします。
参考:Ubuntuに最新のNode.jsを難なくインストールする
# Node.jsとnpmのインストール
$ sudo apt install -y nodejs npm
# Node.jsのバージョン管理ツール「n」のインストール
$ sudo npm install n -g
# バージョン管理ツール「n」を使って、nodeをインストール
$ sudo n stable
# 最初にインストールした古いnodejsとnpmの削除
$ sudo apt purge -y nodejs npm
# Node.jsのバージョン確認
$ node -v
v18.14.0
AWS CDKのインストール
いよいよAWS CDKをインストールします。
# AWS CDKのインストール
$ sudo npm install -g aws-cdk
# AWS CDKのバージョン確認
$ cdk --version
2.64.0 (build fb67c77)
AWS CDKの実行
AWS CDKを使うための準備が整ったため実行します。
AWSの認証情報について、aws configureで設定するとアクセスキーとシークレットアクセスキーが~\.aws\credentials
に平文で保存されます。これを避けるための暗号化については後述します。
またMFAを有効化している場合は、configファイルの修正が必要です。そちらも後述します。
# AWS認証情報の入力
$ aws configure
# CDK init
$ mkdir python-test
$ cd python-test
# 使用する言語に応じて、pythonの部分は書き換えてください。
$ cdk init app --language python
# Pythonを使う方向け
## 仮想環境を使うためにvenvのインストール
$ sudo sudo apt install python3-venv
## (参考)仮想環境を新しく作成してスイッチする場合
$ python3 -m venv <仮想環境名>
$ source <仮想環境名>/bin/activate
## 仮想環境へのスイッチ
$ source .env/bin/activate
## 必要なモジュールのインストール
(.env) $ pip install -r requirements.txt
# (参考)仮想環境を抜けるコマンド
(.env) $ deactivate
# CDKの実行
(.env) $ cdk synth
(.env) $ cdk bootstrap
(.env) $ cdk init
(.env) $ cdk diff
(.env) $ cdk deploy
(スイッチロールする方やMFA有効化している方向け)アクセスするプロファイルの指定
スイッチロールする場合やMFA有効化している場合は、AWSのconfigファイルにプロファイルを追記する必要があります。
configファイルは、これまで工程通りに進めていれば\\wsl.localhost\Ubuntu\home\"Ubuntuユーザ名"\.aws
にあると思います。
以下に記載するconfigファイルは、MFA有効化したユーザA(default)からスイッチ先のIAMロール(profile )にスイッチロールする場合のものです。
参考:【小ネタ】AWS CLIでスイッチロールして作業を行うための設定をやってみた
config
[default]
region=ap-northeast-1
output=json
[profile <プロファイル名>]
region=ap-northeast-1
mfa_serial=<スイッチ元のIAMユーザのMFA識別子(ARN)>
role_arn=<スイッチ先のIAMロールのARN>
source_profile=default
コマンド実行時のデフォルトのプロファイルを変更します。
ターミナルを立ち上げるたびに設定するのが面倒な方は、~/.bash_profile
に環境変数を書いてください。
$ export AWS_DEFAULT_PROFILE=<プロファイル名>
# 設定ファイルに書き込む場合
$ echo 'export AWS_DEFAULT_PROFILE=<プロファイル名>' >> ~/.bash_profile
$ source ~/.bash_profile
(TerraformでMFA有効化のユーザを使う方)鍵の暗号化
MFA有効化しているユーザを使用する場合、ここまでの設定だけではTerraformが使えません。
MFA有効化に対応するために必要な、AWSの認証情報をセキュアに保管するaws-vaultなどをインストールします。
ここでも環境変数を設定するため、ターミナルを立ち上げるたびに設定するのが面倒な方は、~/.bash_profile
に環境変数を書いてください。
参考:aws-vaultをLinux環境でも使う方法【セキュリティ向上】
# aws-vaultのインストール(バージョン部分は必要に応じて修正してください。)
$ curl -L https://github.com/99designs/aws-vault/releases/download/v6.6.2/aws-vault-linux-amd64 -o /usr/local/bin/aws-vault
$ chmod 755 /usr/local/bin/aws-vault
# aws-vaultのバージョン確認
$ aws-vault --version
v6.6.2
# 暗号化のためのpassとgnupgのインストール
$ sudo apt-get update && sudo apt-get install -y pass gnupg
# 鍵の生成
$ gpg --gen-key
# 鍵が生成されていることの確認
$ gpg --list-keys
-----------------------------
pub rsa3072 2023-02-14 [SC] [expires: 2025-02-13]
<キーID>
uid [ultimate] <鍵の生成時に入力した名前> <鍵の生成時に入力したメールアドレス>
sub rsa3072 2023-02-14 [E] [expires: 2025-02-13]
# passのセットアップ(キーIDは鍵が生成されていることの確認で表示されたもの)
$ pass init <キーID>
# 環境変数の設定(一時的な認証情報の有効期限など)
$ export AWS_VAULT_BACKEND=pass
$ export AWS_VAULT_PASS_PREFIX=aws-vault
$ export AWS_SESSION_TOKEN_TTL=3h
# クレデンシャルの登録(アクセスキーとシークレットアクセスキーの登録)
$ aws-vault add default
# 設定後の確認
$ aws-vault list
# aws-vaultで設定した鍵を使用して、コマンドを実行
$ aws-vault exec <プロファイル名> -- <コマンド>
# aws-vault execを実行してエラーになる場合、環境変数GPG_TTYを操作中のターミナルに設定する
$ export GPG_TTY=$(tty)
最後に
今回は、「WindowsPCでWSL2を有効化してCDKとTerraformが使えるようにしてみた」について紹介しました。
興味がある方はぜひお試しください。