VSCodeのDevContainersでAWS向けTerraform開発環境を構築

こんにちは！株式会社PROMPT-X 鹿児島本社の大原です。

今回は、Terraformの開発環境をVSCodeのDevContainersで構築する方法をご紹介します。

「チームで開発環境を統一したい」「新しいメンバーがすぐに開発を始められるようにしたい」といった悩みを持っている方に特におすすめのプラクティスです。

## 目次

- [概要](#概要)
- [ファイル群の準備](#ファイル群の準備)
  - [ディレクトリ構成](#ディレクトリ構成)
  - [各ファイルの作成](#各ファイルの作成)
- [まとめ](#まとめ)

## 概要

TerraformでAWSリソースを管理する開発環境を、VSCodeのDevContainersを使って構築します。DevContainersを使うことで、開発者間での環境差異を最小限に抑え、「自分の環境では動くのに...」といった問題を防ぐことができます。

今回紹介する環境は、**AWSを対象**としていますが、他のクラウドサービスにも応用可能です。その場合は、必要に応じて適切に編集してください。

## ファイル群の準備

### ディレクトリ構成

まずは、以下のディレクトリ構成でファイルを作成します。

```
.
└── .devcontainer
    ├── devcontainer.json
    ├── Dockerfile
    └── postCreateCommand.sh
```

### 各ファイルの作成

それでは、各ファイルを順番に作成していきましょう。

#### 1. devcontainer.json

まず、DevContainerの設定ファイルである`devcontainer.json`を作成します。

```json
{
    "name": "Terraform AWS",
    "build": {
        "dockerfile": "Dockerfile"
    },

    "containerEnv": {
        // AWS認証情報、Terraformバージョンをを適切に変更すること
        "AWS_ACCESS_KEY_ID": "changeIt",
        "AWS_SECRET_ACCESS_KEY": "changeIt",
        "AWS_DEFAULT_REGION": "ap-northeast-1",
        "TERRAFORM_VERSION": "1.6.5"
    },

    "customizations": {
        "vscode": {
            "extensions": [
                "hashicorp.terraform"
            ]
        }
    },

    // Use 'postCreateCommand' to run commands after the container is created.
    "postCreateCommand": "cd .devcontainer && /bin/bash -vx postCreateCommand.sh"
}
```

ここで注意すべき点：
- `AWS_ACCESS_KEY_ID`と`AWS_SECRET_ACCESS_KEY`は必ず変更してください！
- `AWS_DEFAULT_REGION`は適宜変更可能です
- `TERRAFORM_VERSION`は使用したいバージョンに合わせて変更してください

⚠️ **セキュリティ上の注意**: 実際の運用では、認証情報をコードにハードコーディングするのではなく、環境変数や認証情報管理サービスを使用することをお勧めします。

#### 2. Dockerfile

次に、コンテナイメージを定義する`Dockerfile`を作成します。

```Dockerfile
FROM mcr.microsoft.com/vscode/devcontainers/base:1.2.3-ubuntu24.04

RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" \
&& unzip awscliv2.zip \
&& ./aws/install \
&& rm -fr aws awscliv2.zip
```

このDockerfileでは:
- VSCodeのDevContainers用のUbuntu 24.04ベースイメージを使用
- AWS CLIをインストール（最新版）

必要に応じて、他のツールやライブラリも追加できます。

#### 3. postCreateCommand.sh

最後に、コンテナ作成後に実行されるスクリプト`postCreateCommand.sh`を作成します。

```bash
#!/bin/bash

git clone --depth=1 https://github.com/tfutils/tfenv.git ~/.tfenv \
&& echo 'export PATH="$HOME/.tfenv/bin:$PATH"' >> ~/.bashrc \
&& echo 'export PATH="$HOME/.tfenv/bin:$PATH"' >> ~/.bash_profile \
&& source ~/.bash_profile \
&& tfenv install ${TERRAFORM_VERSION} \
&& tfenv use ${TERRAFORM_VERSION} \
```

このスクリプトでは:
- tfenvをインストール
- パスを設定
- 指定したバージョンのTerraformをインストール

tfenvを使用することで、プロジェクトごとに異なるTerraformバージョンを簡単に切り替えられます。

## まとめ

これで、VSCodeのDevContainersを使ったAWS向けTerraform開発環境の構築が完了しました！

この環境を使うことで:
- チーム内での開発環境を統一できる
- 新しいメンバーが簡単に開発を始められる
- 「自分の環境では動くのに...」といった問題を防げる

さらに発展させるアイデア:
- AWS SAMやServerless Frameworkなど、他のAWSツールを追加
- テストフレームワークやlinterを導入
- CI/CDパイプラインと連携させる

皆さんの開発環境づくりの参考になれば幸いです。質問やご意見があれば、コメントでお気軽にどうぞ！👍

## おまけ

「え！こんなに簡単にTerraform環境が作れるの？」と思った方、私も最初は驚きました（笑）。この記事が誰かの助けになれば嬉しいです。「いいね」もらえたら、次の記事のモチベーションになります😊

## 私たちについて

PROMPT-Xは、東京・鹿児島・高知の3拠点で時系列データベースCLOUDSHIPと可視化ソフトRealBoardを軸としたIoT/DXプラットフォーム向けソフトウェアの開発・販売を行うソフトウェアメーカーです。
クラウド (主にAWSやGC) や、IoT関連の開発支援サービスやソリューションの受託開発サービスも提供しています。

現在、[鹿児島・高知での開発エンジニア採用](https://www.prompt-x.jp/recruit)を強化中です！カジュアル面談も随時お受けできますので、お気軽にご連絡ください。