【入門編】Terraformとは?
入門編ということなので、Terraformの説明から入ります。Terraformは、冒頭でも書きましたがIaC(infrastructure as Code)を支援するためのツールになります。
クラウド環境にインフラ環境を安全かつ効率的に構築・変更・バージョン管理ができます。AWS環境では、インスタンスを作成出来たり、Dockerコンテナを作ったりすることが可能です。
AWSにもCloudformationというツールがありますが、Terraformとの違いはリソースごとにファイルを分けて記述・デプロイが出来る、変数を別のファイルとして切り出せるといったところが特徴的です。
それでは、まずAWSの方に入門していきます。
AWS環境構築
AWS入門ということで、AWSアカウント作成、IAMユーザーを作成し、AWSCloud9を導入していき、AWS側の登録が終わり次第、Terraformに入門し、AWS環境構築の方に移っていきます。
AWSアカウント作成
最初はAWSアカウントの作成です。下記手順の通り登録していきます。セキュリティ面を考慮し、今回の入門編では触れませんが、多要素認証の登録推奨になります。
- Eメールアドレス、パスワード設定
- 連絡先情報入力(アカウントの種類はパーソナルを選択)
- お支払い情報入力
- SMSまたは自動音声電話によるアカウント認証
- AWSサポートプランの選択(ベーシックを選択)
- 最終確認画面を確認し、AWS アカウント作成完了
IAMユーザー作成
続いてIAMのユーザー作成になります。最初に作成したアカウントは、ルートアカウントというadministrator(最高権限)のアカウントになりますので、普段の作業では使用せず、IAMという使用制限のかけられるアカウントを作成し、セキュリティリスクを低減させます。
- 左上のサービスを押しセキュリティ、ID、およびコンプライアンスの欄からIAMを選択
- アクセス管理項目からユーザーを選択し、左上のユーザーを追加を選択
- ユーザー名を入力し(自分の苗字など)、アクセスの種類を選択(今回はプログラムによるアクセスとAWS マネジメントコンソールへのアクセス)
- グループを作成し、権限を設定する(今回はAdministratorAccessを選択)
- 最終確認画面を確認し、右下のユーザー作成を押して作成完了
AWSCloud9環境構築
無事アカウント登録とIAMアカウント作成が出来ましたので、ここからCloud9の構築をしていきます。
Cloud9は、ブラウザ上で開発ができるツールになります。Terraformを使用するにあたってCLIが必須となりますので、今回はCloud9を使用しTerraformを構築していきます。
- IAMユーザーでログインをし、画面左上のサービス > 開発者用ツール > Colud9を選択します。
- 右側オレンジ色のCreate environmentをクリック
- NameとDescription(任意)を入力してNext Stepを選択(NameはCloudStudyなどなんでも可)
- 設定はEnvironment type>Create a new EC2 instance for environment (direct access)、Instance type>t2.micro (1 GiB RAM + 1 vCPU)、Platform>Amazon Linux 2 (recommended)を選択
- 最終確認画面で問題なければCreate environmentを選択し、Colud9導入完了
Terraform環境構築
次にTerraformに入門して環境構築に移ります。ここからは、ターミナルやディレクトリを活用しての作業になります。
基本的に使うコマンドは、init>初期化してProvideに対応したファイルをダウンロードさせる、fmt>コードの整形、validate>構文チェック、plan>ドライラン(事前確認)、apply>実行になります。
- $ sudo yum install -y yum-utils
- $ sudo yum-config-manager –add-repo https://rpm.releases.hashicorp.com/AmazonLinux/hashicorp.repo
- $ sudo yum -y install terraform
- $ terraform -version
- $ terraform -install-autocomplete
- $ . ~/.bashrc
これでTerraformの環境構築が出来ました。次はディレクトリを作成し、コードを書いていきます。
- $ mkdir sample; cd $_
- $ touch provider.tf
作成したprovider.tfに下記コードを書き込みます。
terraform {
required_providers {
aws = {
source = ""hashicorp/aws""
version = ""~> 3.0""
}
}
}
provider ""aws"" {
region = ""ap-northeast-1""
書き込み後ターミナルにて$ terraform initをし、Providerに対応したファイルをDLさせます。
TerraformでAWS構築
入門編の最後にTerraformでAWSの構築をしてみます。公式ドキュメントを参考に書き込んでいきます。
構成は①VPC、Subnet作成、②IGW(インターネットゲートウェイ)、Route Tableでアタッチする基本的なものです。
まずはターミナルにてtouch main.tfのコマンドを実行し、ファイルを作成します。ファイル作成が終わりましたら、コードを入力していきます。
①VPCとSubnetの作成
#リージョン
provider ""aws"" {
region = ""ap-northeast-1""
}
#VPC
resource ""aws_vpc"" ""main"" {
cidr_block = ""10.0.0.0/16""
tags = {
Name = ""main""
}
}
#Subnet
resource ""aws_subnet"" ""public_1a"" {
vpc_id = ""${aws_vpc.main.id}""
availability_zone = ""ap-northeast-1a""
cidr_block = ""10.0.1.0/24""
tags = {
Name = ""main-public-1a""
}
}
resource ""aws_subnet"" ""private_1a"" {
vpc_id = ""${aws_vpc.main.id}""
availability_zone = ""ap-northeast-1a""
cidr_block = ""10.0.10.0/24""
tags = {
Name = ""main-private-1a""
}
}
②IGW(インターネットゲートウェイ)とRoute Tebleの作成
#IGW
resource ""aws_internet_gateway"" ""main"" {
vpc_id = ""${aws_vpc.main.id}""
tags = {
Name = ""main""
}
}
コードを書き終えたらターミナルにてterraform planを実行し、問題がなかったらterraform applyを実行し完成となります。
#Route Table
resource ""aws_route_table"" ""public"" {
vpc_id = ""${aws_vpc.main.id}""
tags = {
Name = ""main-public""
}
}
resource ""aws_route"" ""public"" {
destination_cidr_block = ""0.0.0.0/0""
route_table_id = ""${aws_route_table.public.id}""
gateway_id = ""${aws_internet_gateway.main.id}""
}
resource ""aws_route_table_association"" ""public_1a"" {
subnet_id = ""${aws_subnet.public_1a.id}""
route_table_id = ""${aws_route_table.public.id}""
}
resource ""aws_route_table"" ""private_1a"" {
vpc_id = ""${aws_vpc.main.id}""
tags = {
Name = ""main-private-1a""
}
}
これで基本的なAWSの構成の完成です。
まとめ
ここまで、AWS入門とTerraform入門という形でAWSの登録からTerraformの環境構築までやってまいりました。
Terraformとは、AWS上で一つずつ構築していた物がTerraformを活用することで、一瞬で構築、管理が出来るというツールです。
今回紹介出来なかった機能などもまだまだあるので、この機会にAWSやTerraformに入門して挑戦してみましょう。