Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents


이 문서는 https://learn.hashicorp.com/terraform/  자료를 기반으로 간단히 만든 문서입니다.

...

https://www.terraform.io/intro/index.html : Terraform is a tool for building, changing, and versioning infrastructure safely and efficiently. Terraform can manage existing and popular service providers as well as custom in-house solutions.


클라우드 뿐만 아니라 다양한 인프라스트럭처 리소스를 지원합니다.

https://www.terraform.io/docs/providers/


실습하기 : https://learn.hashicorp.com/terraform/ 

...

terraform 버전이 다른 경우 실행을 할 때 에러가 날 수 있음. 해당 provider 의 릴리즈 노트를 참고해야 하는 경우도 있음. 

빌드 인프라스트럭처

AWS 환경설정

terraform에서 AWS credentials(access_key, secret_key)를 설정하지 않으면 terraform에서는 자동으로  ~/.aws/credentials 등의 디렉토리에서 API credentails를 찾거나 IAM instance profile credentials 에서 찾는다. Terraform 코드에서 IAM credentials를 저장하지 않는 것이 보안상으로 안전하다.

https://docs.aws.amazon.com/ko_kr/general/latest/gr/aws-access-keys-best-practices.html


여러 개의  AWS Account  를 가지고 있는 경우  Named Profiles 를 이용하면 편리하다.

https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/cli-configure-profiles.html


aws cli 를 설치하여 정상 작동하는지 확인을 한다. 

https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/cli-chap-install.html

https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/cli-chap-configure.html


example.tf 

Code Block
provider "aws" {
  region     = "ap-northeast-2"
}

resource "aws_instance" "example" {
  ami           = "ami-a414b9ca" # Canonical, Ubuntu, 16.04 LTS, amd64 xenial image build on 2018-03-06
  instance_type = "t2.micro"

  tags = {
    Name = "your_name"
    Owner = "your_name"
    Environment = "staging"
  }
}

...

Code Block
resource "aws_eip" "ip" {
  instance = "${aws_instance.example.id}"
}


명시적/비명시적 의존성

depends_on argument

Code Block
# New resource for the S3 bucket our application will use.
resource "aws_s3_bucket" "example" {
  # NOTE: S3 bucket names must be unique across _all_ AWS accounts, so
  # this name must be changed before applying this example to avoid naming
  # conflicts.
  bucket = "terraform-getting-started-guide"
  acl    = "private"
}

# Change the aws_instance we declared earlier to now include "depends_on"
resource "aws_instance" "example" {
  ami           = "ami-2757f631"
  instance_type = "t2.micro"

  # Tells Terraform that this EC2 instance must be created only after the
  # S3 bucket has been created.
  depends_on = ["aws_s3_bucket.example"]
}

...

변수할당하기 : 커맨드 라인 플래그, 파일, 환경변수(TF_VAR_name), UI input. default 를 설정한 경우 기본값 사용.


Lists

Code Block
# implicitly by using brackets [...]
variable "cidrs" { default = [] }

# explicitly
variable "cidrs" { type = "list" }

...

Code Block
terraform {
  backend "consul" {
    address = "demo.consul.io"
    path    = "getting-started-RANDOMSTRING"
    lock    = false
  }
}

Next Steps

Documentation

Examples

Import : 현재 있는 인프라스트럭쳐를 terraform 으로 가져오는 방법. 현재는 오직 리스소를 state 파일로만 임포트하는 것만 가능하며 설정 파일은 직접 만들어야 한다. A future version of Terraform will also generate configuration.

Advanced Tracks

Developer

자동으로 Terraform 실행하기

...