はじめての Terraform
今回は、Terraform とはどんなものか?ということで、一番簡単な VPC を構築したいと思います。
必要なもの
- AWS アカウント(Access key ID, Secret access key)
基本はコマンドラインでの操作です。お好きなエディタで PoweShell を起動しましょう。
まずは、作業用ディレクトリを作り、移動しておきます。
事前作業 ※ここ大事
Terraform は HashiCorp の公式ページにも記載されております通り、たくさんのサービスに対応しています。
主なクラウドサービスである AWS, Azure, GCP なんかは対応済みですね。
ここがポイントなのですが、Terraform を利用するサービス毎に、そのサービスに合わせたプログラムを最初に持ってくる必要があります。
以下の手順で AWS 用のプログラムを持ってきます。
# Terraform のバージョンを確認
> terraform version
Terraform v0.12.26
# 現在のパスを確認
> Convert-Path .
C:\Users\username\terraform
# Terraform のメインとなるスクリプトを作成
> New-Item C:\Users\username\terraform\main.tf
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2020/06/18 00:10 0 main.tf
main.tf の記述
作成した main.tf を開いて、以下のように記述します。
# Terraform のバージョン指定
terraform {
required_version = "= 0.12.26"
}
# Provider 指定
provider "aws" {
version = "~> 2.0" # 公式ページの Guides 参照
access_key = "XXXXXXXXXXXXXXXXXXXX"
secret_key = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
region = "eu-west-1"
}
# VPC の作成
resource "aws_vpc" "vpc" {
cidr_block = "10.0.0.0/16"
instance_tenancy = "default"
enable_dns_support = "true"
enable_dns_hostnames = "false"
tags = {
Name = "terraform-vpc"
}
}
やっちゃいましょう
AWS のプログラムを持ってきます。
> terraform init
Initializing the backend...
Initializing provider plugins...
- Checking for available provider plugins...
- Downloading plugin for provider "aws" (hashicorp/aws) 2.66.0...
Terraform has been successfully initialized!
どうやら、現在(2020年6月)の AWS Provider 最新版は 2.66.0 のようですね。
フォルダに注目!
何やら新しくフォルダが作られています!
フォルダを覗いてみると、中にはこんなファイルがありました!
この『terraform-provider-aws_v2.66.0_x4.exe』が、AWS の resource を Terraform でコントロールするために必要なプログラムです。
VPC を作成、そして削除
Terraform では、環境を作る前に、書いたコードがイケてるかどうかチェックするコマンドが用意されています。
> terraform plan
Refreshing Terraform state in-memory prior to plan...
The refreshed state will be used to calculate this plan, but will not be
persisted to local or remote state storage.
....
Plan: 1 to add, 0 to change, 0 to destroy.
このように表示されれば、OK です。
terraform apply を実行
> terraform apply
...
Enter a value: yes
aws_vpc.vpc: Creating...
aws_vpc.vpc: Still creating... [10s elapsed]
aws_vpc.vpc: Creation complete after 13s [id=vpc-0cbb0727ae3a0b848]
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
AWS のコンソール画面を見てみましょう。
はい、VPC が作成されていますね。Name も『terraform-vpc』となっており設定どおりに作成されています。
またまた、注目!
何やら手元に、新しいファイルが生成されています。
開いてみると、
なんと『terraform.tfstate』には、AWS に作成した VPC の情報がコードで記録されています。
実はこのファイル『terraform.tfstate』は、出力先を自由に設定できるため、S3 などにアップロードして開発者で共有できるようにしておくのがベストプラクティスらしいです。
terraform destroy で削除
それでは、やっちゃいましょう。
> terraform destroy
...
Plan: 0 to add, 0 to change, 1 to destroy.
Do you really want to destroy all resources?
Terraform will destroy all your managed infrastructure, as shown above.
There is no undo. Only 'yes' will be accepted to confirm.
Enter a value: yes
aws_vpc.vpc: Destroying... [id=vpc-0cbb0727ae3a0b848]
aws_vpc.vpc: Destruction complete after 1s
Destroy complete! Resources: 1 destroyed.
これで削除完了です。AWS のコンソールで VPC が削除されていることが確認できると思います。
また、『terraform.tfstate』も更新されています。中身は VPC の情報が削除されています。
そして、親切なことに自動でバックアップが取られております。
とりあえず、VPC の作成~削除はこんな感じですかね。
Terraform を使いこなすまでのゴールを知る
なんとなく、Terraform がどういうものか分かりました。
では、Terraform をどの程度使いこなせるようにしておくか、という目標を決めましょう。
色々なページを読んできましたが、クラスメソッドさんのTerraformにおけるディレクトリ構造のベストプラクティスが最も参考になりました。
このベストプラクティスに沿って、ポートフォリオ作りのための開発環境、本番環境の土台を、Terraform で作れるようになることを目標にします。
VPCTerraform