inflearn logo
강의

講義

知識共有

実務で使用するクラウドセキュリティプログラミング (AWS, Python, Terraform)

2.13. マルチプロバイダー

s3 bucket 생성 에러

解決済みの質問

335

작성자 없음

1

강의 수강 중 궁금한 점이 있어 질문드립니다.

 

  1. s3 배포 시 제약조건?

멀티 프로바이더 부분에서 s3 배포 시, 서울 리전에만 배포가 안됩니다. (still creating 무한루프)

제가 배포하려는 코드는 아래와 같습니다.

# provider.tf
provider "aws" {
  region = "ap-northeast-2"
}

provider "aws" {
  alias = "apne3"
  region = "ap-northeast-3"
}

# main.tf
resource "aws_s3_bucket" "apne2" {
  bucket = "tf-apne2-hb"
}

# 오사카 리전
resource "aws_s3_bucket" "apne3" {
  bucket = "tf-apne3-hb"
  provider = aws.apne3
}

서울 리전에 배포할 때 해당 버킷명을 사용할 때만 배포가 안되며, 다른 버킷명이나 다른 리전에 배포하면 잘 배포가 됩니다.

 

콘솔에서 위와 동일하게 생성해보면 "the ap-northeast-2 location constraint is incompatible for the region specific endpoint this request was sent to." 와 같은 에러가 떨어지는데 처음보는 경우라 혹시 알고 계신게 있는지 궁금해서 질문 남깁니다.

 

  1. vpc 배포 후 provider 변경

     

    resource "aws_vpc" "apne2" {
      cidr_block = "10.0.0.0/16"
    }
    
    resource "aws_vpc" "apne3" {
      cidr_block = "10.0.0.0/16"
    }

    위처럼 배포 시 서울 리전에 vpc가 2개 생성됐습니다.


    이후 apne3 vpc 리소스에 provider = aws.apne3


    을 추가한 후 plan 해보면 서울 리전에 vpc가 삭제되고 오사카 리전에 생기는게 아닌, 서울 리전에도 남고 오사카 리전에도 새로 추가가 됩니다.


    tfstate 파일에서도 provider와 속성값들이 변경은 되는데 기존 리소스는 왜 삭제되지 않는지 궁금합니다.


python aws Terraform devsecops

回答 1

1

rex

안녕하세요.

질문은 언제든 편하게 남겨주셔도 괜찮습니다!

  1. S3 버킷의 경우, 전체 리전에서 고유해야 합니다.(Bucket names must be unique across all AWS accounts in all the AWS Regions within a partition.)

    1. 이러한 경우가 아니더라도 버킷을 삭제/재생성 하는 사이에 어느 정도의 시간이 걸릴지에 대해서는 문서화된 내용이 없습니다.(나만 알고 있는 이름으로 만들어도 운이 나쁘면 삭제/재생성에 몇 분이 걸릴 수도 있습니다.)

      1. 제 추측으론 이미 존재한다는 식의 응답을 주면, 그걸 토대로 버킷에 대한 무작위 대입(브루트포스)이나 다양한 방식의 공격이 들어오거나 버킷을 탈취하려는 시도를 할 수 있기 때문에 명확히 보여주지 않는 것 같습니다.

      2. 그렇기에 개인 실습 시에는 bucket_prefix 인자를 꼭 사용해주세요!

      3. 또한, 테라폼에서는 still creating이라고 표현되지만, Python으로 요청해보면 아래와 같이 결과가 나오게 됩니다.

    import boto3
    
    
    s3 = boto3.client("s3")
    try:
        s3.create_bucket(
            Bucket="tf-apne3-hb",
            CreateBucketConfiguration={
                "LocationConstraint": "ap-northeast-2",
            },
        )
    except Exception as e:
        print(e)
    
    --- 실행 결과 ---
    An error occurred (OperationAborted) when calling the CreateBucket operation: A conflicting conditional operation is currently in progress against this resource. Please try again.
    1. 이와 별개로 첨부해주신 오류(the ap-northeast-2 location constraint is incompatible for the region specific endpoint this request was sent to.)는 버킷을 생성하려는 리전과 실제 요청이 들어간 리전이 달라서 발생하는 오류입니다.

  2. 두 번째 질문은 사실 경험하기 되게 힘든 내용인데 대단하시네요.

    1. https://developer.hashicorp.com/terraform/cli/state/move

    2. 위 링크 보시면 질문하신 현상이 왜 발생하는지 알 수 있습니다.

    3. 간단히 얘기하면, 테라폼은 provider를 기준으로 리소스 변경을 추적하지 않아서 그렇습니다. 그렇기에 말씀주신 상황처럼 사용하게 되면 자칫 스테이트를 덮어써서 더 이상 관리가 힘들 수 있습니다.

    4. 그렇기에 실무에서는 무분별하게 이름을 변경하거나 갑자기 프로바이더를 변경하는 행위를 지양해야 합니다. 다만, 이걸 모두 기억하면서 하기는 힘드니 plan을 꼭 확인하시면서 이상한 점이 없는지 꼭! 확인하시기 바랍니다!

감사합니다.

조건 반복문 질문: for 문 ?

0

6

0

54강 4분 41초에서 질문 있어요.

0

6

1

커서창

1

9

2

.terraform, .terraform.lock.hcl 파일이 생성되지 않는 현상

0

104

2

섹션 4 프로젝트 코드

1

116

1

mysql 접속 에러

0

128

1

default tags , 리소스에 tags 중복 문의

1

232

1

테라폼으로 람다 형상 관리 방법

1

326

1

강의 순서 문의

1

232

1

람다 캐싱 질문

1

216

1

webhook 단점

1

250

1

for_each 사용 시 key를 가져오는 기준

1

270

2

ModuleNotFoundError: No module named 'pprint' 에러

1

267

1

모듈 vs 리소스

1

230

1

terraform import 관련 질문

1

229

1

generate expression 사용 예시

1

212

1

boto3 라이브러리 사용 시 에러

1

279

1

boto3 사용자 생성 질문입니다.

1

437

2

pip로 패키지를 설치했음에도 import 오류가 납니다. 어떻게 해야 할까요?

0

684

1

3.2. 왜 리소스 기반 정책은 Deny로 해야되나요? 부분이 잘 이해되지 않습니다.

1

408

2

제상황을 좀 더 자세히 적겠습니다.

0

604

1

영상을 아무리 찾아봐도

0

416

1

질문입니다

0

379

1

질문입니다

0

1022

1