★★cloudNet@ 팀의 가시다 님이 진행하는 Terraform 101 Study 4기 내용과 한빛미디어 테라폼으로 시작하는 IaC 책을 참고하여 정리하였습니다. |
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/014.gif)
Terraform Backend : AWS S3 + DynamoDB
▶ [악분님] 실습 따라하기
1. 리모트 공용 저장소 AWS S3 생성
2. 테라폼 자원 배포 시 '리모트 백엔드 저장소' 설정 사용
: VPC 개수는 리전 단위로 최대 5개로 제한되므로 error 발생.
3. [사전준비2] Locking을 위한 DynamoDB 활용을 위해 DynamoDB 생성
- 테라폼에서 DynamoDB 잠금을 사용하기 위해서는 LockID 라는 기본 키가 있는 테이블을 생성해야됨
4. 2번 테라폼 자원 배포에 백엔드 설정 수정 및 적용
▶ 테라폼 백엔드 단점
워크스페이스
▶ 상태 파일 격리 소개 State File isolation
- 테라폼 상태를 격리하지 않았을 때 발생하는 일
- 환경을 격리하는 방법
1. 작업 공간을 통한 격리 Isolation via workspaces
: 동일한 구성에서 빠르고 격리된 테스트 환경에 유용
2. 파일 레이아웃을 이용한 격리 Isolation via file layout
: 보다 강력하게 분리해야 하는 운영 환경에 적합
: 테라폼 프로젝트의 파일 레이아웃 설명
- 각 테라폼 구성 파일을 분리된 폴더에 넣기(예. stage, prod)
- 각 환경에 서로 다른 백엔드 구성(예. S3 버킷 백엔드의 AWS 계정을 분리)
* 최상위 폴더
- Stage : 테스트 환경과 같은 사전 프로덕션 워크로드 workload 환경
- prod : 사용자용 맵 같은 프로덕션 워크로드 환경
- mgmt : 베스천 호스트 Bastion Host, 젠킨스 Jenkins와 같은 데브옵스 도구 환경
- global : S3, IAM과 같이 모든 환경에서 사용되는 리소스를 배치
* 각 환경별 구성 요소
- vpc : 해당 환경을 위한 네트워크 토폴로지
- services : 해당 환경에서 서비스되는 애플리케이션, 각 앱은 자체 폴더에 위치하여 다른 앱과 분리
- data-storage : 해당 환경 별 데이터 저장소. 각 데이터 저장소 역시 자체 폴더에 위치하여 다른 데이터 저장소와 분리
* 명명 규칙 naming conventions (예시)
- variables.tf : 입력 변수
- outputs.tf : 출력 변수
- main-xx.tf : 리소스 -> 개별 테라폼 파일 규모가 커지면 특정 기능을 기준으로 별도 파일로 분리 혹은 모듈 단위로 나눔
- dependencies.tf : 데이터 소스
- providers.tf : 공급자
- 테라폼 구성 파일은 동일하지만 작업자는 서로 다른 State를 갖는 실제 대상을 프로비저닝할 수 있다
- 워크스페이스는 기본 default로 정의.
로컬 작업 환경의 워크스페이스 관리를 위한 CLI 명령어로 workspacerk dlTek
terraform workspace list
* default
: mywork 워크스페이스 신규 생성 시 terraform.tfstate.d 서브에 있는 mywork1 의 terraform.tfstate 파일 사용
[장점]
- 하나의 루트 모듈에서 다른 환경을 위한 리소스를 동일한 테라폼 구성으로 프로비저닝하고 관리
- 기존 프로비저닝된 환경에 영향을 주지 않고 변경 사항 실험 가능
- 깃의 브렌치 전략처럼 동일한 구성에서 서로 다른 리소스 결과 관리
[단점]
- State가 동일한 저장소(로컬 또는 백엔드)에 저장되어 State 접근 권한 관리가 불가능
- 모든 환경이 동일한 리소스를 요구하지 않을 수 있으므로 테라폼 구성에 분기 처리가 다수 발생 가능
- 프로비저닝 대상에 대한 인증 요소를 완벽히 분리하기 어려움
> 가장 큰 단점은 완벽한 격리가 불가능
> 해겨하기 위해 루트 모듈을 별도로 구성하는 디렉터리 기반의 레이아웃을 사용할 수 있다 or
Terraform cloud 환경의 워크스페이스를 활용
* 악분님 실습 참고
https://developer.hashicorp.com/terraform/language/settings/backends/s3
Backend Type: s3 | Terraform | HashiCorp Developer
Terraform can store state remotely in S3 and lock that state with DynamoDB.
developer.hashicorp.com
도전
[도전과제1] AWS의 2개의 리전에서 리소스를 배포하는 테라폼 코드를 작성해보세요!
[도전과제2] 각자 현업 업무에 관련된 프로바이더를 사용하여 리소스를 배포해보세요!
[도전과제3] AWS Terraform 관련 Workshop & Best Practices 을 직접 실습 후 정리해보세요.
- Introduction to Terraform on AWS - Link
- EKS Blueprints for Terraform workshop studio - Link
- Amazon EKS Blueprints for Terraform - Link Github - 링크
- Managing Cloud Resources with Terraform - Link
- EKS Terraform Workshop - Link / Youtube - Link
- AWS TERRAFORM WORKSHOP : v0.15.1, ‘20, - 링크
- [AWS Partnet Solutions] Terraform modules - 링크
'스터디 > Terraform' 카테고리의 다른 글
[Terraform T101 4기 스터디] - 테라폼으로 AWS EKS 배포 (0) | 2024.07.22 |
---|---|
[Terraform T101 4기 스터디] - Module & Runner (0) | 2024.07.08 |
[Terraform T101 4기 스터디] - Provider & State (0) | 2024.07.01 |
[Terraform T101 4기 스터디] - 기본 사용 (3)_2 (0) | 2024.06.24 |
[Terraform T101 4기 스터디] - 기본 사용 (3)_1 (0) | 2024.06.24 |