cloudpack古渡晋也(@f_prg)です。

今回の投稿内容は、AWS Advent Calendar 2014 になります。

AWS Advent Calendar 2014

今回の取り上げるテーマ – EIP

今回はElastic IP アドレス (EIP)を取り上げます。EIPを付ける際はどうされてますか?
私は先ほど仕事で10個EC2インスタンスにEIPをつけようとしました。
yumによるインストールするによりリポジトリと通信を行うためです。
Managment Consoleでの選択してEIPを設定するのは正直手間がかかりました。

Managment Consoleでの作業

AWS Advent Calendar 2014 〜 Elastic IP アドレス(EIP)のお話: Management 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のブログです。