

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# CloudFormation 후크에 대한 스키마 구문 참조
<a name="hooks-schema"></a>

이 섹션에서는 CloudFormation 후크를 개발하는 데 사용하는 스키마의 구문을 설명합니다.

후크에는 JSON 스키마 및 후크 핸들러로 표현되는 후크 사양이 포함됩니다. 사용자 지정 후크를 생성하는 첫 번째 단계는 후크, 속성 및 속성을 정의하는 스키마를 모델링하는 것입니다. CloudFormation CLI [https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/resource-type-cli-init.html](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/resource-type-cli-init.html) 명령을 사용하여 사용자 지정 후크 프로젝트를 초기화하면 후크 스키마 파일이 생성됩니다. 이 스키마 파일을 사용자 지정 후크의 셰이프와 의미 체계를 정의하기 위한 시작점으로 사용합니다.

## 스키마 구문
<a name="schema-syntax"></a>

다음 스키마는 후크의 구조입니다.

```
{
"typeName": "string",
    "description": "string",
    "sourceUrl": "string",
    "documentationUrl": "string",
    "definitions": {
        "definitionName": {
          . . .
        }
    },
    "typeConfiguration": {
        "properties": {
             "propertyName": {
                "description": "string",
                "type": "string",
                 . . .
            },
        },
    "required": [
        "propertyName"
         . . .
            ],
    "additionalProperties": false
    },
    "handlers": {
        "preCreate": {
            "targetNames": [
            ],
            "permissions": [
            ]
        },
        "preUpdate": {
            "targetNames": [
            ],
            "permissions": [
            ]
        },
        "preDelete": {
            "targetNames": [
            ],
            "permissions": [
            ]
        }
   },
   "additionalProperties": false
}
```

`typeName`  <a name="hooks-properties-typeName"></a>
후크의 고유 이름입니다. 권장 패턴이 인 후크의 세 부분으로 구성된 네임스페이스를 지정합니다`Organization::Service::Hook`.  
다음 조직 네임스페이스는 예약되어 있으며 후크 유형 이름에 사용할 수 없습니다.  
+ `Alexa`
+ `AMZN`
+ `Amazon`
+ `ASK`
+ `AWS`
+ `Custom`
+ `Dev`
*필수 항목 여부:* 예  
 *Pattern*: `^[a-zA-Z0-9]{2,64}::[a-zA-Z0-9]{2,64}::[a-zA-Z0-9]{2,64}$`  
*최소*: `10`  
*최대*: `196`

`description`  <a name="hooks-properties-description"></a>
CloudFormation 콘솔에 표시되는 후크에 대한 간단한 설명입니다.  
*필수 항목 여부:* 예

`sourceUrl`  <a name="hooks-properties-sourceUrl"></a>
공개된 경우 후크에 대한 소스 코드의 URL입니다.  
*필수 항목 여부*: 아니요  
*최대*: `4096`

`documentationUrl`  <a name="hooks-properties-documentationurl"></a>
후크에 대한 자세한 설명서를 제공하는 페이지의 URL입니다.  
*필수 항목 여부:* 예  
*Pattern*: `^https\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])(\:[0-9]*)*([\?/#].*)?$`  
*최대*: `4096`  
후크 스키마에는 완전하고 정확한 속성 설명이 포함되어야 하지만 `documentationURL` 속성을 사용하여 사용자에게 예제, 사용 사례 및 기타 세부 정보를 비롯한 자세한 정보를 제공할 수 있습니다.

`definitions`  <a name="hooks-properties-definitions"></a>
`definitions` 블록을 사용하여 공유 후크 속성 스키마를 제공합니다.  
`definitions` 섹션을 사용하여 후크 유형 스키마의 여러 지점에서 사용할 수 있는 스키마 요소를 정의하는 것이 모범 사례로 간주됩니다. 그런 다음 JSON 포인터를 사용하여 후크 유형 스키마의 적절한 위치에서 해당 요소를 참조할 수 있습니다.  
*필수 항목 여부*: 아니요

`typeConfiguration`  <a name="hooks-properties-typeconfiguration"></a>
후크의 구성 데이터의 정의입니다.  
*필수 항목 여부:* 예

`properties`  <a name="hooks-properties-properties"></a>
후크의 속성입니다. 후크의 모든 속성은 스키마에서 표현되어야 합니다. 후크 스키마 속성을 후크 유형 구성 속성과 정렬합니다.  
중첩 속성은 허용되지 않습니다. 대신 `definitions` 요소에 중첩된 속성을 정의하고 `$ref` 포인터를 사용하여 원하는 속성에서 참조합니다.
현재 지원되는 속성은 다음과 같습니다.  
+ `default` - 속성의 기본값입니다.
+ `description` - 속성에 대한 설명입니다.
+ `pattern` - 입력을 검증하는 데 사용되는 정규식 패턴입니다.
+ `type` - 허용되는 속성 유형입니다.

`additionalProperties`  <a name="hooks-properties-additionalproperties"></a>
`additionalProperties`를 `false`로 설정해야 합니다. 후크의 모든 속성은 스키마로 표현되어야 합니다. 임의 입력은 허용되지 않습니다.  
*필수 항목 여부:* 예  
*유효한 값*: `false`

