CloudFormation 사용자 지정 리소스 요청 및 응답 참조 - AWS CloudFormation

CloudFormation 사용자 지정 리소스 요청 및 응답 참조

CloudFormation은 사용자 지정 리소스 공급자와 통신하는 요청-응답 프로토콜을 통해 사용자 지정 리소스를 관리합니다. 각 요청에는 요청 유형(Create, Update 또는 Delete)이 포함되며 이 상위 수준 워크플로를 따릅니다.

  1. 템플릿 개발자는 템플릿에서 ServiceTokenServiceTimeout을 사용하여 사용자 지정 리소스를 정의하고 스택 작업을 시작합니다.

  2. CloudFormation은 SNS 또는 Lambda를 통해 사용자 지정 리소스 공급자로 JSON 요청을 보냅니다.

  3. 그러면 사용자 지정 리소스 공급자가 요청을 처리하고 제한 시간이 만료되기 전에 미리 서명된 Amazon S3 버킷 URL로 JSON 응답을 반환합니다.

  4. CloudFormation은 응답을 읽고 스택 작업을 진행합니다. 제한 시간이 끝날 때까지 응답을 받지 못하면 요청이 실패로 간주되고 스택 작업에 실패합니다.

자세한 내용은 사용자 지정 리소스가 작동하는 방식 섹션을 참조하세요.

이 섹션에서는 각 요청 유형에 대한 구조, 파라미터 및 예상 응답을 설명합니다.

참고

응답 본문의 총 크기는 4,096바이트를 초과할 수 없습니다.

템플릿 설정

템플릿에서 사용자 지정 리소스를 정의할 때 템플릿 개발자는 다음 속성과 함께 AWS::CloudFormation::CustomResource를 사용합니다.

ServiceToken

스택과 동일한 리전의 Amazon SNS 주제 ARN 또는 Lambda 함수 ARN.

필수 항목 여부: 예

유형: 문자열

ServiceTimeout

사용자 지정 리소스 작업의 제한 시간이 초과되기 전 최대 시간(초). 값은 1~3,600이어야 합니다. 기본값: 3,600초(1시간).

필수 항목 여부: 아니요

유형: 문자열

추가 리소스 속성이 지원됩니다. 리소스 속성은 요청에 ResourceProperties로 포함됩니다. 사용자 지정 리소스 공급자가 유효한 속성과 허용 가능한 값을 결정해야 합니다.

요청 객체

Create

템플릿 개발자가 사용자 지정 리소스를 포함하는 스택을 생성하면 CloudFormation에서 RequestTypeCreate로 설정된 요청을 전송합니다.

생성 요청에는 다음과 같은 필드가 포함됩니다.

RequestType

Create.

필수 항목 여부: 예

유형: 문자열

RequestId

요청에 대한 고유 ID입니다.

StackIdRequestId를 조합하여 만든 값으로 특정한 사용자 지정 리소스에 대한 요청을 고유하게 식별할 수 있습니다.

필수 항목 여부: 예

유형: 문자열

StackId

사용자 지정 리소스가 들어 있는 스택을 나타내는 Amazon 리소스 이름(ARN).

StackIdRequestId를 조합하여 만든 값으로 특정한 사용자 지정 리소스에 대한 요청을 고유하게 식별할 수 있습니다.

필수 항목 여부: 예

유형: 문자열

ResponseURL

응답 URL은 사용자 지정 리소스 공급자에서 CloudFormation에 보내는 응답을 수신할 미리 서명된 S3 버킷을 식별합니다.

필수 항목 여부: 예

유형: 문자열

ResourceType

CloudFormation 템플릿에서 사용자 지정 리소스의 템플릿 개발자가 선택한 리소스 유형입니다. 사용자 지정 리소스 유형 이름은 최대 60자이고 영숫자 및 다음 문자를 포함할 수 있습니다. _@-

필수 항목 여부: 예

유형: 문자열

LogicalResourceId

CloudFormation 템플릿에 있는 사용자 지정 리소스의 템플릿 개발자 선택 이름(논리적 ID).

필수 항목 여부: 예

유형: 문자열

ResourceProperties

이 필드에는 템플릿 개발자가 보낸 Properties 객체의 내용이 들어 있습니다. 해당 콘텐츠는 사용자 지정 리소스 공급자에 의해 정의됩니다.

필수 항목 여부: 아니요

유형: JSON 객체

예제

{ "RequestType" : "Create", "RequestId" : "unique-request-id", "StackId" : "arn:aws:cloudformation:us-west-2:123456789012:stack/mystack/id", "ResponseURL" : "pre-signed-url-for-create-response", "ResourceType" : "Custom::MyCustomResourceType", "LogicalResourceId" : "resource-logical-id", "ResourceProperties" : { "key1" : "string", "key2" : [ "list" ], "key3" : { "key4" : "map" } } }
Update

