본문 바로가기

AWS Cloud

[AWS - Terraform] Bucket 생성 및 파일 업로드

반응형

* 참조 사항
- 필자는 학습을 목적으로 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 방식)

 

 

 

반응형