

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 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>
フックの一意の名前。フックの 3 つの部分からなる名前空間を指定し、推奨パターンは です`Organization::Service::Hook`。  
次の組織名前空間は予約されており、フックタイプ名には使用できません。  
+ `Alexa`
+ `AMZN`
+ `Amazon`
+ `ASK`
+ `AWS`
+ `Custom`
+ `Dev`
*必須:* はい  
 *パターン*: `^[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。  
*必須:* はい  
*パターン*: `^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`  
ハンドラーには少なくとも 1 つの値を指定する必要があります。
ステータスが になるスタックオペレーションでは、フックは呼び出`UpdateCleanup`されません。たとえば、次の 2 つのシナリオでは、フックの`preDelete`ハンドラーは呼び出されません。  
+ スタックは、テンプレートから 1 つのリソースを削除した後に更新されます。
+ 更新タイプの[置換](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement)のリソースが削除されます。

`targetNames`  <a name="hooks-properties-targetNames"></a>
Hook がターゲットとする型名の文字列配列。たとえば、`preCreate`ハンドラーに `AWS::S3::Bucket`ターゲットがある場合、フックは事前プロビジョニングフェーズ中に Amazon S3 バケットに対して実行されます。  
+ `TargetName`

  実装されたハンドラーごとに少なくとも 1 つのターゲット名を指定します。

  *パターン*: `^[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
}
```