今回の投稿内容は、AWS Advent Calendar 2014 になります。
AWS Advent Calendar 2014
今回の取り上げるテーマ – EIP
今回はElastic IP アドレス (EIP)を取り上げます。EIPを付ける際はどうされてますか?
私は先ほど仕事で10個EC2インスタンスにEIPをつけようとしました。
yumによるインストールするによりリポジトリと通信を行うためです。
Managment Consoleでの選択してEIPを設定するのは正直手間がかかりました。
Managment Consoleでの作業
発行されたEIPで接続するために、sshのconfigを作成したり
EC2へのインストール作業後にEIPを外す作業もなかなか手間がかかるものです。
Terraformによるeipのオーケストレーション
最近Terraformを覚えたので、もしかしたらそちらでできるのではないかと思いつきました。
すると調べたところ、作業が簡単になる見込みがありました。
HashicoprのTerraformにより、一斉設定を行います。
Terraformファイルの準備
[01:41:52][f_prg@mba:eip]# cat eip.tf provider "aws" { access_key = "XXXXXXXXXXXXXXXXXXXX" secret_key = "YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY" region = "ap-northeast-1" } resource "aws_eip" "hoge" { instance = "i-AAAAAAAAA" vpc = true }
resource “aws_eip”
の4行を複数記述すれば、複数のインスタンスに実行ができるようになります。
Terraformの実行
[01:41:53][f_prg@mba:eip]# terraform plan Refreshing Terraform state prior to plan... The Terraform execution plan has been generated and is shown below. Resources are shown in alphabetical order for quick scanning. Green resources will be created (or destroyed and then created if an existing resource exists), yellow resources are being changed in-place, and red resources will be destroyed. Note: You didn't specify an "-out" parameter to save this plan, so when "apply" is called, Terraform can't guarantee this is what will execute. + aws_eip.hoge allocation_id: "" => "" association_id: "" => " " domain: "" => " " instance: "" => "i-AAAAAAAAA" private_ip: "" => " " public_ip: "" => " " vpc: "" => "1" [01:41:58][f_prg@mba:eip]# terraform apply aws_eip.hoge: Creating... allocation_id: "" => " " association_id: "" => " " domain: "" => " " instance: "" => "i-AAAAAAAAA" private_ip: "" => " " public_ip: "" => " " vpc: "" => "1" aws_eip.hoge: Creation complete Apply complete! Resources: 1 added, 0 changed, 0 destroyed. The state of your infrastructure has been saved to the path below. This state is required to modify and destroy your infrastructure, so keep it safe. To inspect the complete state use the `terraform show` command. State path: terraform.tfstate
各々のインストールはchefやansibleで行います。
今回は割愛します。
EIPが付いているので、packageやyumによる
パッケージインストールができるようになります。
Terraform destroyの破棄
EIPが解放されます。
[01:48:18][f_prg@mba:eip]# terraform destroy Do you really want to destroy? Terraform will delete all your managed infrastructure. There is no undo. Only 'yes' will be accepted to confirm. Enter a value: yes aws_eip.hoge: Refreshing state... (ID: eipalloc-AAAAAAAAA) aws_eip.hoge: Destroying... aws_eip.hoge: Destruction complete Apply complete! Resources: 0 added, 0 changed, 1 destroyed.
まとめ
- public ipを付与できないEC2インスタンスには有効です。
- EC2インスタンスIDを入力するのはまだ手間がかかりました。
- プライベートサブネット配下のEC2インスタンスにインストール作業するときに大変便利だなぁと思いました。
- Terraformファイルを作成する工夫でもっと簡単になるのかとも思いました。
元記事はこちらです。
「AWS Advent Calendar 2014 | f_prgのブログです。」