교육, 커뮤니티 후기/T101(Terraform 101 Study) 스터디

T101(Terraform 101 Study) 6주차

Somaz 2023. 10. 14. 21:51
728x90
반응형

Overview

이번주는 CloudNet@에서 진행하시는 T101(Terraform 101 Study) 스터디 5주차이다.

블로그 내용은 `테라폼으로 시작하 IaC` 책을 기준으로 정리하였다.

출처 : https://developer.hashicorp.com/terraform/tutorials/aws-get-started/infrastructure-as-code

 

모든 실습내용은 아래의 github에 정리하였다.
https://github.com/somaz94/t101-study

 

GitHub - somaz94/t101-study: t101-study

t101-study. Contribute to somaz94/t101-study development by creating an account on GitHub.

github.com

 


 

Terraform Cloud (TFC)

 


 

TFC

워크플로 구성 환경 제공, Github Action 보다 자유도는 낮지만 VCS연동, 변수 구성, RBAC,  원격 실행 환경 등의 기능 활용가능하다.

 

다음 저장소 포크 : https://github.com/terraform101/terraform-aws-tfc-workflow

  • terraform 블록에 지정된 cloud 백엔드의 organization 의 값을 소유한 이름으로 변경
terraform login

MyGit=<>
MyGit=somaz94
git clone https://github.com/$MyGit/terraform-aws-tfc-workflow
cd terraform-aws-tfc-workflow

MyTfcOrg=<각자 자신의 TFC 조직명>
MyTfcOrg=somaz-org
sed -i -e "s/<MY-ORG>/$MyTfcOrg/g" main.tf

git add main.tf
git commit -m "init"
git push

terraform init

TFC 생성 워크스페이스에 Execution Mode를&nbsp;Remote로 유지

 

 

Terraform Cloud/Enterprise의 워크스페이스 실행 모드 구분

  • `테라폼으로 시작하 IaC ` 책 참고
  Local Remote
실행 위치 테라폼 실행 환경(로컬 작업자 환경)에서 프로비저닝 수행 Terraform Cloud/Enterprise 환경에서 독립된 원격 실행 환경 부여
입력 변수 로컬 환경의 terraform.tfvars를 읽고 실행 시 입력 가능 UI에서 작성된 변수를 읽고 *.auto.tfvars 형태의 구성에서 입력 받음
Apply 승인 로컬 작업자가 `yes` 입력 CLI 수행한 경우 `yes` 입력 또는 UI/API로 승인

 

TFC 생성 워크스페이스에 Execution Mode를 Remote로 했기 때문에 Error가 발생한다.

terraform plan
Running plan in Terraform Cloud. Output will stream here. Pressing Ctrl-C
will stop streaming the logs, but will not stop the plan running remotely.

Preparing the remote plan...

To view this run in a browser, visit:
https://app.terraform.io/app/somaz-org/terraform-aws-tfc-workflow/runs/run-ifokyBvYiBwGuWFh

Waiting for the plan to start...

