LoginSignup
1
1

More than 3 years have passed since last update.

[AWS] TerraformでデフォルトEBS最適化のEC2インスタンスを作成するときの注意点

Posted at

TL;DR

デフォルトでEBS最適化となるインスタンスタイプでは、AWSコンソール上はEBS最適: FalseでもEBS最適化は有効となっている(らしい)。
TerraformでEC2インスタンスを作成するときは、ebs_optimizedの指定を気にしなくてもよさそう。

検証環境

  • macOS Catalina
  • Terraform v0.12.20

EBS最適化とは

EC2インスタンスの記憶領域にはEBSを割り当てることができ、インスタンスとEBSはネットワークで接続しています。
EBS最適化とは、このネットワークに専用帯域を割り当てることです。

EC2のインスタンスタイプによって、EBS最適化を利用できるかどうかが決まっており、利用できるタイプの中でも最適化の設定がデフォルトで有効になっているものとインスタンス作成時に明示的に設定する必要があるものが存在します。

Amazon EBS – 最適化インスタンス

開発環境や検証でよく利用するt系のインスタンスでは、t3シリーズからEBS最適化がデフォルトで有効となっています。
下図は、AWSコンソールからt3-microのEC2インスタンスを起動した際の、インスタンスの情報です。

ebs_true.png

起動時にEBSの設定には特に触っていませんが、EBS最適化はTrueとなっています。

TerraformでデフォルトEBS最適化のインスタンスを作成してみる

今回問題となったのは TerraformからEC2インスタンスを作成した場合です。

検証として、以下のtfファイルを作成します。

VPCやサブネット等のネットワーク周りのリソースを用意し、その上でEC2インスタンスを一台起動するシンプルな内容です。

main.tf
provider "aws" {
  version = "~> 2.0"
  profile = "default"
  region  = "ap-northeast-1"
}

resource "aws_vpc" "main" {
  cidr_block = "10.0.0.0/16"

  tags = {
    Name = "sample_vpc"
  }
}

resource "aws_subnet" "public" {
  vpc_id            = "${aws_vpc.main.id}"
  cidr_block        = "10.0.0.0/24"
  availability_zone = "ap-northeast-1a"

  tags = {
    Name = "sample_public_subnet"
  }
}

resource "aws_internet_gateway" "main" {
  vpc_id = "${aws_vpc.main.id}"

  tags = {
    Name = "sample_internet_gateway"
  }
}

resource "aws_route_table" "main" {
  vpc_id = "${aws_vpc.main.id}"

  route {
    cidr_block = "0.0.0.0/0"
    gateway_id = "${aws_internet_gateway.main.id}"
  }

  tags = {
    Name = "sample_route_table"
  }
}

resource "aws_route_table_association" "public" {
  subnet_id      = "${aws_subnet.public.id}"
  route_table_id = "${aws_route_table.main.id}"
}

resource "aws_security_group" "ec2" {
  name        = "sample-ec2-sg"
  description = "This is sample"
  vpc_id      = "${aws_vpc.main.id}"

  ingress {
      from_port   = 22
      to_port     = 22
      protocol    = "tcp"
      cidr_blocks = ["0.0.0.0/0"]
  }
  egress {
      from_port   = 0
      to_port     = 0
      protocol    = "-1"
      cidr_blocks = ["0.0.0.0/0"]
  }
  tags = {
    Name = "sample_ec2_security_group"
  }
}

data "aws_ssm_parameter" "latest_amzn2_ami" {
  name = "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2"
}

resource "aws_instance" "sample" {
  ami                    = "${data.aws_ssm_parameter.latest_amzn2_ami.value}"
  instance_type          = "t3.micro"
  vpc_security_group_ids = ["${aws_security_group.ec2.id}"]
  subnet_id              = "${aws_subnet.public.id}"
  # 各々のキーペアに置き換え
  key_name               = "your-key-pair"

  tags = {
    Name = "sample_ec2_instance"
  }
}

terraform applyコマンドでAWSリソースを作成します。

terraform apply

作成されたEC2インスタンスの情報をコンソールから確認すると、

ebs_false.png

EBS最適化の項目がFalseになってしまっています。

EBS最適化をTrueにするには

ebs_optimized = trueオプションを追加しましょう。

resource "aws_instance" "sample" {
  ami                    = "${data.aws_ssm_parameter.latest_amzn2_ami.value}"
  instance_type          = "t3.micro"
  vpc_security_group_ids = ["${aws_security_group.ec2.id}"]
  subnet_id              = "${aws_subnet.public.id}"
  # 各々のキーペアに置き換え
  key_name               = "your-key-pair"
  ebs_optimized          = true  # 追加

  tags = {
    Name = "sample_ec2_instance"
  }
}

この設定でapplyすれば、AWSコンソール上でもEBS最適化の項目がTrueになります。

EBS最適化がFalseでもEBS最適化は無効にはなっていない?

EBS 最適化 (デフォルト)
次の表は、EBS 最適化をサポートするインスタンスタイプを示します。EBS 最適化はデフォルトで有効になっています。EBS 最適化を有効にする必要はなく、EBS 最適化を無効にすると効果はなくなりません。

こちらのAWSのドキュメントによると、デフォルトEBS最適化のインスタンスはEBS最適化を無効にしようとしても無効にはならないようです。

(実際にパフォーマンスを比較したりはしていないので、100%は言い切れません...)

Terraformのドキュメントにも下記のように記載がありますね。

Note that if this is not set on an instance type that is optimized by default then this will show as disabled but if the instance type is optimized by default then there is no need to set this and there is no effect to disabling it.

また、インスタンスタイプを変更する場合に次のような注意点があることから、ebs_optimizedは指定しないほうが無難かもしれません。

【小ネタ】EBS最適化インスタンスをCLIツールでスペックダウンするときの注意点

その他参考

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1