スポンサーリンク

terraformでAMI化したEC2のhostnameを力技で設定するまで

aws
この記事は約6分で読めます。

はじめに

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とか。

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

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

 

master1.tf

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

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

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簡単らくちんでおすすめです。

スポンサーリンク
awsterraform
スポンサーリンク
hakenをフォローする
定年まで泣くんじゃない
タイトルとURLをコピーしました