s3 bucket 생성 에러
335
작성자 없음
강의 수강 중 궁금한 점이 있어 질문드립니다.
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." 와 같은 에러가 떨어지는데 처음보는 경우라 혹시 알고 계신게 있는지 궁금해서 질문 남깁니다.
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와 속성값들이 변경은 되는데 기존 리소스는 왜 삭제되지 않는지 궁금합니다.
回答 1
1
안녕하세요.
질문은 언제든 편하게 남겨주셔도 괜찮습니다!
S3 버킷의 경우, 전체 리전에서 고유해야 합니다.(Bucket names must be unique across all AWS accounts in all the AWS Regions within a partition.)
이러한 경우가 아니더라도 버킷을 삭제/재생성 하는 사이에 어느 정도의 시간이 걸릴지에 대해서는 문서화된 내용이 없습니다.(나만 알고 있는 이름으로 만들어도 운이 나쁘면 삭제/재생성에 몇 분이 걸릴 수도 있습니다.)
제 추측으론 이미 존재한다는 식의 응답을 주면, 그걸 토대로 버킷에 대한 무작위 대입(브루트포스)이나 다양한 방식의 공격이 들어오거나 버킷을 탈취하려는 시도를 할 수 있기 때문에 명확히 보여주지 않는 것 같습니다.
그렇기에 개인 실습 시에는 bucket_prefix 인자를 꼭 사용해주세요!
또한, 테라폼에서는 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.이와 별개로 첨부해주신 오류(the ap-northeast-2 location constraint is incompatible for the region specific endpoint this request was sent to.)는 버킷을 생성하려는 리전과 실제 요청이 들어간 리전이 달라서 발생하는 오류입니다.
두 번째 질문은 사실 경험하기 되게 힘든 내용인데 대단하시네요.
위 링크 보시면 질문하신 현상이 왜 발생하는지 알 수 있습니다.
간단히 얘기하면, 테라폼은 provider를 기준으로 리소스 변경을 추적하지 않아서 그렇습니다. 그렇기에 말씀주신 상황처럼 사용하게 되면 자칫 스테이트를 덮어써서 더 이상 관리가 힘들 수 있습니다.
그렇기에 실무에서는 무분별하게 이름을 변경하거나 갑자기 프로바이더를 변경하는 행위를 지양해야 합니다. 다만, 이걸 모두 기억하면서 하기는 힘드니 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