Terraform v1.5.6
on linux_amd64
Initializing plugins and modules...
╷
│ Error: No value for required variable
│
│   on variables.tf line 1:
│    1: variable "prefix" {
│
│ The root module input variable "prefix" is not set, and has no default
│ value. Use a -var or -var-file command line argument to provide a value for
│ this variable.
╵
Operation failed: failed running terraform plan (exit 1)

 

따라서 TFC 환경과 같이 중앙 실행 관리 환경을 사용하면 민감한 정보를 공유하거나 로컬에 저장하지 않고 안전하게 사용할 수 있다.

 

`Create variable set` 후  `+ADD variable로 입력`

  • Prefix : Type(Terraform variable), Key(prefix), value(사용자 닉네임)
  • Access Key ID : Type(Environment variable), Key(AWS_ACCESS_KEY_ID), value(자신의 값)
  • Secret Access Key : Type(Environment variable), Key(AWS_SECRET_ACCESS_KEY), value(자신의 값), Sensitive 선택

 

`plan` 후 `apply` 

terraform plan
Running plan in Terraform Cloud. Output will stream here. Pressing Ctrl-C
will stop streaming the logs, but will not stop the plan running remotely.

Preparing the remote plan...

To view this run in a browser, visit:
https://app.terraform.io/app/somaz-org/terraform-aws-tfc-workflow/runs/run-jWpqzfKLwdXr3xT7

Waiting for the plan to start...

Terraform v1.5.6
on linux_amd64
Initializing plugins and modules...
data.aws_ami.ubuntu: Refreshing...
data.aws_ami.ubuntu: Refresh complete after 1s [id=ami-09cb01cc28a9bd950]

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the
following symbols:
  + create

Terraform will perform the following actions:

  # aws_eip.hashicat will be created
  + resource "aws_eip" "hashicat" {
...

 

`apply` 후에 바로 yes 를 하면안된다. 그럼 아래와 같은 화면을 볼 수 있다.

 

`See details` 를 클릭하면 아래와 같은 화면을 볼 수 있다.

 

`apply` 완료 되면, 아래와 같이 Resource를 볼 수 있다.

 

 

리소스 삭제

terraform destroy -auto-approve

 

리소스 삭제가 완료되면 TFC에서도 사라진다.

 


TFC 권한 관리

Standard plan 이상 필요로 skip 한다.

 

 


 

TFC + VCS 연계

VCS와 직접 통합되어 별도 워크플로 작성 없이도 풀 리퀘스트에 대한 Plan 결과를 확인할 수 있으며 지정된 브랜치에 병합이 발생하면 테라폼을 실행하는 자동화된 구성이 가능하다.

 

지원되는 VCS는 아래와 같다.

  • Github.com / Github.com (OAuth) / Github Enterprise
  • Gitlab.com / Gitlab EE와 CE
  • Bitbucket Cloud / Bitbucket Server
  • Azure DevOps Server / Azure DevOps Services

 

여기서는 Github.com 와 연동해본다 - [Docs]

  • TFC Org → [Settings] → [Version Control] 탭의 Provider ⇒ [Add a VCS provider] 클릭 : Github.com (Custom) 선택 후 → [register a new OAuth Application] 클릭
    • 아래 내용 입력 → 하단 [Register application] 클릭
On GitHub, register a new OAuth Application. Enter the following information:

Application name:	Terraform Cloud (somaz-org)
Homepage URL:	https://app.terraform.io
Application description:	Any description of your choice
Authorization callback URL:	https://app.terraform.io/auth/4e92098c-1f79-44a9-af4f-2bbeda0366a1/callback

 

 

 

 

대상 VCS와의 인증 및 권한 처리가 완료 되었으므로 다음 과정을 통해 워크스페이스에 VCS를 연계, 워크스페이스는 Admin 권한으로 수행한다.

  • 워크스페이스 선택 → Setting → Version Control 선택 ⇒ [Connect to version control] 클릭

 

1. Version control workflow 선택

 

2. 연동된 VCS목록에서 [My Github.com] 선택

3. 포크된 저장소 선택

4. Confirm changes :

  • Apply Method : [Auto Apply]

5. VCS Triggers :

    1. Automatic Run Triggering : [Always trigger runs 선택]
    2. VCS branch(main 입력)
    3. Pull Request(Automatic… 체크)

출처 : CloudNet@ 스터디

 

워크스페이스와 VCS간 최초 연동되면 마지막 커밋내용을 기반으로 Run이 실행된다.

[Run] 메뉴로 이동해 깃허브에 의해 트리거링된 정보를 확인하고 Apply를 실행한다.

 

`main.tf` 파일 수정 : terraform.cloud 블록 주석 처리 ← VCS 연동으로 더 이상 필요하지 않다.

terraform {
  # cloud {
  #   organization = "somaz-org"
  #   hostname     = "app.terraform.io" # default

  #   workspaces {
  #     name = "terraform-aws-tfc-workflow"
  #   }
  # }
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 4.0"
    }
  }
}

 

tfc-workflow 브랜치 생성, 커밋, 푸시

git branch -M tfc-workflow
git add .
git commit -m "tfc workflow"
git push origin HEAD

 

자신의 github 에서 PR 생성 → Merge pull request : Confirm

 

 

TFC에서 생성된 리소스 삭제 : TFC 워크스페이스 Setting → Destruction and Delete ⇒ Queue destroy plan 로 생성된 리소스 삭제

 

 

실습 완료 후 최종 삭제

  1. TFC Workspace 삭제
  2. TFC Provider 삭제
  3. Github Repo 삭제
  4. 로컬에 Repo 디렉터리 삭제
  5. OAuth Application 삭제
  6. (옵션) 임시로 AWS IAM 생성 했을 경우, AWS IAM 계정 삭제

TFC Workspace 삭제

 

TFC Provider 삭제

 

Github Repo 삭제
로컬에 Repo 디렉터리 삭제

 

OAuth Application 삭제

 


Reference

https://developer.hashicorp.com/terraform/cloud-docs/vcs/github

 

 

728x90
반응형