CloudFormation에서 기존 리소스를 어떻게 재사용 할 수 있습니까?


32

CloudFormation 템플릿에 리소스로 S3 버킷이 있습니다. 로 DeletionPolicy설정했습니다 Retain. 이것은 스택을 삭제할 때 버킷을 실제로 유지하는 것으로 예상대로 작동합니다. 그러나 스택을 다시 생성하려고하면 동일한 버킷을 다시 생성하는 동안 생성에 실패하고 이미 존재한다는 오류 메시지가 표시됩니다.

이미 존재하는 리소스를 다시 생성하지 않으려면 CloudFormation 템플릿에 무엇을 추가해야합니까?

내 템플릿의 관련 조각은 다음과 같습니다.

  "Resources": {
    "SomeS3Bucket" : {
      "Type" : "AWS::S3::Bucket",
      "DeletionPolicy" : "Retain",
      "Properties": {
          "BucketName": "SomeS3Bucket"
          }
      }

흥미롭게도 버킷은 무엇에 사용됩니까? 어쩌면 당신이하려는 일에 따라 다른 방법이있을 수 있습니다.
Drew Khoury

답변:


15

한 가지 방법은 CloudFormation 템플릿에 입력 매개 변수를 추가하여 기존 버킷을 사용해야 함을 나타내는 것입니다.

매개 변수가 필요하다고 표시하는 경우에만 템플릿에서 조건 절을 사용하여 버킷을 생성하십시오.


4
+1까지는 이것이 내가 본 유일한 방법입니다. 나는 그것을 자동화하는 방법을 실제로 찾고 있기 때문에 대답으로 표시하지 않습니다.
vartec

1
그렇지 않은 경우 방법이 있어야합니다. "CloudFormer"는 어떻게 작동합니까?
jgomo3

7

CloudFormation은 "aws :"접두어가있는 태그를 사용하여 스택의 어떤 항목과 어떤 리소스가 연결되어 있는지 추적합니다. 즉, 추가 / 삭제 / 업데이트 할 항목을 결정하기 전에 템플릿과 비교하는 데 사용되는 "실시간"상태입니다.

사용자는 이러한 태그를 추가, 편집 또는 삭제할 수 없습니다.

따라서 기존 리소스에 이러한 태그가 없거나 해당 태그에 대한 올바른 값이 없으면 새 스택의 일부로 간주되지 않으며이를 변경할 수있는 방법이 없습니다.


2

Cloudformation 템플릿으로는 수행 할 수없는 것처럼 보이기 때문에 이것을 자동화하려고합니다. 내가 생각하는 과정은 다음과 같습니다.

  1. 다른 임시 버킷 생성 temp-$originalbucketname
  2. 버킷에서 버킷으로 모든 컨텐츠를 복사하여 시간 절약
  3. 에서 모든 내용을 제거 $originalbucketname
  4. 비어있는 $ originalbucketname 제거
  5. Cloudformation 스택 생성 (버킷 생성)
  6. 내용을 다시 복사
  7. 없애다 temp-$originalbucketname

버킷 크기에 따라 대부분의 단계가 키 수와 함께 O (n)이므로 쉽게 시간이 걸릴 수있는 매우 복잡한 프로세스입니다.

Cloudformation은 AWS 자동화의 기본 계층이라고 생각하지만 모든 서비스에 대해 잔잔한 API를 결합하는 것은 매우 제한된 괴물이라고 생각합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.