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
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
Import : 현재 있는 인프라스트럭쳐를 terraform 으로 가져오는 방법. 현재는 오직 리스소를 state 파일로만 임포트하는 것만 가능하며 설정 파일은 직접 만들어야 한다. A future version of Terraform will also generate configuration.
Advanced Tracks
Developer
자동으로 Terraform 실행하기
...