`handlers`  <a name="hooks-properties-handlers"></a>
핸들러는 후크 호출 지점과 같이 스키마에 정의된 후크를 시작할 수 있는 작업을 지정합니다. 예를 들어 `preUpdate` 핸들러의 지정된 모든 대상에 대한 업데이트 작업 전에 핸들러가 호출됩니다.  
*유효한 값*: `preCreate` \$1 `preUpdate` \$1 `preDelete`  
핸들러에 대해 하나 이상의 값을 지정해야 합니다.
상태가 인 스택 작업은 후크를 호출하지 `UpdateCleanup` 않습니다. 예를 들어 다음 두 시나리오에서는 후크의 `preDelete` 핸들러가 호출되지 않습니다.  
+ 템플릿에서 하나의 리소스를 제거하면 스택이 업데이트됩니다.
+ [대체](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement) 업데이트 유형의 리소스가 삭제됩니다.

`targetNames`  <a name="hooks-properties-targetNames"></a>
후크가 대상으로 하는 유형 이름의 문자열 배열입니다. 예를 들어 `preCreate` 핸들러에 `AWS::S3::Bucket` 대상이 있는 경우 후크는 사전 프로비저닝 단계에서 Amazon S3 버킷에 대해 실행됩니다.  
+ `TargetName`

  구현된 각 핸들러에 대해 하나 이상의 대상 이름을 지정합니다.

  *Pattern*: `^[a-zA-Z0-9]{2,64}::[a-zA-Z0-9]{2,64}::[a-zA-Z0-9]{2,64}$`

  *최소*: `1`

  *필수 항목 여부:* 예
**주의**  
SSM SecureString 및 Secrets Manager 동적 참조는 후크로 전달되기 전에 확인되지 않습니다.

`permissions`  <a name="hooks-properties-permissions"></a>
핸들러를 호출하는 데 필요한 AWS 권한을 지정하는 문자열 배열입니다.  
*필수 항목 여부:* 예

`additionalProperties`  <a name="hooks-additional-properties"></a>
`additionalProperties`를 `false`로 설정해야 합니다. 후크의 모든 속성은 스키마로 표현되어야 합니다. 임의 입력은 허용되지 않습니다.  
*필수 항목 여부:* 예  
*유효한 값*: `false`

## 후크 스키마 예제
<a name="example-hooks"></a>

 **예제 1**.

Java 및 Python 연습에서는 다음 코드 예제를 사용합니다. 다음은 라는 후크의 예제 구조입니다`mycompany-testing-mytesthook.json`.

```
{
    "typeName":"MyCompany::Testing::MyTestHook",
    "description":"Verifies S3 bucket and SQS queues properties before create and update",
    "sourceUrl":"https://mycorp.com/my-repo.git",
    "documentationUrl":"https://mycorp.com/documentation",
    "typeConfiguration":{
        "properties":{
            "minBuckets":{
                "description":"Minimum number of compliant buckets",
                "type":"string"
            },
            "minQueues":{
                "description":"Minimum number of compliant queues",
                "type":"string"
            },
            "encryptionAlgorithm":{
                "description":"Encryption algorithm for SSE",
                "default":"AES256",
                "type":"string",
                "pattern": "[a-zA-Z]*[1-9]"
            }
        },
        "required":[
            
        ],
        "additionalProperties":false
    },
    "handlers":{
        "preCreate":{
            "targetNames":[
                "AWS::S3::Bucket",
                "AWS::SQS::Queue"
            ],
            "permissions":[
                
            ]
        },
        "preUpdate":{
            "targetNames":[
                "AWS::S3::Bucket",
                "AWS::SQS::Queue"
            ],
            "permissions":[
                
            ]
        },
        "preDelete":{
            "targetNames":[
                "AWS::S3::Bucket",
                "AWS::SQS::Queue"
            ],
            "permissions":[
                "s3:ListBucket",
                "s3:ListAllMyBuckets",
                "s3:GetEncryptionConfiguration",
                "sqs:ListQueues",
                "sqs:GetQueueAttributes",
                "sqs:GetQueueUrl"
            ]
        }
    },
    "additionalProperties":false
}
```

 **예제 2**.

다음 예제는 `STACK` 및를 사용하여 스택 템플릿 및 변경 세트 작업을 `CHANGE_SET` `targetNames` 대상으로 지정하는 스키마입니다.

```
{
    "typeName":"MyCompany::Testing::MyTestHook",
    "description":"Verifies Stack and Change Set properties before create and update",
    "sourceUrl":"https://mycorp.com/my-repo.git",
    "documentationUrl":"https://mycorp.com/documentation",
    "typeConfiguration":{
        "properties":{
            "minBuckets":{
                "description":"Minimum number of compliant buckets",
                "type":"string"
            },
            "minQueues":{
                "description":"Minimum number of compliant queues",
                "type":"string"
            },
            "encryptionAlgorithm":{
                "description":"Encryption algorithm for SSE",
                "default":"AES256",
                "type":"string",
                "pattern": "[a-zA-Z]*[1-9]"
            }
        },
        "required":[
        ],
        "additionalProperties":false
    },
    "handlers":{
        "preCreate":{
            "targetNames":[
                "STACK",
                "CHANGE_SET"
            ],
            "permissions":[  
            ]
        },
        "preUpdate":{
            "targetNames":[
                "STACK"
            ],
            "permissions":[
            ]
        },
        "preDelete":{
            "targetNames":[
                "STACK"
            ],
            "permissions":[
                
            ]
        }
    },
    "additionalProperties":false
}
```