

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Kait Lambda
<a name="lambda-hooks"></a>

Untuk menggunakan AWS Lambda Hook di akun Anda, Anda harus terlebih dahulu *mengaktifkan* Hook untuk akun dan Wilayah tempat Anda ingin menggunakannya. Mengaktifkan Hook membuatnya dapat digunakan dalam operasi tumpukan di akun dan Wilayah tempat Hook diaktifkan. 

Saat Anda mengaktifkan Lambda Hook, CloudFormation buat entri di registri akun Anda untuk Hook yang diaktifkan sebagai Hook pribadi. Ini memungkinkan Anda untuk mengatur properti konfigurasi apa pun yang disertakan Hook. Properti konfigurasi menentukan bagaimana Hook dikonfigurasi untuk diberikan Akun AWS dan Wilayah.

**Topics**
+ [

## AWS CLI perintah untuk bekerja dengan Lambda Hooks
](#commonly-used-commands-lambda-hooks)
+ [

# Buat fungsi Lambda untuk mengevaluasi sumber daya untuk Lambda Hooks
](lambda-hooks-create-lambda-function.md)
+ [

# Bersiaplah untuk membuat Lambda Hook
](lambda-hooks-prepare-to-create-hook.md)
+ [

# Aktifkan Lambda Hook di akun Anda
](lambda-hooks-activate-hooks.md)
+ [

# Lihat log untuk Lambda Hooks di akun Anda
](lambda-hooks-view-logs.md)
+ [

# Hapus Lambda Hooks di akun Anda
](lambda-hooks-delete-hooks.md)

## AWS CLI perintah untuk bekerja dengan Lambda Hooks
<a name="commonly-used-commands-lambda-hooks"></a>

 AWS CLI Perintah untuk bekerja dengan Lambda Hooks meliputi: 
+ [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/activate-type.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/activate-type.html)untuk memulai proses aktivasi untuk Lambda Hook.
+ [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/set-type-configuration.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/set-type-configuration.html)untuk menentukan data konfigurasi untuk Hook di akun Anda.
+ [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-types.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-types.html)untuk mencantumkan Hooks di akun Anda.
+ [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-type.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-type.html)untuk mengembalikan informasi terperinci tentang Hook tertentu atau versi Hook tertentu, termasuk data konfigurasi saat ini.
+ [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/deactivate-type.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/deactivate-type.html)untuk menghapus Hook yang sebelumnya diaktifkan dari akun Anda.

# Buat fungsi Lambda untuk mengevaluasi sumber daya untuk Lambda Hooks
<a name="lambda-hooks-create-lambda-function"></a>

CloudFormation Lambda Hooks memungkinkan Anda untuk mengevaluasi CloudFormation dan AWS Cloud Control API operasi terhadap kode kustom Anda sendiri. Hook Anda dapat memblokir operasi agar tidak berjalan, atau mengeluarkan peringatan kepada penelepon dan memungkinkan operasi dilanjutkan. Saat Anda membuat Lambda Hook, Anda dapat mengonfigurasinya untuk mencegat dan mengevaluasi operasi berikut: CloudFormation 
+ Operasi sumber daya
+ Operasi tumpukan
+ Ubah operasi set

**Topics**
+ [

## Mengembangkan Lambda Hook
](#lambda-hooks-create-lambda-function-develop)
+ [

## Mengevaluasi operasi sumber daya dengan Lambda Hooks
](#lambda-hooks-create-lambda-function-resource)
+ [

## Mengevaluasi operasi tumpukan dengan Lambda Hooks
](#lambda-hooks-create-lambda-function-stack)
+ [

## Mengevaluasi operasi set perubahan dengan Lambda Hooks
](#lambda-hooks-create-lambda-function-change-set)

## Mengembangkan Lambda Hook
<a name="lambda-hooks-create-lambda-function-develop"></a>

Saat Hooks memanggil Lambda Anda, Lambda akan menunggu hingga 30 detik hingga Lambda mengevaluasi input. Lambda akan mengembalikan respons JSON yang menunjukkan apakah Hook berhasil atau gagal.

**Topics**
+ [

### Minta masukan
](#lambda-hooks-create-lambda-function-request-input)
+ [

### Masukan respons
](#lambda-hooks-create-lambda-function-request-response)
+ [

### Contoh
](#lambda-hooks-create-lambda-function-request-example)

### Minta masukan
<a name="lambda-hooks-create-lambda-function-request-input"></a>

Input yang diteruskan ke fungsi Lambda Anda bergantung pada operasi target Hook (contoh: tumpukan, sumber daya, atau set perubahan). 

### Masukan respons
<a name="lambda-hooks-create-lambda-function-request-response"></a>

Untuk berkomunikasi dengan Hooks jika permintaan Anda berhasil atau gagal, fungsi Lambda Anda perlu mengembalikan respons JSON.

Berikut ini adalah contoh bentuk respons yang diharapkan Hooks:

```
{ 
  "HookStatus": "SUCCESS" or "FAILED" or "IN_PROGRESS", 
  "errorCode": "NonCompliant" or "InternalFailure"
  "pesan": String, 
  "clientRequestToken": String,
  "CallbackContext": None, 
  "callbackDelaySeconds": Integer,
  "anotasi": [
    {
      "annotationName": String,
      "status": "PASSED" or "FAILED" or "SKIPPED",
      "statusMessage": String,
      "remediationMessage": String,
      "remediationLink": String,
      "severityLevel": "INFORMATIONAL" or "LOW" or "MEDIUM" or "HIGH" or "CRITICAL"
    }
  ]
}
```

HookStatus  <a name="lambda-hook-response-hookstatus"></a>
Status Hook. Bidang ini harus diisi.  
*Nilai yang valid*: (`SUCCESS`\$1 `FAILED` \$1`IN_PROGRESS`)  
Hook dapat kembali `IN_PROGRESS` 3 kali. Jika tidak ada hasil yang dikembalikan, Hook akan gagal. Untuk Lambda Hook, ini berarti fungsi Lambda Anda dapat dipanggil hingga 3 kali.

errorCode  <a name="lambda-hook-response-errorcode"></a>
Menunjukkan apakah operasi dievaluasi dan ditentukan tidak valid, atau jika kesalahan terjadi dalam Hook, mencegah evaluasi. Bidang ini diperlukan jika Hook gagal.  
*Nilai yang valid*: (`NonCompliant`\$1`InternalFailure`)

pesan  <a name="lambda-hook-response-message"></a>
Pesan kepada penelepon yang menyatakan mengapa Hook berhasil atau gagal.  
Saat mengevaluasi CloudFormation operasi, bidang ini dipotong menjadi 4096 karakter.  
Saat mengevaluasi operasi Cloud Control API, bidang ini dipotong menjadi 1024 karakter.

clientRequestToken  <a name="lambda-hook-response-clientrequesttoken"></a>
Token permintaan yang disediakan sebagai masukan untuk permintaan Hook. Bidang ini harus diisi.

CallbackContext  <a name="lambda-hook-response-callbackcontext"></a>
Jika Anda menunjukkan bahwa `hookStatus` is, `IN_PROGRESS` Anda meneruskan konteks tambahan yang disediakan sebagai input saat fungsi Lambda dipanggil kembali.

callbackDelaySeconds  <a name="lambda-hook-response-callbackdelayseconds"></a>
Berapa lama Hooks harus menunggu untuk memanggil Hook ini lagi.

anotasi  <a name="lambda-hook-response-annotations"></a>
Sebuah array objek anotasi yang memberikan rincian lebih lanjut dan panduan remediasi.     
Nama anotasi  
Pengidentifikasi untuk anotasi.  
status  
Status pemanggilan Hook. Ini membantu ketika anotasi mewakili logika dengan evaluasi lulus/gagal yang mirip dengan aturan Guard.   
*Nilai yang valid*: (`PASSED`\$1 `FAILED` \$1`SKIPPED`)  
StatusMessage  
Penjelasan untuk status spesifik.  
RemediationPesan  
Saran untuk memperbaiki `FAILED` status. Misalnya, jika sumber daya tidak memiliki enkripsi, Anda dapat menyatakan cara menambahkan enkripsi ke konfigurasi sumber daya.  
RemediationLink  
URL HTTP untuk panduan remediasi tambahan.  
Tingkat keparahan  
Mendefinisikan risiko relatif yang terkait dengan pelanggaran jenis ini. Saat menetapkan tingkat keparahan ke hasil pemanggilan Hook Anda, Anda dapat mereferensikan [kerangka AWS Security Hub CSPM keparahan](https://docs.aws.amazon.com/securityhub/latest/userguide/asff-required-attributes.html#Severity) sebagai contoh cara menyusun kategori keparahan yang bermakna.   
*Nilai yang valid*: (`INFORMATIONAL`\$1 `LOW` \$1 `MEDIUM` \$1 `HIGH` \$1`CRITICAL`)

### Contoh
<a name="lambda-hooks-create-lambda-function-request-example"></a>

Berikut ini adalah contoh respons yang berhasil:

```
{ 
  "hookStatus": "SUCCESS",
  "message": "compliant",
  "clientRequestToken": "123avjdjk31"  
}
```

Berikut ini adalah contoh respons yang gagal:

```
{ 
  "hookStatus": "FAILED",
  "errorCode": "NonCompliant",
  "message": "S3 Bucket Versioning must be enabled.",
  "clientRequestToken": "123avjdjk31"
 }
```

## Mengevaluasi operasi sumber daya dengan Lambda Hooks
<a name="lambda-hooks-create-lambda-function-resource"></a>

Setiap kali Anda membuat, memperbarui, atau menghapus sumber daya, itu dianggap sebagai operasi sumber daya. Sebagai contoh, jika Anda menjalankan pembaruan CloudFormation tumpukan yang membuat sumber daya baru, Anda telah menyelesaikan operasi sumber daya. Saat Anda membuat, memperbarui, atau menghapus sumber daya menggunakan Cloud Control API, itu juga dianggap sebagai operasi sumber daya. Anda dapat mengonfigurasi CloudFormation Lambda Hook Anda untuk menargetkan `RESOURCE` dan `CLOUD_CONTROL` operasi dalam konfigurasi Hook`TargetOperations`.

**catatan**  
`delete`Handler Hook hanya dipanggil ketika sumber daya dihapus menggunakan pemicu operasi dari Cloud Control API `delete-resource` atau. CloudFormation `delete-stack`

**Topics**
+ [

### Sintaks masukan sumber daya Lambda Hook
](#lambda-hooks-create-lambda-function-resource-input)
+ [

### Contoh input perubahan sumber daya Lambda Hook
](#lambda-hooks-create-lambda-function-resource-example)
+ [

### Contoh fungsi Lambda untuk operasi sumber daya
](#lambda-hooks-create-lambda-function-resource-example-function)

### Sintaks masukan sumber daya Lambda Hook
<a name="lambda-hooks-create-lambda-function-resource-input"></a>

Ketika Lambda Anda dipanggil untuk operasi sumber daya, Anda akan menerima input JSON yang berisi properti sumber daya, properti yang diusulkan, dan konteks di sekitar pemanggilan Hook.

Berikut ini adalah contoh bentuk input JSON:

```
{
    "awsAccountId": String,
    "stackId": String,
    "changeSetId": String,
    "hookTypeName": String,
    "hookTypeVersion": String,
    "hookModel": {
        "LambdaFunction": String
    },
    "actionInvocationPoint": "CREATE_PRE_PROVISION" or "UPDATE_PRE_PROVISION" or "DELETE_PRE_PROVISION"
    "requestData": {
        "targetName": String,
        "targetType": String,
        "targetLogicalId": String,
        "targetModel": {
            "resourceProperties": {...},
            "previousResourceProperties": {...}
        }
    },
    "requestContext": {
        "doa": 1,
        "CallbackContext": null
    }
}
```

`awsAccountId`  <a name="lambda-hook-resource-awsaccountid"></a>
ID yang Akun AWS berisi sumber daya yang sedang dievaluasi.

`stackId`  <a name="lambda-hook-resource-stackid"></a>
ID tumpukan CloudFormation tumpukan operasi ini adalah bagian dari. Bidang ini kosong jika penelepon adalah Cloud Control API.

`changeSetId`  <a name="lambda-hook-resource-changesetid"></a>
ID dari set perubahan yang memulai pemanggilan Hook. Nilai ini kosong jika perubahan sumber daya dimulai oleh Cloud Control API, atau `create-stack``update-stack`, atau `delete-stack` operasi.

`hookTypeName`  <a name="lambda-hook-resource-hooktypename"></a>
Nama Hook yang sedang berjalan.

`hookTypeVersion`  <a name="lambda-hook-resource-hooktypeversion"></a>
Versi Hook yang sedang berjalan.

`hookModel`  <a name="lambda-hook-resource-hookmodel"></a>  
`LambdaFunction`  <a name="lambda-hook-resource-hookmodel-lambdafunction"></a>
Lambda ARN saat ini dipanggil oleh Hook.

`actionInvocationPoint`  <a name="lambda-hook-resource-actioninvocationpoint"></a>
Poin yang tepat dalam logika penyediaan tempat Hook berjalan.  
*Nilai yang valid*: (`CREATE_PRE_PROVISION`\$1 `UPDATE_PRE_PROVISION` \$1`DELETE_PRE_PROVISION`)

`requestData`  <a name="lambda-hook-resource-requestdata"></a>  
`targetName`  <a name="lambda-hook-resource-requestdata-targetname"></a>
Jenis target yang sedang dievaluasi, misalnya,`AWS::S3::Bucket`.  
`targetType`  <a name="lambda-hook-resource-requestdata-targettype"></a>
Jenis target yang sedang dievaluasi, misalnya`AWS::S3::Bucket`. Untuk sumber daya yang disediakan dengan Cloud Control API, nilai ini akan menjadi. `RESOURCE`  
`targetLogicalId`  <a name="lambda-hook-resource-requestdata-targetlogicalid"></a>
ID logis dari sumber daya yang sedang dievaluasi. Jika asal pemanggilan Hook adalah CloudFormation, ini akan menjadi ID sumber daya logis yang ditentukan dalam template Anda CloudFormation . Jika asal pemanggilan Hook ini adalah Cloud Control API, ini akan menjadi nilai yang dibangun.  
`targetModel`  <a name="lambda-hook-resource-requestdata-targetmodel"></a>  
`resourceProperties`  <a name="lambda-hook-resource-requestdata-targetmodel-resourceproperties"></a>
Properti yang diusulkan dari sumber daya yang sedang dimodifikasi. Jika sumber daya dihapus, nilai ini akan kosong.   
`previousResourceProperties`  <a name="lambda-hook-resource-requestdata-targetmodel-previousresourceproperties"></a>
Properti yang saat ini terkait dengan sumber daya yang sedang dimodifikasi. Jika sumber daya sedang dibuat, nilai ini akan kosong.

`requestContext`  <a name="lambda-hook-resource-requestcontext"></a>  
doa  <a name="lambda-hook-resource-requestcontext-invocation"></a>
Upaya saat ini untuk mengeksekusi Hook.   
CallbackContext  <a name="lambda-hook-resource-requestcontext-callbackcontext"></a>
Jika Hookwas diatur ke`IN_PROGRESS`, dan dikembalikan, `callbackContext` itu akan ada di sini setelah pemanggilan kembali.

### Contoh input perubahan sumber daya Lambda Hook
<a name="lambda-hooks-create-lambda-function-resource-example"></a>

Contoh input berikut menunjukkan Lambda Hook yang akan menerima definisi `AWS::DynamoDB::Table` sumber daya untuk memperbarui, di mana dari diubah dari 3 menjadi 10. `ReadCapacityUnits` `ProvisionedThroughput` Ini adalah data yang tersedia untuk Lambda untuk evaluasi.

```
{
    "awsAccountId": "123456789012",
    "stackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/MyStack/1a2345b6-0000-00a0-a123-00abc0abc000",
    "hookTypeName": "my::lambda::resourcehookfunction",
    "hookTypeVersion": "00000008",
    "hookModel": {
        "LambdaFunction": "arn:aws:lambda:us-west-2:123456789012:function:MyFunction"
    },
    "actionInvocationPoint": "UPDATE_PRE_PROVISION",
    "requestData": {
        "targetName": "AWS::DynamoDB::Table",
        "targetType": "AWS::DynamoDB::Table",
        "targetLogicalId": "DDBTable",
        "targetModel": {
            "resourceProperties": {
                "AttributeDefinitions": [
                    {
                        "AttributeType": "S",
                        "AttributeName": "Album"
                    },
                    {
                        "AttributeType": "S",
                        "AttributeName": "Artist"
                    }
                ],
                "ProvisionedThroughput": {
                    "WriteCapacityUnits": 5,
                    "ReadCapacityUnits": 10
                },
                "KeySchema": [
                    {
                        "KeyType": "HASH",
                        "AttributeName": "Album"
                    },
                    {
                        "KeyType": "RANGE",
                        "AttributeName": "Artist"
                    }
                ]
            },
            "previousResourceProperties": {
                "AttributeDefinitions": [
                    {
                        "AttributeType": "S",
                        "AttributeName": "Album"
                    },
                    {
                        "AttributeType": "S",
                        "AttributeName": "Artist"
                    }
                ],
                "ProvisionedThroughput": {
                    "WriteCapacityUnits": 5,
                    "ReadCapacityUnits": 5
                },
                "KeySchema": [
                    {
                        "KeyType": "HASH",
                        "AttributeName": "Album"
                    },
                    {
                        "KeyType": "RANGE",
                        "AttributeName": "Artist"
                    }
                ]
            }
        }
    },
    "requestContext": {
        "invocation": 1,
        "callbackContext": null
    }    
}
```

Untuk melihat semua properti yang tersedia untuk jenis sumber daya, lihat [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-dynamodb-table.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-dynamodb-table.html).

### Contoh fungsi Lambda untuk operasi sumber daya
<a name="lambda-hooks-create-lambda-function-resource-example-function"></a>

Berikut ini adalah fungsi sederhana yang gagal setiap pembaruan sumber daya untuk DynamoDB, yang mencoba untuk mengatur `ReadCapacity` `ProvisionedThroughput` dari untuk sesuatu yang lebih besar dari 10. Jika Hook berhasil, pesan, "ReadCapacity dikonfigurasi dengan benar,” akan ditampilkan ke penelepon. Jika permintaan gagal validasi, Hook akan gagal dengan status, "ReadCapacity tidak boleh lebih dari 10.”

------
#### [ Node.js ]

```
export const handler = async (event, context) => {
    var targetModel = event?.requestData?.targetModel;
    var targetName = event?.requestData?.targetName;
    var response = {
        "hookStatus": "SUCCESS",
        "message": "ReadCapacity is correctly configured.",
        "clientRequestToken": event.clientRequestToken
    };

    if (targetName == "AWS::DynamoDB::Table") {
        var readCapacity = targetModel?.resourceProperties?.ProvisionedThroughput?.ReadCapacityUnits;
        if (readCapacity > 10) {
            response.hookStatus = "FAILED";
            response.errorCode = "NonCompliant";
            response.message = "ReadCapacity must be cannot be more than 10.";
        }
    }
    return response;
};
```

------
#### [ Python ]

```
import json
                            
def lambda_handler(event, context):
    # Using dict.get() for safe access to nested dictionary values
    request_data = event.get('requestData', {})
    target_model = request_data.get('targetModel', {})
    target_name = request_data.get('targetName', '')
    
    response = {
        "hookStatus": "SUCCESS",
        "message": "ReadCapacity is correctly configured.",
        "clientRequestToken": event.get('clientRequestToken')
    }
    
    if target_name == "AWS::DynamoDB::Table":
        # Safely navigate nested dictionary
        resource_properties = target_model.get('resourceProperties', {})
        provisioned_throughput = resource_properties.get('ProvisionedThroughput', {})
        read_capacity = provisioned_throughput.get('ReadCapacityUnits')
        
        if read_capacity and read_capacity > 10:
            response['hookStatus'] = "FAILED"
            response['errorCode'] = "NonCompliant"
            response['message'] = "ReadCapacity must be cannot be more than 10."
    
    return response
```

------

## Mengevaluasi operasi tumpukan dengan Lambda Hooks
<a name="lambda-hooks-create-lambda-function-stack"></a>

Setiap kali Anda membuat, memperbarui, atau menghapus tumpukan dengan templat baru, Anda dapat mengonfigurasi CloudFormation Lambda Hook Anda untuk memulai dengan mengevaluasi template baru dan berpotensi memblokir operasi tumpukan agar tidak dilanjutkan. Anda dapat mengonfigurasi CloudFormation Lambda Hook Anda untuk menargetkan `STACK` operasi dalam konfigurasi Hook`TargetOperations`.

**Topics**
+ [

### Sintaks masukan tumpukan Lambda Hook
](#lambda-hooks-create-lambda-function-stack-input)
+ [

### Contoh input perubahan tumpukan Lambda Hook
](#lambda-hooks-create-lambda-function-stack-example)
+ [

### Contoh fungsi Lambda untuk operasi tumpukan
](#lambda-hooks-create-lambda-function-stack-example-function)

### Sintaks masukan tumpukan Lambda Hook
<a name="lambda-hooks-create-lambda-function-stack-input"></a>

Saat Lambda Anda dipanggil untuk operasi tumpukan, Anda akan menerima permintaan JSON yang berisi konteks pemanggilan Hook, dan konteks permintaan. `actionInvocationPoint` Karena ukuran CloudFormation template, dan ukuran input terbatas yang diterima oleh fungsi Lambda, template sebenarnya disimpan dalam objek Amazon S3. Masukan `requestData` menyertakan URL Amazon S3 yang mengundurkan diri ke objek lain, yang berisi versi template saat ini dan sebelumnya.

Berikut ini adalah contoh bentuk input JSON:

```
{
    "clientRequesttoken": String,
    "awsAccountId": String,
    "stackID": String,
    "changeSetId": String,
    "hookTypeName": String,
    "hookTypeVersion": String,
    "hookModel": {
        "LambdaFunction":String
    },
    "actionInvocationPoint": "CREATE_PRE_PROVISION" or "UPDATE_PRE_PROVISION" or "DELETE_PRE_PROVISION"
    "requestData": {
        "targetName": "STACK",
        "targetType": "STACK",
        "targetLogicalId": String,
        "payload": String (S3 Presigned URL)
    },
    "requestContext": {
        "invocation": Integer,
        "callbackContext": String
    }
}
```

`clientRequesttoken`  <a name="lambda-hook-stack-clientrequesttoken"></a>
Token permintaan yang disediakan sebagai masukan untuk permintaan Hook. Bidang ini harus diisi.

`awsAccountId`  <a name="lambda-hook-stack-awsaccountid"></a>
ID yang Akun AWS berisi tumpukan yang sedang dievaluasi.

`stackID`  <a name="lambda-hook-stack-stackid"></a>
ID tumpukan CloudFormation tumpukan.

`changeSetId`  <a name="lambda-hook-stack-changesetid"></a>
ID dari set perubahan yang memulai pemanggilan Hook. Nilai ini kosong jika perubahan tumpukan dimulai oleh Cloud Control API, atau`create-stack`,`update-stack`, atau `delete-stack` operasi.

`hookTypeName`  <a name="lambda-hook-stack-hooktypename"></a>
Nama Hook yang sedang berjalan.

`hookTypeVersion`  <a name="lambda-hook-stack-hooktypeversion"></a>
Versi Hook yang sedang berjalan.

`hookModel`  <a name="lambda-hook-stack-hookmodel"></a>  
`LambdaFunction`  <a name="lambda-hook-stack-hookmodel-lambdafunction"></a>
Lambda ARN saat ini dipanggil oleh Hook.

`actionInvocationPoint`  <a name="lambda-hook-stack-actioninvocationpoint"></a>
Poin yang tepat dalam logika penyediaan tempat Hook berjalan.  
*Nilai yang valid*: (`CREATE_PRE_PROVISION`\$1 `UPDATE_PRE_PROVISION` \$1`DELETE_PRE_PROVISION`)

`requestData`  <a name="lambda-hook-stack-requestdata"></a>  
`targetName`  <a name="lambda-hook-stack-requestdata-targetname"></a>
Nilai ini akan menjadi`STACK`.  
`targetType`  <a name="lambda-hook-stack-requestdata-targettype"></a>
Nilai ini akan menjadi`STACK`.  
`targetLogicalId`  <a name="lambda-hook-stack-requestdata-targetlogicalid"></a>
Nama tumpukan.  
`payload`  <a name="lambda-hook-stack-requestdata-payload"></a>
URL presigned Amazon S3 yang berisi objek JSON dengan definisi template saat ini dan sebelumnya.

`requestContext`  <a name="lambda-hook-stack-requestcontext"></a>
Jika Hook sedang dipanggil kembali, objek ini akan diatur.    
`invocation`  <a name="lambda-hook-stack-requestcontext-invocation"></a>
Upaya saat ini untuk mengeksekusi Hook.  
`callbackContext`  <a name="lambda-hook-stack-requestcontext-callbackcontext"></a>
Jika Hook diatur ke `IN_PROGRESS` dan dikembalikan, `callbackContext` itu akan berada di sini setelah pemanggilan kembali.

`payload`Properti dalam data permintaan adalah URL yang perlu diambil kode Anda. Setelah menerima URL, Anda mendapatkan objek dengan skema berikut:

```
{
    "template": String,
    "previousTemplate": String
}
```

`template`  <a name="lambda-hook-stack-payload-template"></a>
 CloudFormation Template lengkap yang disediakan untuk `create-stack` atau`update-stack`. Ini bisa berupa string JSON atau YAMAL tergantung pada apa yang disediakan. CloudFormation  
Dalam `delete-stack` operasi, nilai ini akan kosong.

`previousTemplate`  <a name="lambda-hook-stack-payload-previoustemplate"></a>
 CloudFormation Template sebelumnya. Ini bisa berupa string JSON atau YAMAL tergantung pada apa yang disediakan. CloudFormation  
Dalam `delete-stack` operasi, nilai ini akan kosong.

### Contoh input perubahan tumpukan Lambda Hook
<a name="lambda-hooks-create-lambda-function-stack-example"></a>

Berikut ini adalah contoh input perubahan tumpukan. Hook mengevaluasi perubahan yang memperbarui `ObjectLockEnabled` ke true, dan menambahkan antrian Amazon SQS:

```
{
    "clientRequestToken": "f8da6d11-b23f-48f4-814c-0fb6a667f50e",
    "awsAccountId": "123456789012",
    "stackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/MyStack/1a2345b6-0000-00a0-a123-00abc0abc000",
    "changeSetId": null,
    "hookTypeName": "my::lambda::stackhook",
    "hookTypeVersion": "00000008",
    "hookModel": {
        "LambdaFunction": "arn:aws:lambda:us-west-2:123456789012:function:MyFunction"
    },
    "actionInvocationPoint": "UPDATE_PRE_PROVISION",
    "requestData": {
        "targetName": "STACK",
        "targetType": "STACK",
        "targetLogicalId": "my-cloudformation-stack",
        "payload": "https://s3......"
    },
    "requestContext": {
        "invocation": 1,
        "callbackContext": null
    }
}
```

Ini adalah contoh `payload` dari`requestData`:

```
{
    "template": "{\"Resources\":{\"S3Bucket\":{\"Type\":\"AWS::S3::Bucket\",\"Properties\":{\"ObjectLockEnabled\":true}},\"SQSQueue\":{\"Type\":\"AWS::SQS::Queue\",\"Properties\":{\"QueueName\":\"NewQueue\"}}}}",
    "previousTemplate": "{\"Resources\":{\"S3Bucket\":{\"Type\":\"AWS::S3::Bucket\",\"Properties\":{\"ObjectLockEnabled\":false}}}}"
}
```

### Contoh fungsi Lambda untuk operasi tumpukan
<a name="lambda-hooks-create-lambda-function-stack-example-function"></a>

Contoh berikut adalah fungsi sederhana yang mengunduh payload operasi stack, mem-parsing template JSON, dan mengembalikan. `SUCCESS`

------
#### [ Node.js ]

```
export const handler = async (event, context) => {
    var targetType = event?.requestData?.targetType;
    var payloadUrl = event?.requestData?.payload;
    
    var response = {
        "hookStatus": "SUCCESS",
        "message": "Stack update is compliant",
        "clientRequestToken": event.clientRequestToken
    };
    try {
        const templateHookPayloadRequest = await fetch(payloadUrl);
        const templateHookPayload = await templateHookPayloadRequest.json()
        if (templateHookPayload.template)  {
            // Do something with the template templateHookPayload.template
            // JSON or YAML
        }
        if (templateHookPayload.previousTemplate) {
            // Do something with the template templateHookPayload.previousTemplate
            // JSON or YAML        
        }        
    } catch (error) {
        console.log(error);
        response.hookStatus = "FAILED";
        response.message = "Failed to evaluate stack operation.";
        response.errorCode = "InternalFailure";
    }
    return response;
};
```

------
#### [ Python ]

Untuk menggunakan Python, Anda harus mengimpor pustaka. `requests` Untuk melakukan ini, Anda harus menyertakan pustaka dalam paket penyebaran Anda saat membuat fungsi Lambda Anda. *Untuk informasi selengkapnya, lihat [Membuat paket deployment .zip dengan dependensi](https://docs.aws.amazon.com/lambda/latest/dg/python-package.html#python-package-create-dependencies) di Panduan Pengembang.AWS Lambda *

```
import json
import requests

def lamnbda_handler(event, context):
    # Safely access nested dictionary values
    request_data = event.get('requestData', {})
    target_type = request_data.get('targetType')
    payload_url = request_data.get('payload')
    
    response = {
        "hookStatus": "SUCCESS",
        "message": "Stack update is compliant",
        "clientRequestToken": event.get('clientRequestToken')
    }
    
    try:
        # Fetch the payload
        template_hook_payload_request = requests.get(payload_url)
        template_hook_payload_request.raise_for_status()  # Raise an exception for bad responses
        template_hook_payload = template_hook_payload_request.json()
        
        if 'template' in template_hook_payload:
            # Do something with the template template_hook_payload['template']
            # JSON or YAML
            pass
        
        if 'previousTemplate' in template_hook_payload:
            # Do something with the template template_hook_payload['previousTemplate']
            # JSON or YAML
            pass

    except Exception as error:
        print(error)
        response['hookStatus'] = "FAILED"
        response['message'] = "Failed to evaluate stack operation."
        response['errorCode'] = "InternalFailure"
    
    return response
```

------

## Mengevaluasi operasi set perubahan dengan Lambda Hooks
<a name="lambda-hooks-create-lambda-function-change-set"></a>

Setiap kali Anda membuat set perubahan, Anda dapat mengonfigurasi CloudFormation Lambda Hook Anda untuk terlebih dahulu mengevaluasi set perubahan baru dan berpotensi memblokir pelaksanaannya. Anda dapat mengonfigurasi CloudFormation Lambda Hook Anda untuk menargetkan `CHANGE_SET` operasi dalam konfigurasi Hook`TargetOperations`.

**Topics**
+ [

### Lambda Hook mengubah sintaks masukan set
](#lambda-hooks-create-lambda-function-change-set-input)
+ [

### Contoh perubahan Lambda Hook mengatur masukan perubahan
](#lambda-hooks-create-lambda-function-change-set-example)
+ [

### Contoh fungsi Lambda untuk operasi set perubahan
](#lambda-hooks-create-lambda-function-change-set-example-function)

### Lambda Hook mengubah sintaks masukan set
<a name="lambda-hooks-create-lambda-function-change-set-input"></a>

Input untuk operasi set perubahan mirip dengan operasi tumpukan, tetapi payload `requestData` juga mencakup daftar perubahan sumber daya yang diperkenalkan oleh set perubahan.

Berikut ini adalah contoh bentuk input JSON:

```
{
    "clientRequesttoken": String,
    "awsAccountId": String,
    "stackID": String,
    "changeSetId": String,
    "hookTypeName": String,
    "hookTypeVersion": String,
    "hookModel": {
        "LambdaFunction":String
    },
    "requestData": {
        "targetName": "CHANGE_SET",
        "targetType": "CHANGE_SET",
        "targetLogicalId": String,
        "payload": String (S3 Presigned URL)
    },
    "requestContext": {
        "invocation": Integer,
        "callbackContext": String
    }
}
```

`clientRequesttoken`  <a name="lambda-hook-change-set-clientrequesttoken"></a>
Token permintaan yang disediakan sebagai masukan untuk permintaan Hook. Bidang ini harus diisi.

`awsAccountId`  <a name="lambda-hook-change-set-awsaccountid"></a>
ID yang Akun AWS berisi tumpukan yang sedang dievaluasi.

`stackID`  <a name="lambda-hook-change-set-stackid"></a>
ID tumpukan CloudFormation tumpukan.

`changeSetId`  <a name="lambda-hook-change-set-changesetid"></a>
ID dari set perubahan yang memulai pemanggilan Hook.

`hookTypeName`  <a name="lambda-hook-change-set-hooktypename"></a>
Nama Hook yang sedang berjalan.

`hookTypeVersion`  <a name="lambda-hook-change-set-hooktypeversion"></a>
Versi Hook yang sedang berjalan.

`hookModel`  <a name="lambda-hook-change-set-hookmodel"></a>  
`LambdaFunction`  <a name="lambda-hook-change-set-hookmodel-lambdafunction"></a>
Lambda ARN saat ini dipanggil oleh Hook.

`requestData`  <a name="lambda-hook-change-set-requestdata"></a>  
`targetName`  <a name="lambda-hook-change-set-requestdata-targetname"></a>
Nilai ini akan menjadi`CHANGE_SET`.  
`targetType`  <a name="lambda-hook-change-set-requestdata-targettype"></a>
Nilai ini akan menjadi`CHANGE_SET`.  
`targetLogicalId`  <a name="lambda-hook-change-set-requestdata-targetlogicalid"></a>
Perubahan set ARN..  
`payload`  <a name="lambda-hook-change-set-requestdata-payload"></a>
URL presigned Amazon S3 yang berisi objek JSON dengan template saat ini, serta daftar perubahan yang diperkenalkan oleh set perubahan ini.

`requestContext`  <a name="lambda-hook-change-set-requestcontext"></a>
Jika Hook sedang dipanggil kembali, objek ini akan diatur.    
`invocation`  <a name="lambda-hook-change-set-requestcontext-invocation"></a>
Upaya saat ini untuk mengeksekusi Hook.  
`callbackContext`  <a name="lambda-hook-change-set-requestcontext-callbackcontext"></a>
Jika Hook diatur ke `IN_PROGRESS` dan dikembalikan, `callbackContext` itu akan berada di sini setelah pemanggilan kembali.

`payload`Properti dalam data permintaan adalah URL yang perlu diambil kode Anda. Setelah menerima URL, Anda mendapatkan objek dengan skema berikut:

```
{
    "template": String,
    "changedResources": [
        {
            "action": String,
            "beforeContext": JSON String,
            "afterContext": JSON String,
            "lineNumber": Integer,
            "logicalResourceId": String,
            "resourceType": String
        }
    ]
}
```

`template`  <a name="lambda-hook-change-set-payload-template"></a>
 CloudFormation Template lengkap yang disediakan untuk `create-stack` atau`update-stack`. Ini bisa berupa string JSON atau YAMAL tergantung pada apa yang disediakan. CloudFormation

`changedResources`  <a name="lambda-hook-change-set-payload-changed-resources"></a>
Daftar sumber daya yang diubah.    
`action`  <a name="lambda-hook-change-set-payload-changed-resources-action"></a>
Jenis perubahan yang diterapkan pada sumber daya.  
*Nilai yang valid*: (`CREATE`\$1 `UPDATE` \$1`DELETE`)  
`beforeContext`  <a name="lambda-hook-change-set-payload-changed-resources-beforecontext"></a>
Sebuah string JSON dari properti sumber daya sebelum perubahan. Nilai ini adalah null ketika sumber daya sedang dibuat. Semua nilai boolean dan angka dalam string JSON ini adalah STRINGS.  
`afterContext`  <a name="lambda-hook-change-set-payload-changed-resources-aftercontext"></a>
Sebuah string JSON dari properti sumber daya jika set perubahan ini dijalankan. Nilai ini adalah null ketika sumber daya sedang dihapus. Semua nilai boolean dan angka dalam string JSON ini adalah STRINGS.  
`lineNumber`  <a name="lambda-hook-change-set-payload-changed-resources-linenumber"></a>
Nomor baris dalam template yang menyebabkan perubahan ini. Jika tindakan adalah nilai `DELETE` ini akan menjadi nol.   
`logicalResourceId`  <a name="lambda-hook-change-set-payload-changed-resources-logicalresourceid"></a>
ID sumber daya logis dari sumber daya yang diubah.  
`resourceType`  <a name="lambda-hook-change-set-payload-changed-resources-resourcetype"></a>
Jenis sumber daya yang sedang diubah.

### Contoh perubahan Lambda Hook mengatur masukan perubahan
<a name="lambda-hooks-create-lambda-function-change-set-example"></a>

Berikut ini adalah contoh perubahan set perubahan input. Dalam contoh berikut, Anda dapat melihat perubahan yang diperkenalkan oleh set perubahan. Perubahan pertama adalah menghapus antrian yang disebut. `CoolQueue` Perubahan kedua adalah menambahkan antrian baru yang disebut`NewCoolQueue`. Perubahan terakhir adalah pembaruan ke`DynamoDBTable`.

```
{
    "clientRequestToken": "f8da6d11-b23f-48f4-814c-0fb6a667f50e",
    "awsAccountId": "123456789012",
    "stackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/MyStack/1a2345b6-0000-00a0-a123-00abc0abc000",
    "changeSetId": "arn:aws:cloudformation:us-west-2:123456789012:changeSet/SampleChangeSet/1a2345b6-0000-00a0-a123-00abc0abc000",
    "hookTypeName": "my::lambda::changesethook",
    "hookTypeVersion": "00000008",
    "hookModel": {
        "LambdaFunction": "arn:aws:lambda:us-west-2:123456789012:function:MyFunction"
    },
    "actionInvocationPoint": "CREATE_PRE_PROVISION",
    "requestData": {
        "targetName": "CHANGE_SET",
        "targetType": "CHANGE_SET",
        "targetLogicalId": "arn:aws:cloudformation:us-west-2:123456789012:changeSet/SampleChangeSet/1a2345b6-0000-00a0-a123-00abc0abc000",
        "payload": "https://s3......"
    },
    "requestContext": {
        "invocation": 1,
        "callbackContext": null
    }
}
```

Ini adalah contoh `payload` dari`requestData.payload`:

```
{
  template: 'Resources:\n' +
    '  DynamoDBTable:\n' +
    '    Type: AWS::DynamoDB::Table\n' +
    '    Properties:\n' +
    '      AttributeDefinitions:\n' +
    '        - AttributeName: "PK"\n' +
    '          AttributeType: "S"\n' +
    '      BillingMode: "PAY_PER_REQUEST"\n' +
    '      KeySchema:\n' +
    '        - AttributeName: "PK"\n' +
    '          KeyType: "HASH"\n' +
    '      PointInTimeRecoverySpecification:\n' +
    '        PointInTimeRecoveryEnabled: false\n' +
    '  NewSQSQueue:\n' +
    '    Type: AWS::SQS::Queue\n' +
    '    Properties:\n' +
    '      QueueName: "NewCoolQueue"',
  changedResources: [
    {
      logicalResourceId: 'SQSQueue',
      resourceType: 'AWS::SQS::Queue',
      action: 'DELETE',
      lineNumber: null,
      beforeContext: '{"Properties":{"QueueName":"CoolQueue"}}',
      afterContext: null
    },
    {
      logicalResourceId: 'NewSQSQueue',
      resourceType: 'AWS::SQS::Queue',
      action: 'CREATE',
      lineNumber: 14,
      beforeContext: null,
      afterContext: '{"Properties":{"QueueName":"NewCoolQueue"}}'
    },
    {
      logicalResourceId: 'DynamoDBTable',
      resourceType: 'AWS::DynamoDB::Table',
      action: 'UPDATE',
      lineNumber: 2,
      beforeContext: '{"Properties":{"BillingMode":"PAY_PER_REQUEST","AttributeDefinitions":[{"AttributeType":"S","AttributeName":"PK"}],"KeySchema":[{"KeyType":"HASH","AttributeName":"PK"}]}}',
      afterContext: '{"Properties":{"BillingMode":"PAY_PER_REQUEST","PointInTimeRecoverySpecification":{"PointInTimeRecoveryEnabled":"false"},"AttributeDefinitions":[{"AttributeType":"S","AttributeName":"PK"}],"KeySchema":[{"KeyType":"HASH","AttributeName":"PK"}]}}'
    }
  ]
}
```

### Contoh fungsi Lambda untuk operasi set perubahan
<a name="lambda-hooks-create-lambda-function-change-set-example-function"></a>

Contoh berikut adalah fungsi sederhana yang mengunduh payload operasi set perubahan, loop melalui setiap perubahan, dan kemudian mencetak properti sebelum dan sesudah sebelum mengembalikan a`SUCCESS`.

------
#### [ Node.js ]

```
export const handler = async (event, context) => {
    var payloadUrl = event?.requestData?.payload;    
    var response = {
        "hookStatus": "SUCCESS",
        "message": "Change set changes are compliant",
        "clientRequestToken": event.clientRequestToken
    };
    try {
        const changeSetHookPayloadRequest = await fetch(payloadUrl);
        const changeSetHookPayload = await changeSetHookPayloadRequest.json();
        const changes = changeSetHookPayload.changedResources || [];
        for(const change of changes) {
            var beforeContext = {};
            var afterContext = {};
            if(change.beforeContext) {
                beforeContext = JSON.parse(change.beforeContext);
            }
            if(change.afterContext) {
                afterContext = JSON.parse(change.afterContext);
            }
            console.log(beforeContext)
            console.log(afterContext)
            // Evaluate Change here
        }
    } catch (error) {
        console.log(error);
        response.hookStatus = "FAILED";
        response.message = "Failed to evaluate change set operation.";
        response.errorCode = "InternalFailure";
    }
    return response;
};
```

------
#### [ Python ]

Untuk menggunakan Python, Anda harus mengimpor pustaka. `requests` Untuk melakukan ini, Anda harus menyertakan pustaka dalam paket penyebaran Anda saat membuat fungsi Lambda Anda. *Untuk informasi selengkapnya, lihat [Membuat paket deployment .zip dengan dependensi](https://docs.aws.amazon.com/lambda/latest/dg/python-package.html#python-package-create-dependencies) di Panduan Pengembang.AWS Lambda *

```
import json
import requests

def lambda_handler(event, context):
    payload_url = event.get('requestData', {}).get('payload')
    response = {
        "hookStatus": "SUCCESS",
        "message": "Change set changes are compliant",
        "clientRequestToken": event.get('clientRequestToken')
    }

    try:
        change_set_hook_payload_request = requests.get(payload_url)
        change_set_hook_payload_request.raise_for_status()  # Raises an HTTPError for bad responses
        change_set_hook_payload = change_set_hook_payload_request.json()
        
        changes = change_set_hook_payload.get('changedResources', [])
        
        for change in changes:
            before_context = {}
            after_context = {}
            
            if change.get('beforeContext'):
                before_context = json.loads(change['beforeContext'])
            
            if change.get('afterContext'):
                after_context = json.loads(change['afterContext'])
            
            print(before_context)
            print(after_context)
            # Evaluate Change here

    except requests.RequestException as error:
        print(error)
        response['hookStatus'] = "FAILED"
        response['message'] = "Failed to evaluate change set operation."
        response['errorCode'] = "InternalFailure"
    except json.JSONDecodeError as error:
        print(error)
        response['hookStatus'] = "FAILED"
        response['message'] = "Failed to parse JSON payload."
        response['errorCode'] = "InternalFailure"

    return response
```

------

# Bersiaplah untuk membuat Lambda Hook
<a name="lambda-hooks-prepare-to-create-hook"></a>

Sebelum Anda membuat Lambda Hook, Anda harus menyelesaikan prasyarat berikut:
+ Anda harus sudah membuat fungsi Lambda. Untuk informasi selengkapnya, lihat [Buat fungsi Lambda untuk Hooks](lambda-hooks-create-lambda-function.md).
+ Pengguna atau peran yang membuat Hook harus memiliki izin yang cukup untuk mengaktifkan Hooks. Untuk informasi selengkapnya, lihat [Berikan izin IAM untuk Hooks CloudFormation](grant-iam-permissions-for-hooks.md).
+ Untuk menggunakan AWS CLI atau SDK untuk membuat Lambda Hook, Anda harus secara manual membuat peran eksekusi dengan izin IAM dan kebijakan kepercayaan CloudFormation untuk memungkinkan memanggil Lambda Hook. 

## Buat peran eksekusi untuk Lambda Hook
<a name="lambda-hooks-create-execution-role"></a>

Hook menggunakan peran eksekusi untuk izin yang diperlukan untuk memanggil Hook itu di Anda. Akun AWS

Peran ini dapat dibuat secara otomatis jika Anda membuat Lambda Hook dari Konsol Manajemen AWS; jika tidak, Anda harus membuat peran ini sendiri.

Bagian berikut menunjukkan cara mengatur izin untuk membuat Lambda Hook Anda. 

### Izin yang diperlukan
<a name="lambda-hooks-execution-role-permissions"></a>

Ikuti panduan di [Membuat peran menggunakan kebijakan kepercayaan khusus](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-custom.html) di *Panduan Pengguna IAM* untuk membuat peran dengan kebijakan kepercayaan khusus.

Kemudian, selesaikan langkah-langkah berikut untuk mengatur izin Anda:

1. Lampirkan kebijakan hak istimewa minimum berikut ke peran IAM yang ingin Anda gunakan untuk membuat Lambda Hook.

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": "lambda:InvokeFunction",
         "Resource": "arn:aws:lambda:us-west-2:123456789012:function:MyFunction"
       }
     ]
   }
   ```

------

1. Berikan izin Hook Anda untuk mengambil peran dengan menambahkan kebijakan kepercayaan ke peran tersebut. Berikut ini menunjukkan contoh kebijakan kepercayaan yang dapat Anda gunakan.

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": [
             "hooks.cloudformation.amazonaws.com"
           ]
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

------

# Aktifkan Lambda Hook di akun Anda
<a name="lambda-hooks-activate-hooks"></a>

Topik berikut menunjukkan cara mengaktifkan Lambda Hook di akun Anda, yang membuatnya dapat digunakan di akun dan Wilayah tempat diaktifkan.

**Topics**
+ [

## Aktifkan Lambda Hook (konsol)
](#lambda-hooks-activate-hook-console)
+ [

## Aktifkan Lambda Hook ()AWS CLI
](#lambda-hooks-activate-hooks-cli)
+ [

## Sumber daya terkait
](#related-resources-lambda-hooks)

## Aktifkan Lambda Hook (konsol)
<a name="lambda-hooks-activate-hook-console"></a>

**Untuk mengaktifkan Lambda Hook untuk digunakan di akun Anda**

1. Masuk ke Konsol Manajemen AWS dan buka CloudFormation konsol di [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. Pada bilah navigasi di bagian atas layar, pilih Wilayah AWS tempat Anda ingin membuat Hook.

1. Jika Anda *belum* membuat fungsi Lambda untuk Hook, lakukan hal berikut:
   + Buka [halaman Fungsi](https://console.aws.amazon.com/lambda/home#/functions) di konsol Lambda.
   + Buat fungsi Lambda yang akan Anda gunakan dengan Hook ini, dan kemudian kembali ke prosedur ini. Untuk informasi selengkapnya, lihat [Buat fungsi Lambda untuk mengevaluasi sumber daya untuk Lambda Hooks](lambda-hooks-create-lambda-function.md). 

   Jika Anda telah membuat fungsi Lambda Anda, lanjutkan ke langkah berikutnya. 

1. Di panel navigasi di sebelah kiri, pilih **Hooks**.

1. Pada halaman **Hooks**, pilih **Create a Hook**, lalu pilih **With Lambda**.

1. Untuk **nama Hook**, pilih salah satu opsi berikut:
   + Berikan nama deskriptif singkat yang akan ditambahkan setelahnya`Private::Lambda::`. Misalnya, jika Anda masuk*`MyTestHook`*, nama Hook lengkap menjadi`Private::Lambda::MyTestHook`.
   + Berikan nama Hook lengkap (juga disebut alias) menggunakan format ini: `Provider::ServiceName::HookName` 

1. Untuk fungsi **Lambda, sediakan fungsi** Lambda untuk digunakan dengan Hook ini. Anda dapat menggunakan: 
   + Nama Sumber Daya Amazon lengkap (ARN) tanpa akhiran.
   + ARN yang memenuhi syarat dengan versi atau akhiran alias.

1. Untuk **target Hook**, pilih apa yang akan dievaluasi:
   + **Stacks** - Mengevaluasi template tumpukan saat pengguna membuat, memperbarui, atau menghapus tumpukan.
   + **Sumber Daya** - Mengevaluasi perubahan sumber daya individu saat pengguna memperbarui tumpukan.
   + **Ubah set** - Mengevaluasi pembaruan yang direncanakan saat pengguna membuat set perubahan.
   + **Cloud Control API** - Mengevaluasi membuat, memperbarui, atau menghapus operasi yang diprakarsai oleh [Cloud Control](https://docs.aws.amazon.com/cloudcontrolapi/latest/userguide/what-is-cloudcontrolapi.html) API.

1. Untuk **Tindakan**, pilih tindakan mana (buat, perbarui, hapus) yang akan memanggil Hook Anda.

1. Untuk **mode Hook**, pilih bagaimana Hook merespons ketika fungsi Lambda yang dipanggil oleh Hook mengembalikan respons: `FAILED`
   + **Peringatkan** — Mengeluarkan peringatan kepada pengguna tetapi memungkinkan tindakan untuk dilanjutkan. Ini berguna untuk validasi non-kritis atau pemeriksaan informasi.
   + **Gagal** — Mencegah tindakan dari melanjutkan. Ini berguna untuk menegakkan kepatuhan yang ketat atau kebijakan keamanan.

1. Untuk **peran Eksekusi**, pilih peran IAM yang diasumsikan Hook untuk memanggil fungsi Lambda Anda. Anda dapat mengizinkan CloudFormation untuk secara otomatis membuat peran eksekusi untuk Anda atau Anda dapat menentukan peran yang telah Anda buat. 

1. Pilih **Berikutnya**.

1. (Opsional) Untuk **filter Hook**, lakukan hal berikut:

   1. Untuk **filter Sumber Daya**, tentukan jenis sumber daya mana yang dapat memanggil Hook. Ini memastikan bahwa Hook hanya dipanggil untuk sumber daya yang relevan.

   1. Untuk **kriteria Pemfilteran**, pilih logika untuk menerapkan nama tumpukan dan filter peran tumpukan:
      + **Semua nama tumpukan dan peran tumpukan** — Hook hanya akan dipanggil ketika semua filter yang ditentukan cocok.
      + **Setiap nama tumpukan dan peran tumpukan** — Hook akan dipanggil jika setidaknya salah satu filter yang ditentukan cocok.
**catatan**  
Untuk operasi Cloud Control API, semua **nama Stack** **dan filter peran Stack** diabaikan.

   1. Untuk **nama Stack**, sertakan atau kecualikan tumpukan tertentu dari pemanggilan Hook.
      + Untuk **Sertakan**, tentukan nama tumpukan yang akan disertakan. Gunakan ini ketika Anda memiliki satu set kecil tumpukan spesifik yang ingin Anda targetkan. Hanya tumpukan yang ditentukan dalam daftar ini yang akan memanggil Hook.
      + Untuk **Kecualikan**, tentukan nama tumpukan yang akan dikecualikan. Gunakan ini ketika Anda ingin memanggil Hook di sebagian besar tumpukan tetapi mengecualikan beberapa yang spesifik. Semua tumpukan kecuali yang tercantum di sini akan memanggil Hook.

   1. Untuk **peran Stack**, sertakan atau kecualikan tumpukan tertentu dari pemanggilan Hook berdasarkan peran IAM terkait.
      + Untuk **Sertakan**, tentukan satu atau beberapa peran IAM ARNs untuk menargetkan tumpukan yang terkait dengan peran ini. Hanya operasi tumpukan yang diprakarsai oleh peran ini yang akan memanggil Hook.
      + Untuk **Kecualikan**, tentukan satu atau beberapa peran IAM ARNs untuk tumpukan yang ingin Anda kecualikan. Hook akan dipanggil pada semua tumpukan kecuali yang diprakarsai oleh peran yang ditentukan.

1. Pilih **Berikutnya**.

1. Pada halaman **Tinjau dan aktifkan**, tinjau pilihan Anda. Untuk membuat perubahan, pilih **Edit** pada bagian terkait.

1. Saat Anda siap untuk melanjutkan, pilih **Activate Hook**.

## Aktifkan Lambda Hook ()AWS CLI
<a name="lambda-hooks-activate-hooks-cli"></a>

Sebelum melanjutkan, konfirmasikan bahwa Anda telah membuat fungsi Lambda dan peran eksekusi yang akan Anda gunakan dengan Hook ini. Untuk informasi selengkapnya, lihat [Buat fungsi Lambda untuk mengevaluasi sumber daya untuk Lambda Hooks](lambda-hooks-create-lambda-function.md) dan [Buat peran eksekusi untuk Lambda Hook](lambda-hooks-prepare-to-create-hook.md#lambda-hooks-create-execution-role).

**Untuk mengaktifkan Lambda Hook untuk digunakan di akun Anda ()AWS CLI**

1. Untuk mulai mengaktifkan Hook, gunakan [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/activate-type.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/activate-type.html)perintah berikut, ganti placeholder dengan nilai spesifik Anda. Perintah ini mengotorisasi Hook untuk menggunakan peran eksekusi tertentu dari Anda Akun AWS.

   ```
   aws cloudformation activate-type --type HOOK \
     --type-name AWS::Hooks::LambdaHook \
     --publisher-id aws-hooks \
     --execution-role-arn arn:aws:iam::123456789012:role/my-execution-role \
     --type-name-alias Private::Lambda::MyTestHook \
     --region us-west-2
   ```

1. Untuk menyelesaikan pengaktifan Hook, Anda harus mengkonfigurasinya menggunakan file konfigurasi JSON.

   Gunakan **cat** perintah untuk membuat file JSON dengan struktur berikut. Untuk informasi selengkapnya, lihat [Referensi sintaks skema konfigurasi hook](hook-configuration-schema.md).

   ```
   $ cat > config.json
   {
     "CloudFormationConfiguration": {
       "HookConfiguration": {
         "HookInvocationStatus": "ENABLED",
         "TargetOperations": [
           "CLOUD_CONTROL"
         ],
         "FailureMode": "WARN",
         "Properties": {
           "LambdaFunction": "arn:aws:lambda:us-west-2:123456789012:function:MyFunction"
         },
         "TargetFilters": {
           "Actions": [
             "CREATE",
             "UPDATE",
             "DELETE"
           ]
         }
       }
     }
   }
   ```
   + `HookInvocationStatus`: Setel `ENABLED` untuk mengaktifkan Hook.
   + `TargetOperations`: Tentukan operasi yang akan dievaluasi oleh Hook.
   + `FailureMode`: Setel ke salah satu `FAIL` atau`WARN`.
   + `LambdaFunction`: Tentukan ARN dari fungsi Lambda.
   + `TargetFilters`: Tentukan jenis tindakan yang akan memanggil Hook.

1. Gunakan [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/set-type-configuration.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/set-type-configuration.html)perintah berikut, bersama dengan file JSON yang Anda buat, untuk menerapkan konfigurasi. Ganti placeholder dengan nilai spesifik Anda.

   ```
   aws cloudformation set-type-configuration \
     --configuration file://config.json \
     --type-arn "arn:aws:cloudformation:us-west-2:123456789012:type/hook/MyTestHook" \
     --region us-west-2
   ```

## Sumber daya terkait
<a name="related-resources-lambda-hooks"></a>

Kami menyediakan contoh template yang dapat Anda gunakan untuk memahami cara mendeklarasikan Lambda Hook dalam template tumpukan. CloudFormation Untuk informasi selengkapnya, lihat [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-cloudformation-lambdahook.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-cloudformation-lambdahook.html) di *AWS CloudFormation Panduan Pengguna*.

# Lihat log untuk Lambda Hooks di akun Anda
<a name="lambda-hooks-view-logs"></a>

Saat menggunakan Lambda Hook, file log laporan keluaran validasi Anda dapat ditemukan di konsol Lambda.

## Lihat log Lambda Hook di konsol Lambda
<a name="lambda-hooks-view-logs-console"></a>

**Untuk melihat file log keluaran Lambda Hook**

1. Masuk ke konsol Lambda.

1. Pada bilah navigasi di bagian atas layar, pilih Anda Wilayah AWS.

1. Pilih **Fungsi**.

1. Pilih fungsi Lambda yang diinginkan.

1. Pilih tab **Uji**.

1. Pilih **CloudWatch Log Live Trail**

1. Pilih menu tarik-turun dan pilih grup log yang ingin Anda lihat.

1. Pilih **Mulai**. Log akan ditampilkan di jendela **CloudWatch Log Live Trail**. Pilih **Lihat di kolom** atau **Lihat dalam teks biasa** tergantung pada preferensi Anda.
   + Anda dapat menambahkan lebih banyak filter ke hasil dengan menambahkannya di bidang **Add filter pattern**. Bidang ini memungkinkan Anda memfilter hasil untuk hanya menyertakan peristiwa yang cocok dengan pola yang ditentukan. 

Untuk informasi selengkapnya tentang melihat log untuk fungsi Lambda, lihat [Melihat CloudWatch Log untuk fungsi Lambda](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-cloudwatchlogs-view.html).

# Hapus Lambda Hooks di akun Anda
<a name="lambda-hooks-delete-hooks"></a>

Bila Anda tidak lagi membutuhkan Lambda Hook yang diaktifkan, gunakan prosedur berikut untuk menghapusnya di akun Anda.

Untuk menonaktifkan sementara Hook alih-alih menghapusnya, lihat[Nonaktifkan dan aktifkan CloudFormation Hooks](hooks-disable-enable.md).

**Topics**
+ [

## Hapus Lambda Hook di akun Anda (konsol)
](#lambda-hooks-delete-hook-console)
+ [

## Hapus Lambda Hook di akun Anda ()AWS CLI
](#lambda-hooks-delete-hook-cli)

## Hapus Lambda Hook di akun Anda (konsol)
<a name="lambda-hooks-delete-hook-console"></a>

**Untuk menghapus Lambda Hook di akun Anda**

1. Masuk ke Konsol Manajemen AWS dan buka CloudFormation konsol di [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. Pada bilah navigasi di bagian atas layar, pilih Wilayah AWS tempat Hook berada.

1. Dari panel navigasi, pilih **Hooks**.

1. Pada halaman **Hooks**, temukan Lambda Hook yang ingin Anda hapus.

1. Pilih kotak centang di sebelah Hook Anda dan pilih **Hapus**. 

1. **Saat diminta konfirmasi, ketikkan nama Hook untuk mengonfirmasi penghapusan Hook yang ditentukan dan kemudian pilih Hapus.**

## Hapus Lambda Hook di akun Anda ()AWS CLI
<a name="lambda-hooks-delete-hook-cli"></a>

**catatan**  
Sebelum Anda dapat menghapus Hook, Anda harus menonaktifkannya terlebih dahulu. Untuk informasi selengkapnya, lihat [Nonaktifkan dan aktifkan Hook di akun Anda (AWS CLI)](hooks-disable-enable.md#hooks-disable-enable-cli).

Gunakan [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/deactivate-type.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/deactivate-type.html)perintah berikut untuk menonaktifkan Hook, yang menghapusnya dari akun Anda. Ganti placeholder dengan nilai spesifik Anda.

```
aws cloudformation deactivate-type \
  --type-arn "arn:aws:cloudformation:us-west-2:123456789012:type/hook/MyTestHook" \
  --region us-west-2
```