TerraForm でEC2を作成

目標:TerraFormを使ってAWSのEC2インスタンスを立ち上げる。

環境
OS:Windows10

今回使っている環境はWindows10なのでchocolateyと言うソフトウェアが必要でした。

Chocolateyとは
チョコティー(Chocoly)は、Windowsソフトウェア用コンピュータレベルのコマンドパッケージ管理者であり、インストール管理者である。 NuGet パッケージングインフラとWindows PowerShell を使用してソフトウェアのダウンロード·インストールプロセスを単純化します。
Chocolatey

Chocolateyのインストール

PowerShellを管理者権限で実行します。

Windows キーを押した後に「windows powershell」を検索してください。
「Windows PowerShell」にマウス右ボタンでクリックし、「管理者として実行」選択してください。

PowerShellに実行ポリシーを設定します。

Restricted : 全てのスクリプトが制限
AllSigned : 署名付きスクリプトのみ実行可能
Bypass : すべてのファイルが実行可能

chocolateyはAllSigned とかBypass を要求しています。今回はAllSignedにしてみました。

「Get-ExecutionPolicy」で今のポリシーが確認できます。
「Set-ExecutionPolicy AllSigned」を入力してポリシーを変更してください。

chocolateyインストール
下記のコマンドを実行してください。

Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))


「choco」でインストールを確認できます。

TerraFormインストール

下記のコマンドを実行します。

choco install terraform

スクリプト実行するかの質問に「Y」を入力します。

「terraform -help」でインストール確認ができます。

AWS CLIインストール

せっかくchocolateyをインストールしたのでchocolateyからAWS CLIをインストールしてみます。
下記のURLから「aws cli」検索してパッケージを探します。

chocolateyパッケージ:Packages

AWS Command Line Interface v2 (Install) 2.3.0

choco install awscli

インストール後には「Windows PowerShell」の再実行が必要です。

再実行後に「aws –version」コメント実行ができます。

AWSアクセスキー習得

AWSにアクセスした後にセキュリティ認証情報に行きます。
https://console.aws.amazon.com/iam/home?#/security_credentials

アクセスキー (アクセスキー ID とシークレットアクセスキー)を開いて「新しいアクセスキーの作成」ボタンを押したらアクセスキーが発給されます。
必ず「キーファイルのダウンロード」をクリックしてアクセスキーの情報をダウンロードして安全なとこに保管してください。

アクセスキーをAWS CLIに登録します。下記のコマンドを実行してください。

aws configure

 ダウンロードしたアクセスキーファイルを参考してください。

基本リージョンは「ap-northeast-1」東京にしました。

TerraFormを試す

以下の内容は状況によってお金がかかります。
Terraform tutorials : Build Infrastructure | Terraform – HashiCorp Learn

好きなどころに「main.tf」と言うファイルを作成してください。
作成した後に下記のコードを入れてください。

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 3.27"
    }
  }

  required_version = ">= 0.14.9"
}

provider "aws" {
  profile = "default"
  region  = "ap-northeast-1"
}

resource "aws_instance" "app_server" {
  ami           = "ami-66182e01"
  instance_type = "t2.micro"

  tags = {
    Name = "MyFirstTerraformInstance"
  }
}

required_providers

Terraformは、「providers」というプラグインを使用し、クラウド提供者、SaaS提供者、その他のAPIと相互作用します。providers list : https://registry.terraform.io/browse/providers

provider

指定された提供者を構成します。
Terraformがリソースを生成·管理するために使用するプラグインです。

resource

インフラの構成要素を定義します。 リソースは、EC2インスタンスのような仮想または物理的構成要素やHerokuアプリケーションのような論理的リソースである可能性があります。

Terraform 初期化

初期化すると定義されているproviderがダウンロードおよびインストールされます。
「main.tf」があるディレクトリまで移動して下記のコマンドを実行してください。

terraform init

providerをダウンロードし、現在のタスクディレクトリの隠れた下位ディレクトリである「.terraform 」にインストールします。

「terraform fmt」は可読性と一貫性のため、現在のディレクトリの構成を自動でアップデート

terraform fmt

「terraform validate」命令を使用することで、構成が構文的に有効であり、内部的に一貫性があるかを確認することもできます

terraform validate

「terraform plan」命令を使用すると、現在定義されているリソースを実際にproviderに適用した時、テラフォームがどのようなジョブを実行するかの計画を示します。

terraform plan

「terraform apply」命令はリソースを実際に作成します。

terraform apply

確認メッセージに「yes」を入力

実行後にAWS Consoleからインスタンスを確認できる

よくある質問

1.AMI IDが各リージョン別に違うので注意してください。本記事に書いているAMI IDは東京リージョンの「ubuntu-precise-12.04-amd64-server-20170502」AMI IDです。

2.基本VPCを削除したらVPC設定を追加してください。

resource "aws_instance" "app_server" {
  ami           = "ami-66182e01"
  instance_type = "t2.micro"

 vpc_security_group_ids = ["sg-0077..."]
 subnet_id              = "subnet-923a..."

  tags = {
    Name = "MyFirstTerraformInstance"
  }
}

Smallitのサービス