Posted at

Terraform使ってEC2インスタンスにエフェメラルディスクを追加するぞい!

More than 3 years have passed since last update.


About

エフェメラルディスクを使いたいという話があったので、Terraformでやってみました!


エフェメラルディスクについて


これは何?

こちらから引用


Ephemeral Diskとは、インスタンスストア(Instance Store)とも呼ばれる、揮発性のストレージです。揮発性なので、EC2インスタンスを停止するとデータは削除されます。

EC2インスタンスが稼働する物理ホストのディスクアレイの一部を切り出してアタッチするので、ネットワーク経由でアタッチされるEBSと比較して速度が早いという特徴があります。そして何より、利用料金はEC2インスタンスのランニングコストの中に含まれているため、実質追加コストなしで使うことが出来るので非常にお得なのです。

上記の特性より、Ephemeral Diskはworkerなどで処理用の一時データを置いておく場所として最適です。消えちゃ困るデータの長期保存はEBSですね。


http://blog.serverworks.co.jp/tech/2014/11/28/use-ephemeral-disk-as-swap/


利用用途


  • swap

  • 消えてもよい大きめのデータ

  • 速度が求められるデータ


使う上での注意


追加するぞい!

こんな感じです。

resource "aws_instance" "web-1c" {

ami = "${var.web_ami}"
instance_type = "m3.medium"
key_name = "${var.key_name}"
security_groups = ["${aws_security_group.web.id}"]
subnet_id = "${aws_subnet.1c-public.id}"
iam_instance_profile = "${var.project_name}-instance"
count = 1
root_block_device {
delete_on_termination = "true"
}
ebs_block_device {
device_name = "/dev/xvdb"
volume_type = "gp2"
volume_size = "16"
}
ephemeral_block_device {
device_name = "/dev/xvdc"
virtual_name = "ephemeral0"
}
tags {
Name = "${var.stage}-web"
Project = "${var.project_name}"
Stage = "${var.stage}"
Roles = "app,web"
}
}

ephemeralディスクは設定が間違っていなければ、cloud-initによって自動で/mntにマウントされました。

番外編としてebs_block_deviceの追加を試してみたところ、volumeはattachされてますが、自動でfilesystemの作成、マウントはされなかったのでcloud-initとかでやればいいのかなと思います。