WSL2+VS Codeで作るCloudFormation開発環境
快適で効率的なCloudFormationテンプレート開発環境を作りましょう。
キーワード:
- Windows
- WSL2 (Windows Subsystem for Linux 2)
- Ubuntu
- VS Code (Visual Studio Code)
- cfn-lint (CloudFormation Linter)
構築手順
(オプション) Windows Terminalをインストールする
設定豊富なタブ機能付きターミナルです。Microsoft Storeから入手できます。
WSL2をインストールする
-
管理者権限でPowerShellを起動し、
wsl --install
を実行します。これにより、既定のディストリビューションであるUbuntuがインストールされますPowerShellPS> wsl --install インストール中: 仮想マシン プラットフォーム 仮想マシン プラットフォーム はインストールされました。 インストール中: Linux 用 Windows サブシステム Linux 用 Windows サブシステム はインストールされました。 インストール中: Linux 用 Windows サブシステム Linux 用 Windows サブシステム はインストールされました。 インストール中: Ubuntu Ubuntu はインストールされました。 要求された操作は正常に終了しました。変更を有効にするには、システムを再起動する必要があります。
-
Windowsを再起動します
-
Ubuntuを起動します。Windowsのスタートメニューなどから探して起動してください。初回起動時は、セットアップに数分掛かります
UbuntuInstalling, this may take a few minutes...
-
ユーザーの作成を求められたら、指示に従ってユーザー名とパスワードを入力します
UbuntuPlease create a default UNIX user account. The username does not need to match your Windows username. For more information visit: https://aka.ms/wslusers Enter new UNIX username: ubuntu New password: Retype new password: passwd: password updated successfully Installation successful!
参考:
(オプション) プロキシ設定をする
PCが会社のプロキシ下にある場合は、Ubuntuでプロキシ設定(環境変数とapt用の設定)をします。
環境変数は、~/.profile
か~/.bashrc
に追記します。VS Codeのターミナルは、デフォルトではログインシェルとして起動しない(~/.profile
を読み込まない)ため、VS Codeのターミナルでもプロキシ設定を適用するには環境変数を~/.bashrc
に書くと楽です。
export http_proxy=http://proxy.example.com:8080
export https_proxy=http://proxy.example.com:8080
export no_proxy=example.com
export HTTP_PROXY=$http_proxy
export HTTPS_PROXY=$https_proxy
export NO_PROXY=$no_proxy
apt
用のプロキシ設定は、/etc/apt/apt.conf.d/
内に以下を記述したファイルを設置します。
Acquire::http::proxy "http://proxy.example.com:8080";
Acquire::https::proxy "http://proxy.example.com:8080";
VS CodeにWSL拡張機能をインストールする
VS CodeにRemote Development拡張機能パックをインストールします。
インストール後、VS CodeでWSLを開くには、以下のような方法が使用できます。
- Ubuntuのコマンドラインで
code .
と入力します - VS Codeのコマンドパレット(
Ctrl+Shift+P
)でwsl
と入力して、「Connect to WSL」を選択します
参考:
cfn-lintをインストールする
Ubuntuでcfn-lintをインストールします。最近(pip 23.0以降らしい)はシステムに直接pip install
しようとするとエラーが出るようになったため、代わりにpipx
を使用します。
sudo apt update && sudo apt upgrade -y
sudo apt install pipx -y
pipx install cfn-lint
以前の方法
以前は、以下のように案内していました。
sudo apt update && sudo apt upgrade -y
sudo apt install python3-pip -y
pip install cfn-lint
しかし現在最新の環境では、この手順を実行すると以下のようなエラーが表示されるようになっています。
$ pip install cfn-lint
error: externally-managed-environment
× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
python3-xyz, where xyz is the package you are trying to
install.
If you wish to install a non-Debian-packaged Python package,
create a virtual environment using python3 -m venv path/to/venv.
Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
sure you have python3-full installed.
If you wish to install a non-Debian packaged Python application,
it may be easiest to use pipx install xyz, which will manage a
virtual environment for you. Make sure you have pipx installed.
See /usr/share/doc/python3.12/README.venv for more information.
note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
hint: See PEP 668 for the detailed specification.
これによると、Pythonアプリケーション(ツール)をインストールするにはpipx
が簡単とのことですので、これに従うことにしました。
参考:
VS Codeにcfn-lint拡張機能をインストールする
VS Codeにcfn-lint拡張機能をインストールします。
インストール後、WSLに接続したVS CodeでCloudFormationテンプレートを開くと、自動的に内容がチェックされ、エラーなどがあれば画面に表示されます。
(オプション) VS CodeにCloudFormation拡張機能をインストールする
必要に応じて、CloudFormation拡張機能をインストールします。
この拡張機能はスニペットを含んでおり、以下のような機能があります:
- 空のYAMLファイルで
start
と入力してTabキーを押すと、テンプレートの雛形が自動入力される -
ec2-instance
と入力してTabキーを押すと、EC2インスタンスの雛形が自動入力される
なお、この拡張機能が依存しているYAML拡張機能は!Ref
などの関数の短縮表記をエラーとして検出してしまうため、これを回避するにはyaml.customTags
の設定に以下を追加する必要があります:
(オプション) Rainをインストールする
CloudFormationまわりを便利にするCLIツール「Rain」の使用も検討してみるとよいと思います。aws cloudformation deploy
コマンドより便利なrain deploy
コマンドが使えたり、rain bulild
でCloudFormationテンプレートを生成できたりします。
参考:
(オプション) VS CodeでAIコードジェネレーター「CodeWhisperer」を使用する
VS CodeにAWS Toolkit拡張機能をインストールすることで、AIコードジェネレーター「CodeWhisperer」を利用できます。
2023年11月に、CodeWhispererのIaC対応が発表されました。
AWS Toolkitには、他にも以下の機能が含まれています:
- Amazon Q:対話型AIです
- Application Composer:GUIでリソースを並べてCloudFormationテンプレートが作成できます
- CodeCatalyst:CodeCatalystのDev Environments(開発環境)にVS Codeからリモート接続できます
おまけ:AWS CLIをインストールする
必要な場合、AWS CLIをインストールします。
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
参考:
コマンド補完を有効にしたい場合は、~/.bashrc
に以下を追記します。
complete -C '/usr/local/bin/aws_completer' aws
参考:
.aws
や.ssh
ディレクトリをWSLとWindowsで共有する
おまけ:AWS CLIやSSHをWindowsでもWSLでも使用する場合は、この設定をしておくと便利です:
おまけ:今いるGitブランチ名をプロンプトに表示する
Gitを利用する際は、作業中のブランチ名をプロンプト(user@host:~/repo$
の部分)に表示すると便利です。
例えば、(main)user@host:~/repo$
のように表示するには、~/.bashrc
に以下を追記します。
PS1='$(__git_ps1 "(%s)")'$PS1
もっと凝った表示をしたい場合は、検索すると色々出て来ますので調べてみてください。
Discussion