Contents
はじめに
k8sのhardwayで3インスタンスも建てていましたが、shutdownしててもEBSの費用が月5ドルくらい掛かってしまうので、AMI化してEC2インスタンスは削除しました。
使用するときはterraformを使って自動起動しようと思い、その設定を残しておきます。
やりたかったこと
・terraformを使ってAMI化したEC2インスタンスを簡単に復旧させたかった。
・hostnameがip-XX-XXみたいなのではなく、AMI化前に設定していたmaster1とかに自動で直したかった。
terraformのインストール
公式を参照して実行しました。
まずはファイルのダウンロードします。linuxの64-bitのリンクをコピーしてwgetで取得します。解凍してPATHのある所に移動。terraformコマンドを打ってみて確認。terraform --versionとか。
1 2 3 4 5 |
wget https://releases.hashicorp.com/terraform/0.12.3/terraform_0.12.3_linux_amd64.zip unzip terraform_0.12.3_linux_amd64.zip sudo mv terraform /usr/local/bin terraform terraform --version |
ファイルの準備
紆余曲折ありこんな感じの.tfファイルになりました。
varとかlistとかmapとか試したけど自分の技量では上手く使いこなせず。。
結局べた書きが楽だし可読性も良かったのでこの形になりました。全部同じディレクトリにあります。
awsのkeyなどはterraformを実行するEC2インスタンスの.awsディレクトリを見に行ってくれるようなので設定してません。
user_dataにあるコマンドの通り、hostnamectlでhostnameを変えてrebootしています(単純)ちなみに/etc/hostsはAMI化前に設定済み。
user_dataでhostname無理やり変えたときに参考になったサイト
provider.tf
1 2 3 4 |
provider "aws" { profile = "default" region = "ap-northeast-1" } |
master1.tf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
resource "aws_instance" "master1" { ami = "ami-XXXXXXXXXX" instance_type = "t2.small" key_name = "My-Key" private_ip = "10.63.0.11" subnet_id = "subnet-XXXXX" associate_public_ip_address = "true" user_data = <<EOF #!bin/bash sudo hostnamectl set-hostname master1 sudo reboot EOF vpc_security_group_ids = [ "sg-XXXXXX" ] tags = { Name = "master1" } } |
worker1.tf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
resource "aws_instance" "worker1" { ami = "ami-YYYYYYYYYY" instance_type = "t2.small" key_name = "My-Key" private_ip = "10.63.0.101" subnet_id = "subnet-XXXXX" associate_public_ip_address = "true" user_data = <<EOF #!bin/bash sudo hostnamectl set-hostname worker1 sudo reboot EOF vpc_security_group_ids = [ "sg-XXXXXX" ] tags = { Name = "worker1" } } |
worker2.tf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
resource "aws_instance" "worker2" { ami = "ami-ZZZZZZZZZZ" instance_type = "t2.small" key_name = "My-Key" private_ip = "10.63.0.102" subnet_id = "subnet-XXXXX" associate_public_ip_address = "true" user_data = <<EOF #!bin/bash sudo hostnamectl set-hostname worker2 sudo reboot EOF vpc_security_group_ids = [ "sg-XXXXXX" ] tags = { Name = "worker2" } } |
terraformの実行
このまんま。
ec2instanceパラメータ公式
わかりやすい例
コマンドはこんな感じ。
terraform init
→terraform実行のための準備
terraform plan
→dry runなので気軽に打てるはず
terraform apply
→yesで実行
terraform show
→実行結果の確認
最後に
やりたかったことは無事で来たので満足。
ただもっとスマートにやる方法あるんだろうなーと思う今日この頃。
terraform、少し凝ったことをやろうとすると急激に学習コストが上がるのがつらい。
1インスタンスを起動させるとかならterraform簡単らくちんでおすすめです。