템플릿 개발자가 템플릿 내 사용자 지정 리소스의 속성을 변경하고 스택을 업데이트하면 CloudFormation에서는 RequestTypeUpdate로 설정된 요청을 사용자 지정 리소스 공급자에게 전송합니다. 즉, 요청 유형이 Update인 경우 사용자 지정 리소스 코드에서 해당 속성이 변경되는 것을 알고 있으므로 변경 사항을 감지할 필요가 없습니다.

업데이트 요청에는 다음과 같은 필드가 포함됩니다.

RequestType

Update.

필수 항목 여부: 예

유형: 문자열

RequestId

요청에 대한 고유 ID입니다.

StackIdRequestId를 조합하여 만든 값으로 특정한 사용자 지정 리소스에 대한 요청을 고유하게 식별할 수 있습니다.

필수 항목 여부: 예

유형: 문자열

StackId

사용자 지정 리소스가 들어 있는 스택을 나타내는 Amazon 리소스 이름(ARN).

StackIdRequestId를 조합하여 만든 값으로 특정한 사용자 지정 리소스에 대한 요청을 고유하게 식별할 수 있습니다.

필수 항목 여부: 예

유형: 문자열

ResponseURL

응답 URL은 사용자 지정 리소스 공급자에서 CloudFormation에 보내는 응답을 수신할 미리 서명된 S3 버킷을 식별합니다.

필수 항목 여부: 예

유형: 문자열

ResourceType

CloudFormation 템플릿에서 사용자 지정 리소스의 템플릿 개발자가 선택한 리소스 유형입니다. 사용자 지정 리소스 유형 이름은 최대 60자이고 영숫자 및 다음 문자를 포함할 수 있습니다. _@- 업데이트 중에는 유형을 변경할 수 없습니다.

필수 항목 여부: 예

유형: 문자열

LogicalResourceId

CloudFormation 템플릿에 있는 사용자 지정 리소스의 템플릿 개발자 선택 이름(논리적 ID).

필수 항목 여부: 예

유형: 문자열

PhysicalResourceId

사용자 지정 리소스 공급자가 제공하는 물리적 ID(해당 공급자에서 고유함).

필수 항목 여부: 예

유형: 문자열

ResourceProperties

이 필드에는 템플릿 개발자가 보낸 Properties 객체의 내용이 들어 있습니다. 해당 콘텐츠는 사용자 지정 리소스 공급자에 의해 정의됩니다.

필수 항목 여부: 아니요

유형: JSON 객체

OldResourceProperties

Update 요청에만 사용됩니다. CloudFormation 템플릿에서 템플릿 개발자가 이전에 선언한 새 리소스 속성값입니다.

필수 항목 여부:

유형: JSON 객체

예제

{ "RequestType" : "Update", "RequestId" : "unique-request-id", "StackId" : "arn:aws:cloudformation:us-west-2:123456789012:stack/mystack/id", "ResponseURL" : "pre-signed-url-for-update-response", "ResourceType" : "Custom::MyCustomResourceType", "LogicalResourceId" : "resource-logical-id", "PhysicalResourceId" : "provider-defined-physical-id", "ResourceProperties" : { "key1" : "new-string", "key2" : [ "new-list" ], "key3" : { "key4" : "new-map" } }, "OldResourceProperties" : { "key1" : "string", "key2" : [ "list" ], "key3" : { "key4" : "map" } } }
Delete

템플릿 개발자가 스택을 삭제하거나 스택에서 사용자 지정 리소스를 제거하면 CloudFormation에서 RequestTypeDelete로 설정된 요청을 전송합니다.

삭제 요청에는 다음과 같은 필드가 포함됩니다.

RequestType

Delete.

필수 항목 여부: 예

유형: 문자열

RequestId

요청에 대한 고유 ID입니다.

필수 항목 여부: 예

유형: 문자열

StackId

사용자 지정 리소스가 들어 있는 스택을 나타내는 Amazon 리소스 이름(ARN).

필수 항목 여부: 예

유형: 문자열

ResponseURL

응답 URL은 사용자 지정 리소스 공급자에서 CloudFormation에 보내는 응답을 수신할 미리 서명된 S3 버킷을 식별합니다.

필수 항목 여부: 예

유형: 문자열

ResourceType

CloudFormation 템플릿에서 사용자 지정 리소스의 템플릿 개발자가 선택한 리소스 유형입니다. 사용자 지정 리소스 유형 이름은 최대 60자이고 영숫자 및 다음 문자를 포함할 수 있습니다. _@-

필수 항목 여부: 예

유형: 문자열

LogicalResourceId

CloudFormation 템플릿에 있는 사용자 지정 리소스의 템플릿 개발자 선택 이름(논리적 ID).

필수 항목 여부: 예

유형: 문자열

PhysicalResourceId

사용자 지정 리소스 공급자가 제공하는 물리적 ID(해당 공급자에서 고유함).

필수 항목 여부: 예

유형: 문자열

ResourceProperties

이 필드에는 템플릿 개발자가 보낸 Properties 객체의 내용이 들어 있습니다. 해당 콘텐츠는 사용자 지정 리소스 공급자에 의해 정의됩니다.

필수 항목 여부: 아니요

유형: JSON 객체

예제

