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를 구성한다.
참고
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
참고
앞서 확인한 "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 등의 과정을 확인할 수 있다.
'IaC > Terraform' 카테고리의 다른 글
Terraform Cloud Drift Detection이란? (0) | 2024.03.05 |
---|---|
Terraform Cloud를 활용한 Kubernetes Provider 동적 자격 증명 구성(Dynamic Provider Credentials) (0) | 2024.01.09 |
Terraform Cloud를 활용한 AWS Provider 동적 자격 증명 구성(Dynamic Provider Credentials) (0) | 2024.01.09 |
Terraform + Vault AWS AssumeRole 연동 (0) | 2023.04.24 |
Terraform Local -> Terraform Cloud로 마이그레이션 (0) | 2023.04.06 |
댓글