본문 바로가기
IaC/Terraform

Terraform Cloud Agent 개념 및 사용 방법

by wlsdn3004 2024. 2. 29.
728x90
반응형
Information Panel

참고

Terraform Cloud 무료 버전에는 자체 호스팅 Agent 1개가 포함되어 있다.

자세한 내용은 Terraform Cloud 가격 참조.

Terraform Cloud Agent란?

Terraform Cloud를 사용하면 자체 호스팅된 Terraform Cloud Agent를 통해 제한된 private 환경, 또는 온-프레미스 인프라를 관리할 수 있다. 이 Agent는 Terraform Cloud 또는 Terraform Enterprise의 구성 변경사항을 주기적으로 확인하고, 변경사항을 로컬에서 실행한다. 그래서 사용자의 리소스에 대한 공개적인 수신 트래픽을 허용할 필요가 없다.

 

아래 그림을 통해 동작 구조를 확인할 수 있다.

Networking Requirements

Agent가 정상 작동하려면 HTTPS(TCP 포트 443)를 통해 Terraform Cloud 애플리케이션 API에 아웃바운드 요청을 할 수 있어야 한다. 또한 실행 중인 Terraform 코드에 필요한 모든 서비스와 통신할 수 있어야 한다.

Hostname Port /Protocol Directionality Purpose
app.terraform.io tcp/443, HTTPS Outbound 새로운 워크로드 폴링, 상태 업데이트 제공, Terraform Cloud의 프라이빗 모듈 레지스트리에서 프라이빗 모듈 다운로드
registry.terraform.io tcp/443, HTTPS Outbound Terraform 레지스트리에서 공개 모듈 다운로드
releases.hashicorp.com tcp/443, HTTPS Outbound 에이전트 구성요소 업데이트 및 Terraform 바이너리 다운로드
archivist.terraform.io tcp/443, HTTPS Outbound Blob 저장소

 

 

이번 글에서는 Terraform Cloud Agent를 구성하고 "Plan & Apply"를 통해 Agent의 동작을 확인해보려 한다.

 

 

구성 환경

  • Docker 24.0.5
  • EC2 Instance (Amazon Linux 6.1.59-84.139.amzn2023.x86_64)

전제 조건

  • Terraform Cloud 계정
  • Terraform Cloud Agent를 사용할 Workspace 생성
  • Github VCS 연동
  • Docker 패키지 설치

 

1. Agent Pool 생성


Agent Pool은 토큰을 공유할 수 있는 에이전트 그룹이다. Workspace를 Agent Pool과 연결하면 Pool의 모든 Agent가 해당 Workspace에서 run을 실행할 수 있다. Agent Pool 생성을 위해서 다음 절차에 따라 진행한다.

 

  • Terraform Cloud 조직 화면으로 이동한다.
  • [Settings] 선택  → [Agents] 선택  → [Create agnet pool] 클릭

 

  • "Agnet Pool Name" 입력 → [Continue] 클릭

 

  • [Create token] 선택 →  토큰 정보 복사 [Finish] 클릭

위 [Create token]으로 생성된 agent token은 agent 컨테이너 실행할 때 사용되니 기록해 둔다.

 

Agent pool이 생성된 후 "Waiting for agents" 메세지를 확인할 수 있다.

해당 메세지는 agent가 등록되기 전 대기하는 상태로 agent가 실행되면 사라진다.

 

 

2. Workspace 구성


이제 Agent Pool을 사용하도록 "version-control-driven" 기반 Terraform Cloud workspace를 구성한다.

Information Panel

참고

workspace 생성 및 VCS 연동이 되어있다는 전제 하에 진행한다.

 

  • agent를 사용할 workspace로 이동한다.
  • [Settings] 선택 →  [General] 선택 →  "Custom" 선택  →  "Agent" 선택 →  [Save settings] 클릭

 

 

3. Agent 실행


Agent에서 사용할 환경 변수를 설정한다.

  • 해당 값은 agent pool 생성 때 [Create token]으로 생성된 값이다.
$ export TFC_AGENT_TOKEN={agnet token 입력}
$ export TFC_AGENT_NAME=agent1

 

Agent 컨테이너 실행 후 접근한다.

$ docker run -e TFC_AGENT_TOKEN -e TFC_AGENT_NAME hashicorp/tfc-agent:latest
$ docker exec -it -u 0 {agent_container_name} /bin/bash

 

Agent에 aws cli 도구를 설치한다.

$ wget -qO awscliv2.zip https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip && unzip awscliv2.zip && ./aws/install

 

설치된 aws cli 버전과 컨테이너 hostname을 확인한다.

# aws 버전 확인
$ aws --version
aws-cli/2.15.24 Python/3.11.6 Linux/6.1.59-84.139.amzn2023.x86_64 exe/x86_64.ubuntu.20 prompt/off

# hostname 확인
$ hostname
248dc3c3dbe3

 

Information Panel

참고

앞서 확인한 "aws cli 버전"과 "hostname"은 Terraform Cloud의 workspace에서 local-exec provisioner를 실행하여 실제 Terraform 동작이 agent 컨테이너에서 실행되는지 검증하기 위해 사용된다.

 

 

agent 컨테이너가 실행되면 Terraform Cloud Agent pool에 등록된 걸 확인할 수 있다.

  • Terraform Cloud 접근 →  조직 화면 접근  →  [Settings] 선택 →  [Agents] 선택

 

Agent workspace에서 실행할 코드를 작성한다.

  • local-exec provisioner는 Agent에서 실행될 command이다.
# terraform_data.tf
resource "terraform_data" "agent_aws_version" {
  provisioner "local-exec" {
    command = "aws --version"
  }
}

resource "terraform_data" "agent_hostname" {
  provisioner "local-exec" {
    command = "hostname"
  }
}

 

Agent workspace에 연동되어 있는 VCS(여기서는 github 사용)로 push 한다.

# git commit
$ git commit -am "agent test"

# git Push
$ git push origin main

 

Terraform Cloud Workspace의 run 화면으로 이동하여 실행된 화면을 확인한다.

실제 Terraform Cloud 실행 결과와 agent 컨테이너 내부 정보가 동일한 것을 확인할 수 있다.

 

Terraform Cloud에서 "Plan & Apply"가 실행될 때 실제 agent 컨테이너 내부로 들어가 프로세스를 확인하면 다음과 같이 terraform init, plan 등의 과정을 확인할 수 있다.

 

반응형

댓글