【Terraform第1回】環境構築

【Terraform第1回】環境構築

Terraformに入門しました。以前Windows環境で少し操作したことがありましたが、あたらめてMacで環境を構築しつつ概念や動作を確認していきます。

主にハンズオンを通して確認していきます。

【参考URL】


【関連記事】


【コードはこちら】

GitHub

Terraformを運用することで得られること

以下の通りです。

  • インフラ構築時に手順書から解放される
  • ソフトウェア開発の手法をインフラ開発、運用に適用できる
  • 人手による職人的な構築・運用からコードによるオープンな構築・運用ができる
  • 空いたリソースをよりビジネスインパクトがある領域に投下できる

【参考URL】

MacにTerraformをインストール(ハンズオン)

環境

Mac Book Air M1

tfenv設定(ハンズオン)

tfenvとは

  • Terraformバージョン管理のためのツール
  • 複数のTerraformバージョンを簡単に切り替えることができる
  • 異なるバージョンのTerraformを複数のプロジェクトで使用でき、バージョンアップグレードに伴う問題を簡単に回避できる
  • tfenvは、インストール、バージョンの切り替え、バージョンの確認など、Terraformバージョンの管理に必要なすべての機能を提供
  • また、Terraformバージョンが必要な環境を構築するためのMakefile、Dockerfile、Vagrantfileなど、他のツールとの統合も可能

手順

1. tfenvインストール
2. 複数バージョンのTerraformをインストール

1. tfenvインストール

# Terraformをインストールするディレクトリに移動
$ pwd ~/<work-dir>

# Homebrewでtfenvをインストール
$ brew install tfenv

# インストール後に、バージョン確認
$ tfenv --version

# result
tfenv 3.0.0

2. 複数バージョンのTerraformをインストール

# インストール可能なバージョンのリストを確認
$ tfenv list-remote

# 最新(記事執筆時)に近い2つのバージョンをインストールしていく
$ tfenv install 1.4.2
$ tfenv install 1.4.1

# 利用可能なtfenvのバージョンを確認
$ tfenv list
* 1.4.2 (set by /opt/homebrew/Cellar/tfenv/3.0.0/version)
  1.4.1

# 使用するバージョンをセット
# 今回は最新を使用
$ tfenv use 1.4.2

# result
Switching default version to v1.4.2
Default version (when not overridden by .terraform-version or TFENV_TERRAFORM_VERSION) is now: 1.4.2

git-secrets設定(ハンズオン)

クレデンシャル情報の漏洩を防ぐため設定
クレデンシャル情報(awsのAccess key ID, Secret access keyなど)

1. Gitインストール
2. git-secrets設定
3. 動作確認

1. Gitインストール

# Gitが未インストールであれば、以下のコマンドを実行
$ brew install git

# インストール後に、バージョン確認
$ git --version

# result
$ git version 2.40.0

2. git-secrets設定

# git-secretsが未インストールであれば、以下のコマンドを実行
$ brew install git-secrets

# 全リポジトリにAWS認証情報のパターンを設定
$ git secrets --register-aws --global

# 現在のユーザーのGit設定ファイルの内容を確認
$ cat ~/.gitconfig

