はじめに
udemyを使ってTerraformの勉強をしたので、Terraformの環境構築からAWSリソースの作成ができるまでをまとめた、学習備忘録です。
目的
インフラ構築をコード化/自動化(Iac)できるようになること
Instracture as Code(IaC)とは
インフラ構築をコード化することで、人のミスを防ぎ品質とスピードを上げること
IaCのメリット
- 環境のコピーが容易になる
- 変更点がコード管理されるので、gitで管理することができる
HashiCorp社とは
- Mitchell HashimotoとArmon Dadgarによって2012年に設立された会社
- 今回使用する、
Terraform
を開発した
Terraformとは
- Terraformは、IaCを実現するツール
- Terraformではインフラの構成をコードで宣言し、自動でデプロイすることができまる
- 複数のクラウドサービスに対応している(GCP, Azure, AWS)
環境構築
AWS CLIのインストール
最初にAWS CLIをインストールします。
インストール方法は公式ドキュメントがあるので公式を参考にインストールします。
インストールが完了すると、awsコマンドが使えるようになります。
$ aws --version
$ aws-cli/2.8.2 Python/3.10.7 Darwin/21.6.0 source/x86_64 prompt/off
IAMユーザー作成
AWSのIAMでTerraform用のIAMユーザーを作成します。
名前は、任意で、「アクセスキー・プログラムにアクセス」を選択します。
権限は、Administratorを付与し、IAMユーザーを作成します。(タグ等は任意で付与する)
ユーザーが作成できたらaws configureの設定をします。
$ aws configure --profile terraform
AWS Access Key ID [None]:作成したもの
AWS Secret Access Key [None]:作成したもの
Default region name [None]:ap-northeast-1
Default output format [None]:json
プロファイルを指定して、S3バケットが見えればOK
$ aws s3 ls --profile terraform
Terraformのインストール
Terraformは、バージョンによって変更があることが多いため、Terraformのバージョン管理ツールのtfenvをインストールします。
tfenvのインストール
私はanyanvを使用しているため、anyenv経由でtfenvをインストールします。
# tfenv をインストール
$ anyenv install tfenv
# コマンドを実行して正常にインストールできているか確認
$ tfenv
tfenv 3.0.0-18-g1ccfddb
Usage: tfenv <command> [<options>]
brewでもインストール可能です。
$ brew install tfenv
Terraformのインストール
Terraformのインストール可能なバージョンを表示します。
$ tfenv list-remote
最新をインストールします。
$ tfenv install 1.3.2
$ tfenv use 1.3.2
# バージョン確認でインストールが成功したことを確認
$ terraform version
Terraform v1.3.2
on darwin_amd64
git-secretsをインストール
AWSアクセスキーとシークレットキーを誤ってコミットするのを防いでくれるツールです。
$ brew install git-secrets
各gitリポジトリに対して、git secrets --installを行うことで、git-secretsに対応させます。
$ git secrets --install
# AWSのIAMで利用されているクレデンシャルのパターンを弾く専用のオプションを設定します。
$ git secrets --register-aws
VSCodeのプラグインをインストール
HashiCorpから提供さているプラグインをインストールします。
はじめてのTerraform
EC2の作成
新しくフォルダを作成し、main.tfファイルを作成します。
# プロバイダーの設定
provider "aws" {
profile = "terraform"
region = "ap-northeast-1"
}
# EC2の設定
# amiは、awsのコンソールから確認します。
resource "aws_instance" "hello-world" {
ami = "ami-0ce107ae7af2e92b5"
instance_type = "t2.micro"
}
terraformが使えるように初期化します。
$ terraform init
terraformを実行します。
$ terraform apply
AWSのコンソールを確認し、EC2が作成されていればOKです。
tfstateとは
$ terraform apply
を実行すると、terraform.tfstate
ファイルが作成されます。
tfstateファイルとは、terraformを使って構築したクラウドの状態情報が全て記録されます。
先ほど作成されたtfstateの中を見ると、作成されたec2のidが書いてあり、AWSに起動したEC2のIDと一致します。
EC2のタグ追加(再作成なし)
先程書いたコードにtagsを追加し、EC2のタグ追加を追加します。
provider "aws" {
profile = "terraform"
region = "ap-northeast-1"
}
resource "aws_instance" "hello-world" {
ami = "ami-0ce107ae7af2e92b5"
instance_type = "t2.micro"
tags = {
Name = "HelloWorld"
}
}
terraform applyを実行すると、タグが追加されていることを確認することができます。
$ terraform apply
EC2にNGINXのインストール(再作成あり)
nginxをユーザーデータに追加します。user_data
にnginxのインストール記載します。
provider "aws" {
profile = "terraform"
region = "ap-northeast-1"
}
resource "aws_instance" "hello-world" {
ami = "ami-0ce107ae7af2e92b5"
instance_type = "t2.micro"
tags = {
Name = "HelloWorld"
}
user_data = <<EOF
#!/bin/bash
amazon-linux-extras install -y nginx1.12
systemctl start nginx
EOF
}
EC2の削除
下記のコマンドを行うと、terraformで作成したリソースを削除することができます。
$ terraform destroy
AWSのコンソールを見ると、先程の作成したEC2が削除されていることが確認できます。
基本コマンド
# 実行計画の確認
$ terraform plan
# 変更の適用
$ terraform apply
# 管理インフラ環境の構築
$ terraform destroy
# 構文チェック
$ terraform validate
# フォーマット
$ terraform fmt
以上です。Terraformを使うと簡単にクラウドリソースの作成ができますね。