Terraform tutorial - 2. Build Infrastructure

2021. 9. 24. 11:18공부일기

[튜토리얼 링크]

 

Build Infrastructure | Terraform - HashiCorp Learn

Authenticate to AWS and create an EC2 instance under the AWS free tier. Write and validate Terraform configuration, initialize a configuration directory, and plan and apply a configuration to create infrastructure.

learn.hashicorp.com

 

 

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 3.27"
    }
  }

  required_version = ">= 0.14.9"
}

provider "aws" {
  profile = "default"
  region  = "us-west-2"
}

resource "aws_instance" "app_server" {
  ami           = "ami-830c94e3"
  instance_type = "t2.micro"

  tags = {
    Name = "ExampleAppServerInstance"
  }
}

 

위의 코드를 보면 aws 인스턴트의 기본적인 정보를 작서앟고 있다. region은 어디인지, 테라폼에 요구되는 버전은 무엇인지, type은 무엇인지 등등이 있다. 

 

Terrform Block

Terraform{} Block은 당신의 인프라를 provision하는데 사용할 필수 공급자를 포함해 Terraform 설정이 포함되어 있다. 내부에는 각각 provider, source를 정의되어 있고 선택적으로 hostname, namespace, provider type을 작성할 수도 있다. 테라폼은 기본적으로 provider를 Terraform Registry에 설치한다. 위의 내용을 예로 들자면 aws source의 정의는 hashicorp/aws로 되어있고 이는 registry.terraform.io/hashicorp/aws를 줄인 내용이다.

 

또한 required_providers에 강제적으로 버전을 설정해야한다. version은 옵션이지만 당신의 configuration이 작동하지 않는 버전을 설치하지 않도록 provider 버전을 제한하는 것이 좋습니다. 버전을 작성하지 않으면 Terraform이 최신버전을 자동으로 다운받을 것이니 version을 잘 작성해줍시다. 

 

Providers

Provider{} Block은 구체적인 provider를 작성하는 부분입니다. 위의 코드에서는 aws가 됩니다. provider는 플러그인으로 테라폼을 사용해 리소스를 만들거나 관라합니다.

 

aws provider 블록안에 있는 profile 속성은 aws 설정 파일 안에 있는 aws credentials 저장소를 조회한다. 절대로 Terraform 파일에 비밀 정보를 하드 코딩해서 작성하지 말아라. 다른 코드와 같이 이 파일들도 git이나 다른 공간에 공유되어서 사용될 수 있기 때문이다. 

 

하나의 Terraform 안에 다수의 provider blocks를 작성할 수 있고 심지어 다른 provider를 사용할 수 있다. (gcp, azure, aws 동시에 사용할 수 있다는 뜻인 것 같다.)

 

Resources

Provider {} block은 infrastructure의 componenets를 정의하기도 한다. resource는 아마도 EC2와 같은 물리적이나 가상적인 컴포넌트일 것이다. 

 

위의 예제에서 resource의 경우 두가지의 스트링을 갖고 있다. 앞은 resource type, 뒤가 resource name이다. resource type과 resource name이 합쳐져서 유니크한 ID를 만듭니다. 위에서는 aws_instance.app_server가 됩니다. 

 

Resource block은 resource의 설정을 하기위한 정보들이 포함되어 있습니다. ex) machine size, disk imagename, VPC IDs. 그리고 리소스 별로 설정해야하는 정보를 보려면 이 사이트에 방문해야한다. 

'공부일기' 카테고리의 다른 글

09/29 AWS 공부(ECR, Kinesis firehose, S3 buckets)  (0) 2021.09.29
Git Ops  (0) 2021.09.24
Terraform tutorial - 1 IaC, Terraform  (0) 2021.09.24
9월 17일 공부  (0) 2021.09.17
09월 16일 공부일기  (0) 2021.09.16