250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- execute
- eager
- 지연로딩
- 다대일
- FetchType
- 일대다
- PS
- 동적sql
- dfs
- 비관적락
- JPQL
- 스프링 폼
- 연관관계
- querydsl
- shared lock
- 스토어드 프로시저
- 다대다
- 백트래킹
- SQL프로그래밍
- 연결리스트
- 유니크제약조건
- 즉시로딩
- 힙
- fetch
- 낙관적락
- 이진탐색
- exclusive lock
- 데코레이터
- BOJ
- CHECK OPTION
Archives
- Today
- Total
흰 스타렉스에서 내가 내리지
테라폼에서 *.tf 파일 설명 본문
728x90
나는 s3.tf 파일을 생성했고, 그 안에 들어있는 내용은 아래와 같다.
resource "aws_s3_bucket" "test" {
bucket = "terraform-cli-test-0123"
}
왜 첫줄에 이름이 두개이고, 왜 이러한 구조를 가지는 지 궁금했다.
# 리소스 정의
resource "aws_s3_bucket" "test" {
bucket = "terraform-cli-test-0123"
}
- 1. resource "aws_s3_bucket" "test"
- 이 줄은 Terraform 에게 aws s3 버킷 리소스를 생성하라고 지시한다.
- "aws_s3_bucket" 는 리소스 타입을 지정하고, "test" 는 이 리소스의 로컬 이름이다.
- 2. bucket = "terraform-cli-test-0123"
- 이 줄은 생성할 s3 버킷의 이름을 지정한다.
# 이 코드가 수행하는 일
- S3 버킷 생성
- 이 코드를 실행하면 aws에서 이름이 'terraform-cli-test-0123' 인 새로운 s3 버킷이 생성된다.
- 상태 파일 업데이트
- Terraform 은 이 리소스를 추적하기 위해 상태 파일에 이 버킷의 정보를 기록한다.
- 이를 통해 다음에 'terraform apply' 를 실행할 때, 이 버킷이 이미 존재함을 인식하고 중복 생성을 방지한다.
# Terrform 사용 예시
1. 초기화: Terrafrom 프로젝트 디렉토리에서 다음 명령어를 실행하여 필요한 플러그인과 모듈을 다운로드한다.
terraform init
2. 플랜 생성 : Terraform 이 어떤 작업을 수행할지 미리 본다.
terraform plan
3. 적용 : 실제로 인프라 리소스를 생성한다.
terraform apply
이 때, s3.tf 에서 "test" 의 역할이 무엇인가?
즉, `리소스의 로컬 이름` 이라는 것은 무엇이고 어떤 역할을 하는가?
Terraform 에서 리소스의 로컬 이름은 리소스를 참조하고 관리하는 데 중요한 역할을 한다.
# 로컬 이름의 역할
1. 고유 식별자 역할
- Terraform 은 같은 리소스 유형의 여러 인스턴스를 정의할 수 있다. 로컬 이름은 각 리소스를 구분하기 위한 고유 식별자로 사용된다.
- 예를 들어, 동일한 파일에서 2개의 s3 버킷을 정의할 수 있다. 로컬 이름을 통해 각 버킷을 식별할 수 있다.
resource "aws_s3_bucket" "test1" {
bucket = "terraform-cli-test-0123"
}
resource "aws_s3_bucket" "test2" {
bucket = "terraform-cli-test-0456"
}
2. 참조
- 다른 리소스나 모듈에서 이 리소스를 참조할 때 로컬 이름을 사용한다. 로컬 이름을 통해 해당 리소스의 속성에 접근할 수 있다.
- 예를 들어, 생성된 S3 버킷의 이름을 다른 리소스에서 참조할 수 있다.
resource "aws_s3_bucket_object" "test_object" {
bucket = aws_s3_bucket.test.bucket
key = "exampleobject"
content = "This is an example object"
}
위 코드는 버킷 내에 `객체` 를 생성해주는 tf 파일 내용이다.
3. 상태 파일 관리
- Terraform 은 상태 파일을 통해 리소스를 추적한다. 로컬 이름을 사용하여 상태 파일 내에서 특정 리소스를 추적하고 관리한다.
- 이는 `terraform apply` 명령을 실행할 때 Terraform 이 어떤 리소스가 이미 존재하는지, 어떤 리소스를 새로 만들어야 하는지, 어떤 리소스를 업데이트 해야 하는지를 결정하는 데 도움을 준다.
실제로 terraform state list 명령어를 실행했을 때, 로컬 이름으로 state 가 저장된 것을 볼 수 있다.
4. 모듈 간 충돌 방지
- 여러 모듈을 사용하는 경우 각 모듈 내에서 같은 리소스 타입을 사용하더라도 로컬 이름을 다르게 지정하여 충돌을 방지할 수 있다.
- 예를 들어, 두 모듈 내에서 각각 `aws_s3_bucket` 리소스를 정의하지만, 각 모듈 내에서 로컬 이름이 다르기 때문에 충돌이 발생하지 않는다.
# 예시 코드
resource "aws_s3_bucket_object" "test_object" {
bucket = aws_s3_bucket.test.bucket # "test" 로컬 이름을 사용하여 S3 버킷 참조
key = "exampleobject"
content = "This is an example object"
}
- `aws_s3_bucket.test.bucket`
- 로컬 이름 `test` 를 사용하여 `aws_s3_bucket` 리소스의 `bucket` 속성에 접근한다.
- 이렇게 하면 `aws_s3_bucket_object` 리소스가 올바른 s3 버킷에 객체를 추가할 수 있다.
# 결론
로컬 이름은 Terraform 구성에서 리소스를 식별하고 참조하며, 상태 파일을 관리하는 데 중요한 역할을 한다.
'DevOps' 카테고리의 다른 글
Terraform 을 이용하여 VPC 와 Subnet 생성 (0) | 2024.08.06 |
---|---|
AWS VPC 와 관련 개념, 콘솔을 통한 생성 실습 (0) | 2024.08.06 |
테라폼 작동원리 그리고 CLI 간단실습 (0) | 2024.08.01 |
AWS Configure 설정 (0) | 2024.07.30 |
terraform 설치하기 (0) | 2024.07.30 |