ファーストビュー画像
ヘッダーロゴ
ホームアイコン
>
>
TerraformでAWSリソース作成環境を構築する(aws-vault, Docker Compose)
インフラ

TerraformでAWSリソース作成環境を構築する(aws-vault, Docker Compose)

作成日2024/08/05
更新日2024/08/07
アイキャッチ
# AWS
# Terraform

今回はTerraformでAWSリソースが作成できる環境をaws-vault, Docker Composeを使って構築していきます。

AWSアカウントを作成済みであること、Docker Composeをインストール済みであることを前提とします。

IAMユーザー作成

IAM → Users → Create Userをクリックします。

任意の名前を入力して、Nextをクリックします。

Attach plicies directlyを選択してAdministratorAccessにチェックを付けNextをクリックします。

必要に応じてタグを追加し、Create userをクリックしてユーザーを作成します。 

作成したユーザーの詳細画面に移動し、Security credentials(セキュリティ認証情報)→Access keysのCreate access keyをクリックします。

Command Line Interface (CLI)を選択、Confirmationにチェックをして、Nextをクリックします。

必要に応じてDescription tag value(説明タグ)を追加して、アクセスキーを作成します。

アクセスキー、シークレットアクセスキーが発行されるので、csvファイルをダウンロードするか、値を控えておきます。

最後にMulti-factor authentication (MFA)から、Google Authenticatorなどで2段階認証の設定を追加して完了です。

aws-vaultのインストール

aws-vaultとは

aws-vaultとはAWSのアクセスキー、シークレットキーをOSのパスワード管理システムに保管して利用することができるツールです。
macOSの場合はデフォルトではKeychainに保管するようになっています。
https://github.com/99designs/aws-vault

インストール

macOSでhomebrewを使っている場合、以下のコマンドでインストールを行います。

brew install --cask aws-vault

認証情報を設定する

先ほど作成したIAMユーザーの認証情報を登録します。

ターミナルから以下のコマンドでユーザーを追加します。
控えておいたアクセスキー、シークレットアクセスキーを求められるので入力します。

$ aws-vault add terraform-test
Enter Access Key ID: XXXXXXXXXXXXXXXXXXX
Enter Secret Access Key: ****************************************

MFA(2段階認証)を設定する

~/.aws/configprofileに追記をすることでMFA(2段階認証)の設定を行います。

viコマンドで~/.aws/configの中身を確認します。

vi ~/.aws/config

先ほど追加したterraform-testというprofileが追加されています。

[default]
region=ap-northeast-1
output=json

[profile terraform-test]

iキーを押してインサートモードに切り替え、以下のように編集後、esc + :wqで保存します。
mfa_serialの箇所はMFA(2段階認証)のIdentifierの値を設定します。

[default]
region=ap-northeast-1
output=json

[profile terraform-test]
region=ap-northeast-1
output=json
mfa_serial=arn:aws:iam::xxxxxxxxxxxx:mfa/aws-iam-terraform-test

接続確認

execコマンドを使って登録した認証情報に接続できるか確認します。

$ aws-vault exec terraform-test

Macの場合Keychain(キーチェーン)のパスワードを求められるので入力します。
その後、2段階認証のコードの入力を行います。

$ aws-vault exec terraform-test                                                                 
Enter MFA code for arn:aws:iam::146401978774:mfa/terraform-test: 

入力が完了したら以下のように接続が完了します。

Starting subshell /bin/zsh, use `exit` to exit the subshell

Docker Composeで環境構築

compose.yamlファイルの作成

任意のフォルダに以下の内容でcompose.yamlファイルを作成します。

services:
  terraform:
    image: hashicorp/terraform:1.9.3
    volumes:
      - .:/terraform
    working_dir: /terraform
    environment:
      - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}
      - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}
      - AWS_SESSION_TOKEN=${AWS_SESSION_TOKEN}

imagehashicorp/terraform:1.9.3を使用しています。

environmentの環境変数にはaws-vault exec を実行時に値が設定されます。

動作確認

compose.yamlファイルと同じ階層にmain.tfファイルを作成します。
Terraform公式のaws providerのドキュメントを参考にプロバイダーの設定・VPC作成の設定を行います。

terraform {
  required_version = "1.9.3"

  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
  }
}

# Configure the AWS Provider
provider "aws" {
  region = "ap-northeast-1"
}

# Create a VPC
resource "aws_vpc" "example" {
  cidr_block = "10.0.0.0/16"
}

Terraformの初期化を行います。

docker compose run --rm terraform init

以下のような出力がされ、.terraformフォルダ、.terraform.lock.hclファイルが作成されると初期化は完了です。

Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.

次にterraform planを実行し、作成予定のリソースを確認します。

docker compose run --rm terraform plan

実行結果からVPCが作成予定であることが確認できます。

  # aws_vpc.example will be created
  + resource "aws_vpc" "example" {
      + arn                                  = (known after apply)
      + cidr_block                           = "10.0.0.0/16"
      + default_network_acl_id               = (known after apply)
      + default_route_table_id               = (known after apply)
      + default_security_group_id            = (known after apply)
      + dhcp_options_id                      = (known after apply)
      + enable_dns_hostnames                 = (known after apply)
      + enable_dns_support                   = true
      + enable_network_address_usage_metrics = (known after apply)
      + id                                   = (known after apply)
      + instance_tenancy                     = "default"
      + ipv6_association_id                  = (known after apply)
      + ipv6_cidr_block                      = (known after apply)
      + ipv6_cidr_block_network_border_group = (known after apply)
      + main_route_table_id                  = (known after apply)
      + owner_id                             = (known after apply)
      + tags_all                             = (known after apply)
    }

Plan: 1 to add, 0 to change, 0 to destroy.

terraform applyを実行して変更を反映させます。
Enter a value: と表示されるのでyesと入力します。

以下の出力がされたら作成は完了です。

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

コンソールからVCPが新規で作成されたことが確認できます。

最後にterraform destroyVPCを削除します。

docker compose run --rm terraform destroy

以下の出力がされたら削除は完了です。

Destroy complete! Resources: 1 destroyed.

これでTerraform実行環境の構築・動作確認は完了です。
次回はtfstateファイルをs3で管理する手順について解説します。

参考
https://zenn.dev/himekoh/books/202210261312
https://zenn.dev/ryoh/articles/1f7edb4dc6b6b5
https://github.com/99designs/aws-vault

share on
xアイコンfacebookアイコンlineアイコン