今回は私が勉強中のTerraFormについて基本的なコードと共にご紹介します。
Terraformって何ぞや?
Terraformとは、HashiCorp社により開発されているオープンソースのインフラ自動構築ツールです。TerraformではAWSやAzure、GCPなどのクラウドサービス上のインフラリソース(サーバなど)をコードで定義することが出来ます。
Terraformを利用することで作成したコードに基づいて自動でリソースを構築することが出来ます。Terraformでは、複数システムでコードを再利用することで効率化を図ることが出来ます。また、一度に大量のリソースを定義することで手動よりも早く構築することが可能になります。
このようにインフラリソースをコードで定義することをInfrastructure as Code(IaC)と呼びます。他のIaCツールとしてはサーバ内の設定変更を得意とするAnsibleなどが有名ですが、Terraformはクラウド上のリソースを構築することに長けています。クラウドリソースはTerraformで構築し、サーバ内の設定変更はAnsible、といった使い分けが可能です。将来的には、Ansibleを使い倒していけるようになりたいので頑張ってます(汗
AWSではTerraFormに似たサービスでAWS CloudFormationが存在しますが、こちらはAWS専用のIaCツールです。前述したとおり、TerraFormはAWSやAzure、GCPなどのクラウドプロバイダーに対応しているためマルチクラウド環境においても構築手段を統一することが出来ます。(かっこいい)
コードがわかりやすい(と思う)
どんなコードなのか見てみましょう
provider "aws" {
region = "ap-northeast-1"
}
上記ではAWSプロバイダの設定を行っていて、作業を行うAWSのリージョンを指定しています。
resource "aws_vpc" "example" {
cidr_block = "10.0.0.0/16"
}
上記はVPCの作成を行っています。ここで指定するcidr_blockは、VPC内で使用したいIPアドレス範囲を指定します。
resource "aws_subnet" "example" {
vpc_id = "${aws_vpc.example.id}"
cidr_block = "10.0.1.0/24"
}
上記VPC内にサブネットを作成します。そしてここでもcidr_blockを指定して、サブネット内で利用したいIPアドレス範囲を設定します。
resource "aws_security_group" "example" {
name = "example"
description = "Example security group"
vpc_id = "${aws_vpc.example.id}"
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
}
このセクションではセキュリティグループを作成し、VPC内への入出力トラフィックを制御しています。"ingress"は受信トラフィックに対するルール、"egress"は送信トラフィックに対するルールを定義しています。
resource "aws_instance" "example" {
ami = "ami-0c94855ba95c574c8"
instance_type = "t2.micro"
key_name = "${aws_key_pair.example.id}"
vpc_security_group_ids = ["${aws_security_group.example.id}"]
subnet_id = "${aws_subnet.example.id}"
tags = {
Name = "terraform-example"
}
}
遂にEC2インスタンスを作成します。AMI、インスタンスタイプ、SSHキーペア、セキュリティグループID、サブネットIDなどのパラメータを指定しています。
resource "aws_key_pair" "example" {
key_name = "example-key"
public_key = "Your Public Key"
}
最後に、SSHキーペアを作成します。キーペア名と公開鍵を指定します。この公開鍵は、EC2インスタンスへSSH接続する際に使用します。
いかがだったでしょうか。私が初めてインプットした時は「わかりやすい!」と感じました。
まだまだ勉強中ですので、この記事について間違った記載ありましたらご指摘の程宜しくお願いいたします。
↓詳しくは、TerraForm(公式)のドキュメントをご覧ください。