

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Hooks für den öffentlichen Gebrauch veröffentlichen
<a name="hooks-publishing"></a>

Um einen öffentlichen Hook eines Drittanbieters zu entwickeln, entwickeln Sie Ihren Hook als private Erweiterung. Dann in jedem, AWS-Region in dem Sie die Erweiterung öffentlich verfügbar machen möchten: 

1. Registrieren Sie Ihren Hook als private Erweiterung in der CloudFormation Registrierung.

1. Testen Sie Ihren Hook, um sicherzustellen, dass er alle erforderlichen Voraussetzungen für die Veröffentlichung in der CloudFormation Registrierung erfüllt.

1. Veröffentlichen Sie Ihren Hook in der CloudFormation Registry.
**Anmerkung**  
Bevor Sie eine Erweiterung in einer bestimmten Region veröffentlichen, müssen Sie sich zunächst als Herausgeber von Erweiterungen in dieser Region registrieren. Informationen dazu, wie Sie dies in mehreren Regionen gleichzeitig tun können, finden Sie unter [Veröffentlichen von Erweiterungen StackSets in mehreren Regionen mithilfe](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/publish-extension-stacksets.html) des * CloudFormation CLI-Benutzerhandbuchs*.

Nachdem Sie Ihren Hook entwickelt und registriert haben, können Sie ihn allgemeinen CloudFormation Benutzern öffentlich zugänglich machen, indem Sie ihn als öffentliche Erweiterung eines Drittanbieters in der CloudFormation Registry *veröffentlichen*.

Öffentliche Hooks von Drittanbietern ermöglichen es Ihnen, CloudFormation Benutzern die Möglichkeit zu geben, die Konfiguration von AWS Ressourcen vor der Bereitstellung proaktiv zu überprüfen. Wie bei privaten Hooks werden öffentliche Hooks genauso behandelt wie alle von Within veröffentlichten AWS Hooks. CloudFormation

In der Registry veröffentlichte Hooks sind für alle CloudFormation Benutzer in der Region sichtbar, AWS-Regionen in der sie veröffentlicht wurden. Benutzer können Ihre Erweiterung dann in ihrem Konto *aktivieren*, sodass sie in ihren Vorlagen verwendet werden kann. Weitere Informationen finden Sie im *CloudFormation Benutzerhandbuch* unter [Verwenden von öffentlichen Erweiterungen von Drittanbietern aus der CloudFormation Registrierung](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/registry-public.html).

# Testen eines benutzerdefinierten Hooks für den öffentlichen Gebrauch
<a name="hooks-testing-registered-hooks"></a>

Um Ihren registrierten benutzerdefinierten Hook zu veröffentlichen, muss er alle für ihn definierten Testanforderungen erfüllen. Im Folgenden finden Sie eine Liste der Anforderungen, die erforderlich sind, bevor Sie Ihren benutzerdefinierten Hook als Erweiterung eines Drittanbieters veröffentlichen.

Jeder Handler und jedes Ziel werden zweimal getestet. Einmal für `SUCCESS` und einmal für`FAILED`.
+ Für den `SUCCESS` Antwortfall:
  + Der Status muss sein`SUCCESS`.
  + Darf keinen Fehlercode zurückgeben.
  + Falls angegeben, sollte die Rückrufverzögerung auf `0` Sekunden gesetzt werden.
+ Für den `FAILED` Antwortfall:
  + Der Status muss sein`FAILED`.
  + Muss einen Fehlercode zurückgeben.
  + Es muss eine Nachricht als Antwort vorliegen.
  + Falls angegeben, sollte die Rückrufverzögerung auf `0` Sekunden gesetzt werden.
+ Für den `IN_PROGRESS` Antwortfall:
  + Darf keinen Fehlercode zurückgeben.
  + `Result`Das Feld darf nicht als Antwort gesetzt werden.

# Angabe von Eingabedaten für die Verwendung in Vertragstests
<a name="hooks-input-data-contract-test"></a>

Standardmäßig CloudFormation führt der Vertragstests mithilfe von Eingabeeigenschaften durch, die aus den Mustern generiert wurden, die Sie in Ihrem Hook-Schema definieren. Die meisten Hooks sind jedoch so komplex, dass die Eingabeeigenschaften für die vorherige Erstellung oder Aktualisierung von Provisioning-Stacks ein Verständnis der bereitgestellten Ressource erfordern. Um dieses Problem zu lösen, können Sie die Eingabe angeben, die das Unternehmen bei der Durchführung seiner CloudFormation Vertragstests verwendet.

CloudFormation bietet Ihnen zwei Möglichkeiten, die Eingabedaten anzugeben, die bei der Durchführung von Vertragstests verwendet werden sollen:
+ Überschreibt die Datei

  Die Verwendung einer `overrides` Datei bietet eine einfache Möglichkeit, Eingabedaten für bestimmte Eigenschaften anzugeben`preCreate`, die CloudFormation während `preUpdate` und bei `preDelete` Betriebstests verwendet werden können.
