2018年10月12日金曜日

Terraform で AWS の EC2 インスタンスを作って SSH 接続するまでをやってみる

Installing Terraform - Terraform by HashiCorp を見ながらやってみる。

環境・前提

Docker for Windows で hashicorp/terraform のイメージを使う。

  • Host OS: Windows 10 Pro
  • image: hashicorp/terraform:0.11.8
  • docker: Docker version 18.06.1-ce, build e68fc7a

必要パッケージのインストール

docker pull するだけ。

docker pull hashicorp/terraform:0.11.8

AWS の環境設定

AWS を Terraform で操作するための準備。 下記 3 つを作成する。

  • Terraform で AWS リソースをいじれるようにするための設定
    • グループ
    • ユーザー
  • EC2 インスタンスに SSH ログインできるようにするための下準備
    • EC2 のセキュリティグループ

ポリシーは、 AWS デフォルトポリシーのひとつを使用するので作成しなくてよい。

グループの作成

Terraform の aws_instance に必要な権限の記載が見つからなかったので、 AmazonEC2FullAccess を使用する。

  1. AWS マネジメントコンソール -> サービス -> IAM -> グループ
  2. 新しいグループの作成 -> グループ名入力 -> 次のステップ
    1. グループ名: Terraform
  3. AmazonEC2FullAccess のポリシーをアタッチ -> 次のステップ
  4. グループの作成

ユーザーの作成

  1. AWS マネジメントコンソール -> サービス -> IAM -> ユーザー
  2. ユーザーを追加 -> ユーザー名、アクセスの種類を入力 -> 次のステップ
    1. ユーザー名: mikoto2000-terraform
    2. アクセスの種類: プログラムによるアクセス
  3. アクセス許可の設定 -> 次のステップ
    1. ユーザーをグループに追加を選択
    2. グループ Terraform を追加する
  4. ユーザーの作成

作成直後に表示される、 アクセスキー IDシークレットアクセスキー をメモしておく。

EC2 セキュリティグループの作成

「どこからでも SSH アクセスしていいよ」というセキュリティグループを作る。

  1. AWS マネジメントコンソール -> サービス -> EC2 -> セキュリティグループ
  2. セキュリティグループの作成 -> セキュリティグループ名、説明、インバウンドルールを入力 -> 作成
    1. セキュリティグループ名: ssh
    2. 説明: Publish SSH port.
    3. インバウンド
      • タイプ: SSH
      • ソース: 任意の場所

Terraform 設定ファイルの作成

Getting Start の例 に、いくつか修正を加える。

  • 変数を使用
  • SSH のための設定を追加
    • key_name を追加
    • security_groups を追加

tf ファイル作成

getting_start.tf という名前で作成。

variable access_key {}
variable secret_key {}
variable key_name {}

provider "aws" {
  access_key = "${var.access_key}"
  secret_key = "${var.secret_key}"
  region     = "us-east-1"
}

resource "aws_instance" "example" {
  ami             = "ami-2757f631"
  key_name        = "${var.key_name}"
  instance_type   = "t2.micro"
  security_groups = ["ssh"]
}
  • Getting Start では指定していないが、 provider/version を指定することで、使用する provider のバージョンを固定できるようだ。(詳細はここを参照)
  • aws_instance/ami に、 Packer で作ったイメージを指定するなど、良い感じにイメージを選べばよいみたい。
  • SSH ログインできるように、下記を設定
    • /aws_instance/key_name : 前回作ったキーペアの名前を指定
    • /aws_instance/security_groups : 「EC2 セキュリティグループの作成」で作成したセキュリティグループ名を指定

変数ファイル作成

variables.tfvars という名前で作成。

AWS_ACCESS_KEY, AWS_SECRET_KEY はそれぞれ、ユーザーの作成 で確認した アクセスキー IDシークレットアクセスキー を設定する。

access_key = "AWS_ACCESS_KEY"
secret_key = "AWS_SECRET_KEY"
key_name   = "mikoto2000"

インスタンス作成

ざっくりいうと、下記 3 フェーズで、それぞれ terraform コマンドを叩いて実行していく。

  1. 初期化
  2. 計画の確認と適用
  3. 確認

以降は、 docker コンテナの中で作業していく。

docker run -v "\PATH\TO\WORK_DIR:/work" --workdir "/work" --entrypoint='' -it --rm hashicorp/terraform:0.11.8 /bin/sh

初期化

必要なプラグインのダウンロードとプロバイダの状態を記録するファイルの初期化処理を行う。

terraform init

計画の確認と適用

次のコマンドを実行すると、 terraform の実行計画が表示されるので、受け入れる場合には yes と打って Enter.

terraform apply -var-file=./variables.tfvars

動作確認

AWS に反映できていることを確認する。

マネジメントコンソールで確認

  1. AWS マネジメントコンソール -> サービス -> EC2 -> インスタンス
  2. 条件通りのインスタンスが作成されているかを確認する

SSH 接続

インスタンス情報の パブリック DNS (IPv4) のアドレスに、 Tera Term Pro で接続する。

  1. User name: ubuntu
  2. Use RSA/DSA/ECDSA/ED25519 key to log in を選択し、鍵に ~/.ssh/mikoto2000.pem を指定

はい成功。

後片付け

terraform destroy コマンドで、作成したリソースを削除できる。

terraform destroy -var-file=./variables.tfvars

ASW でインスタンスが削除されているのが確認出来たら OK.

参考資料

0 件のコメント:

コメントを投稿