[AWS] Terraform에서 기본 EBS 최적화 EC2 인스턴스를 생성할 때의 주의 사항

13446 단어 EC2TerraformAWS

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 설정은 특별히 언급하지 않지만 EBS 최적화는 True입니다.

    Terraform에서 기본 EBS 최적화 인스턴스를 작성해 봅니다.



    이번 문제가 된 것은 Terraform에서 EC2 인스턴스를 작성한 경우입니다.

    유효성 검사로 다음 tf 파일을 만듭니다.

    VPC나 서브넷등의 네트워크 주위의 리소스를 준비해, 그 위에 EC2 인스턴스를 1대 기동하는 심플한 내용입니다.

    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가 되어 버리고 있습니다.

    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"
      }
    }
    

    이 설정으로 적용하면 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 툴로 스펙 다운 할 때의 주의점

    기타 참고


  • Terraform에서 최신 Amazon Linux 2 AMI ID를 획득하여 EC2 구축
  • 좋은 웹페이지 즐겨찾기