+ Eingabedateien

  Sie können auch mehrere `input` Dateien verwenden, um Eingabedaten für den Vertragstest anzugeben, wenn:
  + Sie möchten oder müssen unterschiedliche Eingabedaten für Erstellungs-, Aktualisierungs- und Löschvorgänge oder ungültige Daten für Tests angeben.
  + Sie möchten mehrere verschiedene Eingabedatensätze angeben.

## Eingabedaten mithilfe einer Override-Datei angeben
<a name="hook-override-inputs"></a>

Das Folgende ist ein Beispiel für die Eingabedaten von Amazon S3 Hook unter Verwendung der `overrides` Datei.

```
{
    "CREATE_PRE_PROVISION": {
        "AWS::S3::Bucket": {
            "resourceProperties": {
                "/BucketName": "encryptedbucket-us-west-2-contractor",
                "/BucketEncryption/ServerSideEncryptionConfiguration": [
                    {
                        "BucketKeyEnabled": true,
                        "ServerSideEncryptionByDefault": {
                            "KMSMasterKeyID": "KMS-KEY-ARN",
                            "SSEAlgorithm": "aws:kms"
                        }
                    }
                ]
            }
        },
        "AWS::SQS::Queue": {
            "resourceProperties": {
                "/QueueName": "MyQueueContract",
                "/KmsMasterKeyId": "hellocontract"
            }
        }
    },
    "UPDATE_PRE_PROVISION": {
        "AWS::S3::Bucket": {
            "resourceProperties": {
                "/BucketName": "encryptedbucket-us-west-2-contractor",
                "/BucketEncryption/ServerSideEncryptionConfiguration": [
                    {
                        "BucketKeyEnabled": true,
                        "ServerSideEncryptionByDefault": {
                            "KMSMasterKeyID": "KMS-KEY-ARN",
                            "SSEAlgorithm": "aws:kms"
                        }
                    }
                ]
            },
            "previousResourceProperties": {
                "/BucketName": "encryptedbucket-us-west-2-contractor",
                "/BucketEncryption/ServerSideEncryptionConfiguration": [
                    {
                        "BucketKeyEnabled": true,
                        "ServerSideEncryptionByDefault": {
                            "KMSMasterKeyID": "KMS-KEY-ARN",
                            "SSEAlgorithm": "aws:kms"
                        }
                    }
                ]
            }
        }
    },
    "INVALID_UPDATE_PRE_PROVISION": {
        "AWS::S3::Bucket": {
            "resourceProperties": {
                "/BucketName": "encryptedbucket-us-west-2-contractor",
                "/BucketEncryption/ServerSideEncryptionConfiguration": [
                    {
                        "BucketKeyEnabled": true,
                        "ServerSideEncryptionByDefault": {
                            "KMSMasterKeyID": "KMS-KEY-ARN",
                            "SSEAlgorithm": "AES256"
                        }
                    }
                ]
            },
            "previousResourceProperties": {
                "/BucketName": "encryptedbucket-us-west-2-contractor",
                "/BucketEncryption/ServerSideEncryptionConfiguration": [
                    {
                        "BucketKeyEnabled": true,
                        "ServerSideEncryptionByDefault": {
                            "KMSMasterKeyID": "KMS-KEY-ARN",
                            "SSEAlgorithm": "aws:kms"
                        }
                    }
                ]
            }
        }
    },
    "INVALID": {
        "AWS::SQS::Queue": {
            "resourceProperties": {
                "/QueueName": "MyQueueContract",
                "/KmsMasterKeyId": "KMS-KEY-ARN"
            }
        }
    }
}
```

## Angeben von Eingabedaten mithilfe von Eingabedateien
<a name="hook-test-inputs"></a>

Verwenden Sie `input` Dateien, um verschiedene Arten von Eingabedaten anzugeben, die verwendet werden CloudFormation sollen: `preCreate` Eingabe, `preUpdate` Eingabe und ungültige Eingabe. Jede Art von Daten wird in einer separaten Datei angegeben. Sie können auch mehrere Sätze von Eingabedaten für Vertragstests angeben.

Um `input` Dateien anzugeben, die CloudFormation bei Vertragstests verwendet werden sollen, fügen Sie dem Stammverzeichnis Ihres Hooks-Projekts einen `inputs` Ordner hinzu. Fügen Sie dann Ihre Eingabedateien hinzu.

Geben Sie an, welche Art von Eingabedaten eine Datei enthält, indem Sie die folgenden Namenskonventionen verwenden, wobei eine Ganzzahl **n**steht:
+ `inputs_n_pre_create.json`: Verwenden Sie Dateien mit `preCreate` Handlern, um Eingaben für die Erstellung der Ressource anzugeben.
+ `inputs_n_pre_update.json`: Verwenden Sie Dateien mit `preUpdate` Handlern, um Eingaben für die Aktualisierung der Ressource anzugeben.
+ `inputs_n_pre_delete.json`: Verwenden Sie Dateien mit `preDelete` Handlern, um Eingaben für das Löschen der Ressource anzugeben.
+ `inputs_n_invalid.json`: Zur Angabe ungültiger Eingaben zum Testen.

