Terraformに入門しました。以前Windows環境で少し操作したことがありましたが、あたらめてMacで環境を構築しつつ概念や動作を確認していきます。
主にハンズオンを通して確認していきます。
【参考URL】
- 【AWS】Infrastructure as Code 談議 2022 ~ #AWSDevLiveShow
- 【初心者向け】MacにTerraform環境を導入してみた
- 【Terraform公式】What is Terraform?
- 【AWS公式】Terraform
【関連記事】
【コードはこちら】
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を起動していきます。