💻

WSL2+VSCodeで作るCloudFormation開発環境

2024/02/09に公開

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

キーワード:

  • Windows
  • WSL2 (Windows Subsystem for Linux 2)
  • Ubuntu
  • VSCode (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を起動します[1]。初回起動時は、セットアップに数分掛かります

    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に追記します。VSCodeのターミナルは、デフォルトではログインシェルとして起動しない(~/.profileを読み込まない)ので、VSCodeのターミナルでもプロキシ設定を適用するには環境変数を~/.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";

VSCodeにWSL拡張機能をインストールする

VSCodeにWSL拡張機能をインストールします。

インストール後、WSLでVSCodeを使用するには、Ubuntuでcode .と実行します。他にも、VSCodeのコマンドパレットや左下のリモート接続ボタンなどからもWSLに接続できます。

参考:

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

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

Ubuntuでcfn-lintをインストールします[2]

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

参考:

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

VSCodeにcfn-lint拡張機能をインストールする

VSCodeにcfn-lint拡張機能をインストールします。

インストール後、WSLに接続したVSCodeでCloudFormationテンプレートを開くと、自動的に内容がチェックされ、エラーなどがあれば画面に表示されます。

(オプション) VSCodeに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/

(オプション) VSCodeでAIコードジェネレーター「CodeWhisperer」を使用する

VSCodeにAWS Toolkit拡張機能をインストールすることで、AIコードジェネレーター「CodeWhisperer」を利用できます。

2023年11月に、CodeWhispererのIaC対応が発表されました

AWS Toolkitには、他にも以下の機能が含まれています:

  • Amazon Q:対話型AIです
  • Application Composer:GUIでリソースを並べてCloudFormationテンプレートが作成できます
  • CodeCatalyst:CodeCatalystのDev Environments(開発環境)にVSCodeからリモート接続できます

おまけ: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

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

脚注
  1. Windowsのスタートメニューなどから探して起動してください ↩︎

  2. "Ubuntu版の pip コマンドを使用する場合、非特権ユーザが pip install を実行すると、ホームディレクトリの ~/.local ディレクトリにインストールされます。" - pip: Python環境構築ガイド - python.jp ↩︎

  3. 再起動することで環境変数PATHが再設定され直ることを期待しています ↩︎

  4. おそらく$HOME/.local/bin/ ↩︎

Discussion