Um mehrere Sätze von Eingabedaten für Vertragstests anzugeben, erhöhen Sie die Ganzzahl in den Dateinamen, um Ihre Eingabedatensätze zu ordnen. Ihr erster Satz von Eingabedateien sollte beispielsweise den Namen `inputs_1_pre_create.json``inputs_1_pre_update.json`, und `inputs_1_pre_invalid.json` haben. Ihr nächster Satz würde den Namen `inputs_2_pre_create.json` `inputs_2_pre_update.json``inputs_2_pre_invalid.json`, und usw. tragen.

Jede Eingabedatei ist eine JSON-Datei, die nur die Ressourceneigenschaften enthält, die beim Testen verwendet werden sollen.

Das Folgende ist ein Beispielverzeichnis `inputs` für die Amazon S3 Angabe von Eingabedaten mithilfe von Eingabedateien.

`inputs_1_pre_create.json`  <a name="inputs_1_pre_create.json"></a>
Das Folgende ist ein Beispiel für den `inputs_1_pre_create.json` Vertragstest.  

```
{
    "AWS::S3::Bucket": {
        "resourceProperties": {
            "AccessControl": "BucketOwnerFullControl",
            "AnalyticsConfigurations": [],
            "BucketEncryption": {
                "ServerSideEncryptionConfiguration": [
                    {
                        "BucketKeyEnabled": true,
                        "ServerSideEncryptionByDefault": {
                            "KMSMasterKeyID": "KMS-KEY-ARN",
                            "SSEAlgorithm": "aws:kms"
                        }
                    }
                ]
            },
            "BucketName": "encryptedbucket-us-west-2"
        }
    },
    "AWS::SQS::Queue": {
        "resourceProperties": {
            "QueueName": "MyQueue",
            "KmsMasterKeyId": "KMS-KEY-ARN"
        }
    }
}
```

`inputs_1_pre_update.json`  <a name="inputs_1_pre_update.json"></a>
Das Folgende ist ein Beispiel für den `inputs_1_pre_update.json` Vertragstest.  

```
{
    "AWS::S3::Bucket": {
        "resourceProperties": {
            "BucketEncryption": {
                "ServerSideEncryptionConfiguration": [
                    {
                        "BucketKeyEnabled": true,
                        "ServerSideEncryptionByDefault": {
                            "KMSMasterKeyID": "KMS-KEY-ARN",
                            "SSEAlgorithm": "aws:kms"
                        }
                    }
                ]
            },
            "BucketName": "encryptedbucket-us-west-2"
        },
        "previousResourceProperties": {
            "BucketEncryption": {
                "ServerSideEncryptionConfiguration": [
                    {
                        "BucketKeyEnabled": true,
                        "ServerSideEncryptionByDefault": {
                            "KMSMasterKeyID": "KMS-KEY-ARN",
                            "SSEAlgorithm": "aws:kms"
                        }
                    }
                ]
            },
            "BucketName": "encryptedbucket-us-west-2"
        }
    }
}
```

`inputs_1_invalid.json`  <a name="inputs_1_invalid.json"></a>
Das Folgende ist ein Beispiel für den `inputs_1_invalid.json` Vertragstest.  

```
{
    "AWS::S3::Bucket": {
        "resourceProperties": {
            "AccessControl": "BucketOwnerFullControl",
            "AnalyticsConfigurations": [],
            "BucketEncryption": {
                "ServerSideEncryptionConfiguration": [
                    {
                        "ServerSideEncryptionByDefault": {
                            "SSEAlgorithm": "AES256"
                        }
                    }
                ]
            },
            "BucketName": "encryptedbucket-us-west-2"
        }
    },
    "AWS::SQS::Queue": {
        "resourceProperties": {
            "NotValid": "The property of this resource is not valid."
        }
    }
}
```

`inputs_1_invalid_pre_update.json`  <a name="inputs_1_invalid_pre_update.json"></a>
Das Folgende ist ein Beispiel für den `inputs_1_invalid_pre_update.json` Vertragstest.  

```
{
    "AWS::S3::Bucket": {
        "resourceProperties": {
            "BucketEncryption": {
                "ServerSideEncryptionConfiguration": [
                    {
                        "BucketKeyEnabled": true,
                        "ServerSideEncryptionByDefault": {
                            "KMSMasterKeyID": "KMS-KEY-ARN",
                            "SSEAlgorithm": "AES256"
                        }
                    }
                ]
            },
            "BucketName": "encryptedbucket-us-west-2"
        },
        "previousResourceProperties": {
            "BucketEncryption": {
                "ServerSideEncryptionConfiguration": [
                    {
                        "BucketKeyEnabled": true,
                        "ServerSideEncryptionByDefault": {
                            "KMSMasterKeyID": "KMS-KEY-ARN",
                            "SSEAlgorithm": "aws:kms"
                        }
                    }
                ]
            },
            "BucketName": "encryptedbucket-us-west-2"
        }
    }
}
```

Weitere Informationen finden Sie unter [Veröffentlichen von Erweiterungen, um sie öffentlich zugänglich zu machen](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/publish-extension.html) im *Benutzerhandbuch für CloudFormation CLI*.