# result
[user]
name = conti0513
email = example@example.com
[core]
editor = code --wait
[init]
defaultBranch = tutorial
templatedir = ~/.git-templates/secrets
[secrets]
providers = git secrets --aws-provider
patterns = (A3T[A-Z0-9]|AKIA|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{16}
patterns = (\"|')?(AWS|aws|Aws)?_?(SECRET|secret|Secret)?_?(ACCESS|access|Access)?_?(KEY|key|Key)(\"|')?\\s*(:|=>|=)\\s*(\"|')?[A-Za-z0-9/\\+=]{40}(\"|')?
patterns = (\"|')?(AWS|aws|Aws)?_?(ACCOUNT|account|Account)_?(ID|id|Id)?(\"|')?\\s*(:|=>|=)\\s*(\"|')?[0-9]{4}\\-?[0-9]{4}\\-?[0-9]{4}(\"|')?

# EXAMPLE
# allowed = AKIAIOSFODNN7EXAMPLE
# allowed = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

# 新規リポジトリ作成時に、git-secretsがインストールされるよう設定

$ git secrets --install ~/.git-templates/secrets
$ git config --global init.templatedir '~/.git-templates/secrets'

設定ファイルの確認

  • [secrets]:設定ファイル
  • リポジトリ内の機密情報の検出と保護に使用される
  • コミットされたファイル内にこれらのパターンに一致する文字列が含まれている場合に、警告を出す
  • これにより、誤って機密情報がリポジトリに含まれることを防ぎ、セキュリティを強化することができる

3. 動作確認

確認内容

  • AWS認証情報が記載されていた場合に、Gitのコミットを防ぐことができるのかを確認する
  • まずはテスト用のディレクトリを作成し、移動
# Terraformをインストールする「~/work-dir/」配下に作成
$ mkdir ~/work-dir/aws-secrets-test
$ cd ~/work-dir/aws-secrets-test

# Gitの新規リポジトリを作成
$ git init

#テスト用のAWS認証情報は~/.gitconfigのallowedのサンプルキーを参考にmain.tfを作成する

echo "aws_access_key_id = \"AKIAIOSFODNN8EXAMPLE\"\naws_secret_access_key = \"wJalrXUtnFEMI/K8MDENG/bPxRfiCYEXAMPLEKEY\"" > main.tf

# テスト用の「main.tf」を確認
$ cat main.tf

# result
aws_access_key_id = "AKIAIOSFODNN8EXAMPLE"
aws_secret_access_key = "wJalrXUtnFEMI/K8MDENG/bPxRfiCYEXAMPLEKEY"

# 動作確認
$ git add main.tf
$ git commit -m "secrets test"

# result
# 問題なく警報が出ることを確認
main.tf:1:aws_access_key_id = "AKIAIOSFODNN8EXAMPLE"
[ERROR] Matched one or more prohibited patterns
:
:

以上でgit-secretsの設定完了です。

awsでTerraformを使用する準備

次に、awsでTerraformを使用する準備をしていきます。

【参考URL】
https://kacfg.com/terraform-vpc-ec2/#IAM

IAMユーザーのアクセスキーを作成

マネジメントコンソールにログイン
-> IAM画面
-> [ユーザー]
-> [対象のIAMユーザー] をクリック
-> [認証情報] タブ
-> [アクセスキーの作成] をクリック

作成したcsvをDesktopなど任意の場所に一旦保存します。
取扱に注意してください!

AWS CLI インストール

【参考記事】
https://qiita.com/NorihitoYamamoto/items/badd32785078bc944089

1. AWS CLIのインストール

https://awscli.amazonaws.com/AWSCLIV2.pkg からインストーラーのダウンロード
・インストーラー(pkgファイル)をダブルクリックして実行し、インストール手順に従ってインストールする
・ターミナルを起動し、$ which awsでawsコマンドが実行できるかを確認する

# AWS CLIインストール後の確認コマンド
$ which aws

# result
# AWS CLIがインストールされたことを確認
/usr/local/bin/aws

2. AWS CLIの構成を実施

  • 事前にAWSマネジメントコンソールで作成した、アクセスキーIDとシークレットアクセスキーを準備する
  • このハンズオンではローカルPCに環境変数としてクレデンシャル情報を保管する
  • 場所「~/.aws/credentials」
# 以下のコマンで対話的に設定してく
$ aws configure

# 以下を対話的に入力
AWS Access Key ID [None]: *****************
AWS Secret Access Key [None]: ******************
Default region name [None]: ap-northeast-1
Default output format [None]:

# 以下のファイルが作成されていることを確認
ls -la ~/.aws/
total 16
drwxr-xr-x 4 yoshi staff 128 Mar 26 21:58 .
drwxr-x---+ 40 yoshi staff 1280 Mar 26 21:57 ..
-rw------- 1 yoshi staff 34 Mar 26 21:58 config
-rw------- 1 yoshi staff 116 Mar 26 21:58 credentials

# aws configure listを実行
# AWS CLI 認証情報が設定されたことを確認
$ aws configure list
aws configure list
Name Value Type Location
---- ----- ---- --------
profile None None
access_key ****************B26B shared-credentials-file
secret_key ****************UzBR shared-credentials-file
region ap-northeast-1 config-file ~/.aws/config

3. 動作確認

・aws iam get-userを実行してみる
・自分のIAMユーザー情報が出力されれば、AWS CLI 認証情報が正しく設定されている

$ aws iam get-user
{
  "User": {
  "Path": "/",
  "UserName": "test",
  "UserId": "************************",
  "Arn": "arn:aws:iam::nnnnnnnnnnnn:user/test",
  "CreateDate": "2023-03-09T23:08:32+00:00",
  "PasswordLastUsed": "2023-03-26T12:49:51+00:00",
  "Tags": [
    {
      "Key": "*********************",
      "Value": "accesskey_terraform"
    }
    ]
  }
}

以上でTerraform環境導入完了です。次回はTerraformを用いてEC2を起動していきます。