반응형
* 참조 사항
- 필자는 학습을 목적으로 main.tf에 전체 인프라 구축 코드를 작성하였으며, 이에 대해 각기 설명함
- .tf 파일을 resource 별로 분할할 시, 필자와 코드가 다를 수 있음
- Terraform 기초부터 순차적으로 보길 권장 (https://isc9511.tistory.com/163)
* Bucket
- 용량이 무한(이론상)한 저장소로, Local, Bucket, Resource 등 각각의 장소에서 리소스의 업로드, 다운로드를 지원
* Code 내용
- 로컬에 특정 파일(디렉터리)를 생성된 Bucket으로 업로드
- Bucket 생성 -> 다수 파일(디렉터리)의 재귀적 업로드
- 해당 Bucket은 외부로 Open되지 않은 Private한 Bucket으로 내부 Infra resource와의 통신을 목적으로 사용
# Bucket 생성
resource "aws_s3_bucket" "app-code-bucket" {
bucket = "three-tier-code-bucket" # AWS에 생성될 실제 버킷 이름 지정
acl = "private" # Private Bucket으로 생성
# bucket 리소스 코드 내에서 acl할당 시, warning이 뜨는 이유는 별도 리소스로 acl 설정을 권고하기 때문
# 사용에 지장은 없음
}
# Local에 존재하는 파일(디렉터리)를 생성된 Bucket으로 업로드
resource "aws_s3_bucket_object" "app-code-files" {
for_each = fileset("C:/파일이 존재하는 경로명/", "**")
# fileset : 지정 경로에 대한 파일 이름 집합 열거
# ** : fileset 함수에서 재귀 검색 패턴 적용
# * : 재귀 검색 없이 단일 검색 패턴으로 적용 시 폴더는 업로드 되지 않음
# for_each : fileset 함수에서 반환된 문서에 대한 반복을 수행하는 인수
bucket = aws_s3_bucket.app-code-bucket.id
# 업로드 할 Bucket 지정
# .id 를 통해 생성하기로 한 버킷에 대한 자동 인식
key = each.value
# key = bucket에 업로드 시, 지정되는 객체의 이름
# each.value : 업로드 할 각 파일(폴더)명을 그대로 식별하도록 지정
source = "C:/파일이 존재하는 경로명/${each.value}"
# 업로드 대상에 대한 출처(경로) 지정 및 내부 파일(폴더)들을 각각 지정
}
* 코드 핵심
- Bucket은 결국 Resource의 업/다운로드가 핵심 목적이므로 다수의 파일과 디렉터리를 옮기려면 재귀적으로 Resource 지정이 필수적
- Terraform Code에서는 for_each, **, ${each.value} 를 통해 Recursive하게 Resource를 업로드 해야함
- Bucket에서 다운로드도 마찬가지로 Recursive하게 가능 (aws s3 cp ... --recursive 방식)
반응형
'AWS Cloud' 카테고리의 다른 글
[AWS - Terraform] Network Setting (VPC, Subnet, IGW, NGW, Routing table, Security Group) (2) | 2023.03.28 |
---|---|
[AWS - Terraform] IAM Role 생성 및 정책 Attachment (0) | 2023.03.28 |
[AWS - Terraform] Architecture create (0) | 2023.03.28 |
[AWS] STS(Security Token Service) (0) | 2022.08.03 |
[AWS] Cognito (0) | 2022.08.03 |