{ "RequestType" : "Delete", "RequestId" : "unique-request-id", "StackId" : "arn:aws:cloudformation:us-west-2:123456789012:stack/mystack/id", "ResponseURL" : "pre-signed-url-for-delete-response", "ResourceType" : "Custom::MyCustomResourceType", "LogicalResourceId" : "resource-logical-id", "PhysicalResourceId" : "provider-defined-physical-id", "ResourceProperties" : { "key1" : "string", "key2" : [ "list" ], "key3" : { "key4" : "map" } } }

응답 객체

사용자 지정 리소스 공급자는 모든 요청 유형에 대해 미리 서명된 URL로 응답을 전송합니다. 사용자 지정 리소스 공급자가 응답을 전송하지 않으면 CloudFormation은 작업의 제한 시간이 초과될 때까지 기다립니다.

이 응답은 다음 필드를 포함하는 JSON 객체여야 합니다.

Status

SUCCESS 또는 FAILED여야 합니다.

필수 항목 여부: 예

유형: 문자열

RequestId

요청에 대한 고유 ID입니다. 이 값을 요청에 표시된 그대로 복사합니다.

필수 항목 여부: 예

유형: 문자열

StackId

사용자 지정 리소스가 들어 있는 스택을 나타내는 Amazon 리소스 이름(ARN). 이 값을 요청에 표시된 그대로 복사합니다.

필수 항목 여부: 예

유형: 문자열

LogicalResourceId

CloudFormation 템플릿에 있는 사용자 지정 리소스의 템플릿 개발자 선택 이름(논리적 ID). 이 값을 요청에 표시된 그대로 복사합니다.

필수 항목 여부: 예

유형: 문자열

PhysicalResourceId

이 값은 사용자 지정 리소스 공급업체 고유의 ID여야 하며, 크기는 최대 1KB까지 가능합니다. 값은 빈 문자열일 수 없으며, 동일한 리소스의 모든 응답에 대해 동일해야 합니다.

사용자 지정 리소스를 업데이트할 때 PhysicalResourceId에 대해 반환되는 값에 따라 업데이트 동작이 결정됩니다. 값이 동일하게 유지되는 경우 CloudFormation은 이를 일반 업데이트로 간주합니다. 값이 변경되는 경우 CloudFormation은 업데이트를 교체로 이해하고 기존 리소스에 삭제 요청을 전송합니다. 자세한 내용은 AWS::CloudFormation::CustomResource 단원을 참조하세요.

필수 항목 여부: 예

유형: 문자열

Reason

실패 응답의 이유를 설명합니다.

Status인 경우 필수입니다..FAILED 그렇지 않은 경우 선택 사항입니다.

필수 항목 여부: 조건부

유형: 문자열

NoEcho

Fn::GetAtt 함수를 사용하여 조회할 때 사용자 지정 리소스의 출력을 마스킹할지 여부를 나타냅니다. true로 설정하면 템플릿의 Metadata 섹션에 저장된 값을 제외하고 반환된 모든 값은 별표(*****)로 마스킹됩니다. CloudFormation은 Metadata 섹션에 포함된 정보를 변환, 수정 또는 삭제하지 않습니다. 기본값은 false입니다.

NoEcho를 사용하여 민감한 정보를 마스킹 처리하는 방법에 대한 자세한 내용은 템플릿에 자격 증명을 포함하지 않음 모범 사례를 참조하세요.

CreateUpdate 응답에 대해서만 사용할 수 있습니다. Delete 응답에 대해서는 지원되지 않습니다.

필수 항목 여부: 아니요

유형: 부울

Data

응답과 함께 보낼 사용자 지정 리소스 공급자 정의 이름-값 페어. Fn::GetAtt와 템플릿의 이름을 사용해 여기 제공된 값에 액세스할 수 있습니다.

CreateUpdate 응답에 대해서만 사용할 수 있습니다. Delete 응답에 대해서는 지원되지 않습니다.

중요

이름-값 페어에 중요한 정보가 들어 있는 경우 NoEcho 필드를 사용하여 사용자 지정 리소스의 출력을 마스킹해야 합니다. 그러지 않으면 속성값(예: DescribeStackEvents)을 드러내는 API를 통해 값이 표시될 수 있습니다.

필수 항목 여부: 아니요

유형: JSON 객체

성공 응답 예제

CreateUpdate 응답

{ "Status": "SUCCESS", "RequestId": "unique-request-id", "StackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/name/id", "LogicalResourceId": "resource-logical-id", "PhysicalResourceId": "provider-defined-physical-id", "NoEcho": true, "Data": { "key1": "value1", "key2": "value2" } }

Delete 응답

{ "Status": "SUCCESS", "RequestId": "unique-request-id", "StackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/name/id", "LogicalResourceId": "resource-logical-id", "PhysicalResourceId": "provider-defined-physical-id" }

실패 응답 예제

{ "Status": "FAILED", "RequestId": "unique-request-id", "StackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/name/id", "LogicalResourceId": "resource-logical-id", "PhysicalResourceId": "provider-defined-physical-id", "Reason": "Required failure reason string" }