💻

WSL2+VS Codeで作るCloudFormation開発環境

2024/02/09に公開

快適で効率的なCloudFormationテンプレート開発環境を作りましょう。

キーワード:

  • Windows
  • WSL2 (Windows Subsystem for Linux 2)
  • Ubuntu
  • VS Code (Visual Studio Code)
  • cfn-lint (CloudFormation Linter)

構築手順

(オプション) Windows Terminalをインストールする

設定豊富なタブ機能付きターミナルです。Microsoft Storeから入手できます。

WSL2をインストールする

  1. 管理者権限でPowerShellを起動し、wsl --installを実行します。これにより、既定のディストリビューションであるUbuntuがインストールされます

    PowerShell
    PS> wsl --install
    インストール中: 仮想マシン プラットフォーム
    仮想マシン プラットフォーム はインストールされました。
    インストール中: Linux 用 Windows サブシステム
    Linux 用 Windows サブシステム  はインストールされました。
    インストール中: Linux 用 Windows サブシステム
    Linux 用 Windows サブシステム  はインストールされました。
    インストール中: Ubuntu
    Ubuntu はインストールされました。
    要求された操作は正常に終了しました。変更を有効にするには、システムを再起動する必要があります。
    
  2. Windowsを再起動します

  3. Ubuntuを起動します。Windowsのスタートメニューなどから探して起動してください。初回起動時は、セットアップに数分掛かります

    Ubuntu
    Installing, this may take a few minutes...
    
  4. ユーザーの作成を求められたら、指示に従ってユーザー名とパスワードを入力します

    Ubuntu
    Please 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!
    

参考:

https://learn.microsoft.com/ja-jp/windows/wsl/install

(オプション) プロキシ設定をする

PCが会社のプロキシ下にある場合は、Ubuntuでプロキシ設定(環境変数とapt用の設定)をします。

環境変数は、~/.profile~/.bashrcに追記します。VS Codeのターミナルは、デフォルトではログインシェルとして起動しない(~/.profileを読み込まない)ため、VS Codeのターミナルでもプロキシ設定を適用するには環境変数を~/.bashrcに書くと楽です。

~/.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/内に以下を記述したファイルを設置します。

/etc/apt/apt.conf.d/00proxy
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」を選択します

参考:

https://learn.microsoft.com/ja-jp/windows/wsl/tutorials/wsl-vscode

cfn-lintをインストールする

Ubuntuでcfn-lintをインストールします。最近(pip 23.0以降らしい)はシステムに直接pip installしようとするとエラーが出るようになったため、代わりにpipxを使用します。

Ubuntu
sudo apt update && sudo apt upgrade -y
sudo apt install pipx -y
pipx install cfn-lint
以前の方法

以前は、以下のように案内していました。

Ubuntu
sudo apt update && sudo apt upgrade -y
sudo apt install python3-pip -y
pip install cfn-lint

しかし現在最新の環境では、この手順を実行すると以下のようなエラーが表示されるようになっています。

Ubuntu
$ 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が簡単とのことですので、これに従うことにしました。

参考:

https://github.com/aws-cloudformation/cfn-lint

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の設定に以下を追加する必要があります:

https://zenn.dev/dannykitadani/articles/6678819ad7a4db

(オプション) Rainをインストールする

CloudFormationまわりを便利にするCLIツール「Rain」の使用も検討してみるとよいと思います。aws cloudformation deployコマンドより便利なrain deployコマンドが使えたり、rain bulildでCloudFormationテンプレートを生成できたりします。

参考:

https://dev.classmethod.jp/articles/devio2021-cloudformation-rain/

(オプション) 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をインストールします。

Ubuntu
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install

参考:

https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-chap-getting-started.html

コマンド補完を有効にしたい場合は、~/.bashrcに以下を追記します。

~/.bashrc
complete -C '/usr/local/bin/aws_completer' aws

参考:

https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-configure-completion.html

おまけ:.aws.sshディレクトリをWSLとWindowsで共有する

AWS CLIやSSHをWindowsでもWSLでも使用する場合は、この設定をしておくと便利です:

https://dev.classmethod.jp/articles/windows-wsl-share-files/

おまけ:今いるGitブランチ名をプロンプトに表示する

Gitを利用する際は、作業中のブランチ名をプロンプト(user@host:~/repo$ の部分)に表示すると便利です。

例えば、(main)user@host:~/repo$ のように表示するには、~/.bashrcに以下を追記します。

~/.bashrc
PS1='$(__git_ps1 "(%s)")'$PS1

もっと凝った表示をしたい場合は、検索すると色々出て来ますので調べてみてください。

Discussion