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
を使用する。
- AWS マネジメントコンソール -> サービス -> IAM -> グループ
- 新しいグループの作成 -> グループ名入力 -> 次のステップ
- グループ名:
Terraform
- グループ名:
AmazonEC2FullAccess
のポリシーをアタッチ -> 次のステップ- グループの作成
ユーザーの作成
- AWS マネジメントコンソール -> サービス -> IAM -> ユーザー
- ユーザーを追加 -> ユーザー名、アクセスの種類を入力 -> 次のステップ
- ユーザー名:
mikoto2000-terraform
- アクセスの種類: プログラムによるアクセス
- ユーザー名:
- アクセス許可の設定 -> 次のステップ
- ユーザーをグループに追加を選択
- グループ
Terraform
を追加する
- ユーザーの作成
作成直後に表示される、 アクセスキー ID
と シークレットアクセスキー
をメモしておく。
EC2 セキュリティグループの作成
「どこからでも SSH アクセスしていいよ」というセキュリティグループを作る。
- AWS マネジメントコンソール -> サービス -> EC2 -> セキュリティグループ
- セキュリティグループの作成 -> セキュリティグループ名、説明、インバウンドルールを入力 -> 作成
- セキュリティグループ名:
ssh
- 説明: Publish SSH port.
- インバウンド
- タイプ: SSH
- ソース: 任意の場所
- セキュリティグループ名:
Terraform 設定ファイルの作成
Getting Start の例 に、いくつか修正を加える。
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 コマンドを叩いて実行していく。
- 初期化
- 計画の確認と適用
- 確認
以降は、 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 に反映できていることを確認する。
マネジメントコンソールで確認
- AWS マネジメントコンソール -> サービス -> EC2 -> インスタンス
- 条件通りのインスタンスが作成されているかを確認する
SSH 接続
インスタンス情報の パブリック DNS (IPv4)
のアドレスに、 Tera Term Pro で接続する。
- User name: ubuntu
- Use RSA/DSA/ECDSA/ED25519 key to log in を選択し、鍵に
~/.ssh/mikoto2000.pem
を指定
はい成功。
後片付け
terraform destroy
コマンドで、作成したリソースを削除できる。
terraform destroy -var-file=./variables.tfvars
ASW でインスタンスが削除されているのが確認出来たら OK.
0 件のコメント:
コメントを投稿