

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

# AppSpec Bagian 'kait'
<a name="reference-appspec-file-structure-hooks"></a>

Konten di `'hooks'` bagian AppSpec file bervariasi, tergantung pada platform komputasi untuk penerapan Anda. `'hooks'`Bagian untuk penerapan EC2/On-premise berisi pemetaan yang menghubungkan peristiwa siklus hidup penerapan terkait ke satu atau beberapa skrip. `'hooks'`Bagian untuk Lambda atau penerapan Amazon ECS menentukan fungsi validasi Lambda untuk dijalankan selama peristiwa siklus hidup penerapan. Jika hook peristiwa tidak ada, tidak ada operasi yang dijalankan untuk acara itu. Bagian ini diperlukan hanya jika Anda menjalankan skrip atau fungsi validasi Lambda sebagai bagian dari penerapan.

**Topics**
+ [AppSpec Bagian 'kait' untuk penerapan Amazon ECS](#appspec-hooks-ecs)
+ [AppSpec Bagian 'kait' untuk penerapan AWS Lambda](#appspec-hooks-lambda)
+ [AppSpec Bagian 'kait' untuk penerapan EC2/On-premise](#appspec-hooks-server)

## AppSpec Bagian 'kait' untuk penerapan Amazon ECS
<a name="appspec-hooks-ecs"></a>

**Topics**
+ [Daftar kait peristiwa siklus hidup untuk penerapan Amazon ECS](#reference-appspec-file-structure-hooks-list-ecs)
+ [Jalankan urutan kait dalam penerapan Amazon ECS.](#reference-appspec-file-structure-hooks-run-order-ecs)
+ [Struktur bagian 'kait'](#reference-appspec-file-structure-hooks-section-structure-ecs)
+ [Contoh fungsi 'kait' Lambda](#reference-appspec-file-structure-hooks-section-structure-ecs-sample-function)

### Daftar kait peristiwa siklus hidup untuk penerapan Amazon ECS
<a name="reference-appspec-file-structure-hooks-list-ecs"></a>

Hook AWS Lambda adalah salah satu fungsi Lambda yang ditentukan dengan string pada baris baru setelah nama peristiwa siklus hidup. Setiap hook dieksekusi satu kali per penerapan. Berikut ini adalah deskripsi peristiwa siklus hidup tempat Anda dapat menjalankan hook selama penerapan Amazon ECS. 
+  `BeforeInstall`— Gunakan untuk menjalankan tugas sebelum set tugas pengganti dibuat. Satu kelompok target dikaitkan dengan set tugas asli. Jika pendengar uji opsional ditentukan, ini terkait dengan set tugas asli. Rollback tidak dimungkinkan pada saat ini. 
+  `AfterInstall`— Gunakan untuk menjalankan tugas setelah set tugas pengganti dibuat dan salah satu kelompok target dikaitkan dengannya. Jika pendengar uji opsional ditentukan, ini terkait dengan set tugas asli. Hasil fungsi hook pada peristiwa siklus hidup ini dapat memicu rollback.
+  `AfterAllowTestTraffic`— Gunakan untuk menjalankan tugas setelah pendengar pengujian menyajikan lalu lintas ke set tugas pengganti. Hasil fungsi hook pada titik ini dapat memicu rollback.
+  `BeforeAllowTraffic`— Gunakan untuk menjalankan tugas setelah kelompok target kedua dikaitkan dengan set tugas pengganti, tetapi sebelum lalu lintas digeser ke set tugas pengganti. Hasil fungsi hook pada peristiwa siklus hidup ini dapat memicu rollback. 
+  `AfterAllowTraffic`— Gunakan untuk menjalankan tugas setelah kelompok target kedua melayani lalu lintas ke set tugas pengganti. Hasil fungsi hook pada peristiwa siklus hidup ini dapat memicu rollback. 

Untuk informasi selengkapnya, lihat [Apa yang terjadi selama penyebaran Amazon ECS](deployment-steps-ecs.md#deployment-steps-what-happens) dan [Tutorial: Menyebarkan layanan Amazon ECS dengan uji validasi](tutorial-ecs-deployment-with-hooks.md).

### Jalankan urutan kait dalam penerapan Amazon ECS.
<a name="reference-appspec-file-structure-hooks-run-order-ecs"></a>

Dalam penerapan Amazon ECS, kait peristiwa berjalan dalam urutan berikut:

![\[Urutan kait acara dalam penyebaran Amazon ECS.\]](http://docs.aws.amazon.com/id_id/codedeploy/latest/userguide/images/lifecycle-event-order-ecs.png)


**catatan**  
Peristiwa **Mulai**, **Instal **TestTraffic**AllowTraffic******,,, dan **Akhir** dalam penerapan tidak dapat ditulis, itulah sebabnya mereka muncul dalam warna abu-abu dalam diagram ini.

### Struktur bagian 'kait'
<a name="reference-appspec-file-structure-hooks-section-structure-ecs"></a>

Berikut ini adalah contoh struktur `'hooks'` bagian tersebut.

Menggunakan YAMAL:

```
Hooks:
  - BeforeInstall: "BeforeInstallHookFunctionName"
  - AfterInstall: "AfterInstallHookFunctionName"
  - AfterAllowTestTraffic: "AfterAllowTestTrafficHookFunctionName"
  - BeforeAllowTraffic: "BeforeAllowTrafficHookFunctionName"
  - AfterAllowTraffic: "AfterAllowTrafficHookFunctionName"
```

Menggunakan JSON:

```
"Hooks": [
		{
			"BeforeInstall": "BeforeInstallHookFunctionName"
		},
		{
			"AfterInstall": "AfterInstallHookFunctionName"
		},
		{
			"AfterAllowTestTraffic": "AfterAllowTestTrafficHookFunctionName"
		},
		{
			"BeforeAllowTraffic": "BeforeAllowTrafficHookFunctionName"
		},
		{
			"AfterAllowTraffic": "AfterAllowTrafficHookFunctionName"
		}
	]
}
```

### Contoh fungsi 'kait' Lambda
<a name="reference-appspec-file-structure-hooks-section-structure-ecs-sample-function"></a>

Gunakan `'hooks'` bagian untuk menentukan fungsi Lambda yang CodeDeploy dapat memanggil untuk memvalidasi penerapan Amazon ECS. Anda dapat menggunakan fungsi yang sama atau yang berbeda untuk peristiwa siklus hidup `BeforeInstall` `AfterInstall``AfterAllowTestTraffic`,`BeforeAllowTraffic`,,, dan `AfterAllowTraffic` penerapan. Setelah menyelesaikan tes validasi, fungsi `AfterAllowTraffic` Lambda memanggil CodeDeploy kembali dan memberikan hasil dari atau. `Succeeded` `Failed` 

**penting**  
Penerapan dianggap gagal jika tidak diberitahukan oleh CodeDeploy fungsi validasi Lambda dalam waktu satu jam.

 Sebelum menjalankan fungsi hook Lambda, server harus diberi tahu tentang ID penerapan dan ID eksekusi kait peristiwa siklus hidup menggunakan perintah. `putLifecycleEventHookExecutionStatus`

 Berikut ini adalah contoh fungsi hook Lambda ditulis dalam Node.js. 

```
'use strict';

const aws = require('aws-sdk');
const codedeploy = new aws.CodeDeploy({apiVersion: '2014-10-06'});

exports.handler = (event, context, callback) => {
    //Read the DeploymentId from the event payload.
    var deploymentId = event.DeploymentId;

    //Read the LifecycleEventHookExecutionId from the event payload
    var lifecycleEventHookExecutionId = event.LifecycleEventHookExecutionId;

    /*
     Enter validation tests here.
    */

    // Prepare the validation test results with the deploymentId and
    // the lifecycleEventHookExecutionId for CodeDeploy.
    var params = {
        deploymentId: deploymentId,
        lifecycleEventHookExecutionId: lifecycleEventHookExecutionId,
        status: 'Succeeded' // status can be 'Succeeded' or 'Failed'
    };
    
    // Pass CodeDeploy the prepared validation test results.
    codedeploy.putLifecycleEventHookExecutionStatus(params, function(err, data) {
        if (err) {
            // Validation failed.
            callback('Validation test failed');
        } else {
            // Validation succeeded.
            callback(null, 'Validation test succeeded');
        }
    });
};
```

## AppSpec Bagian 'kait' untuk penerapan AWS Lambda
<a name="appspec-hooks-lambda"></a>

**Topics**
+ [Daftar kait peristiwa siklus hidup untuk penerapan Lambda AWS](#reference-appspec-file-structure-hooks-list-lambda)
+ [Jalankan urutan kait dalam penerapan versi fungsi Lambda](#reference-appspec-file-structure-hooks-run-order-lambda)
+ [Struktur bagian 'kait'](#reference-appspec-file-structure-hooks-section-structure-lambda)
+ [Contoh fungsi 'kait' Lambda](#reference-appspec-file-structure-hooks-section-structure-lambda-sample-function)

### Daftar kait peristiwa siklus hidup untuk penerapan Lambda AWS
<a name="reference-appspec-file-structure-hooks-list-lambda"></a>

Hook AWS Lambda adalah salah satu fungsi Lambda yang ditentukan dengan string pada baris baru setelah nama peristiwa siklus hidup. Setiap hook dieksekusi satu kali per penerapan. Berikut adalah deskripsi kait yang tersedia untuk digunakan dalam file Anda AppSpec . 
+ **BeforeAllowTraffic**— Gunakan untuk menjalankan tugas sebelum lalu lintas dialihkan ke versi fungsi Lambda yang digunakan.
+ **AfterAllowTraffic**— Gunakan untuk menjalankan tugas setelah semua lalu lintas dialihkan ke versi fungsi Lambda yang digunakan.

### Jalankan urutan kait dalam penerapan versi fungsi Lambda
<a name="reference-appspec-file-structure-hooks-run-order-lambda"></a>

Dalam penerapan versi fungsi Lambda tanpa server, kait peristiwa berjalan dalam urutan berikut:

![\[Urutan kait acara dalam penyebaran Lambda.\]](http://docs.aws.amazon.com/id_id/codedeploy/latest/userguide/images/lifecycle-event-order-lambda.png)


**catatan**  
Peristiwa **Mulai **AllowTraffic****,, dan **Akhir** dalam penerapan tidak dapat ditulis, itulah sebabnya mereka muncul dalam warna abu-abu dalam diagram ini.

### Struktur bagian 'kait'
<a name="reference-appspec-file-structure-hooks-section-structure-lambda"></a>

Berikut ini adalah contoh struktur bagian 'kait'.

Menggunakan YAMAL:

```
hooks:
   - BeforeAllowTraffic: BeforeAllowTrafficHookFunctionName
   - AfterAllowTraffic: AfterAllowTrafficHookFunctionName
```

Menggunakan JSON:

```
"hooks": [{
    "BeforeAllowTraffic": "BeforeAllowTrafficHookFunctionName"
    },
    {
    "AfterAllowTraffic": "AfterAllowTrafficHookFunctionName"
}]
```

### Contoh fungsi 'kait' Lambda
<a name="reference-appspec-file-structure-hooks-section-structure-lambda-sample-function"></a>

Gunakan bagian 'kait' untuk menentukan fungsi Lambda CodeDeploy yang dapat memanggil untuk memvalidasi penerapan Lambda. Anda dapat menggunakan fungsi yang sama atau yang berbeda untuk peristiwa siklus hidup `BeforeAllowTraffic` dan `AfterAllowTraffic` penerapan. Setelah menyelesaikan tes validasi, fungsi validasi Lambda memanggil CodeDeploy kembali dan memberikan hasil dari atau. `Succeeded` `Failed` 

**penting**  
Penerapan dianggap gagal jika tidak diberitahukan oleh CodeDeploy fungsi validasi Lambda dalam waktu satu jam.

 Sebelum menjalankan fungsi hook Lambda, server harus diberi tahu tentang ID penerapan dan ID eksekusi kait peristiwa siklus hidup menggunakan perintah. `putLifecycleEventHookExecutionStatus`

 Berikut ini adalah contoh fungsi hook Lambda ditulis dalam Node.js. 

```
'use strict';

const aws = require('aws-sdk');
const codedeploy = new aws.CodeDeploy({apiVersion: '2014-10-06'});

exports.handler = (event, context, callback) => {
    //Read the DeploymentId from the event payload.
    var deploymentId = event.DeploymentId;

    //Read the LifecycleEventHookExecutionId from the event payload
    var lifecycleEventHookExecutionId = event.LifecycleEventHookExecutionId;

    /*
     Enter validation tests here.
    */

    // Prepare the validation test results with the deploymentId and
    // the lifecycleEventHookExecutionId for CodeDeploy.
    var params = {
        deploymentId: deploymentId,
        lifecycleEventHookExecutionId: lifecycleEventHookExecutionId,
        status: 'Succeeded' // status can be 'Succeeded' or 'Failed'
    };
    
    // Pass CodeDeploy the prepared validation test results.
    codedeploy.putLifecycleEventHookExecutionStatus(params, function(err, data) {
        if (err) {
            // Validation failed.
            callback('Validation test failed');
        } else {
            // Validation succeeded.
            callback(null, 'Validation test succeeded');
        }
    });
};
```

## AppSpec Bagian 'kait' untuk penerapan EC2/On-premise
<a name="appspec-hooks-server"></a>

**Topics**
+ [Daftar kait acara siklus hidup](#reference-appspec-file-structure-hooks-list)
+ [Ketersediaan kait acara siklus hidup](#reference-appspec-file-structure-hooks-availability)
+ [Jalankan urutan kait dalam penerapan](#reference-appspec-file-structure-hooks-run-order)
+ [Struktur bagian 'kait'](#reference-appspec-file-structure-hooks-section-structure)
+ [Mereferensikan file dalam skrip hook Anda](#codedeploy-agent-working-directory)
+ [Ketersediaan variabel lingkungan untuk kait](#reference-appspec-file-structure-environment-variable-availability)
+ [Contoh kait](#reference-appspec-file-structure-hooks-example)

### Daftar kait acara siklus hidup
<a name="reference-appspec-file-structure-hooks-list"></a>

Pengait penerapan EC2/On-premise dijalankan satu kali per penerapan ke sebuah instance. Anda dapat menentukan satu atau beberapa skrip untuk dijalankan di hook. Setiap hook untuk acara siklus hidup ditentukan dengan string pada baris terpisah. Berikut adalah deskripsi kait yang tersedia untuk digunakan dalam file Anda AppSpec . 

Untuk informasi tentang kait peristiwa siklus hidup mana yang valid untuk jenis penerapan dan rollback, lihat. [Ketersediaan kait acara siklus hidup](#reference-appspec-file-structure-hooks-availability)
+ `ApplicationStop`— Peristiwa siklus hidup penerapan ini terjadi bahkan sebelum revisi aplikasi diunduh. Anda dapat menentukan skrip untuk acara ini untuk menghentikan aplikasi dengan anggun atau menghapus paket yang saat ini diinstal sebagai persiapan untuk penerapan. AppSpec File dan skrip yang digunakan untuk peristiwa siklus hidup penerapan ini berasal dari revisi aplikasi yang berhasil diterapkan sebelumnya.
**catatan**  
 AppSpec File tidak ada pada instance sebelum Anda menerapkannya. Untuk alasan ini, `ApplicationStop` hook tidak berjalan saat pertama kali Anda menerapkan ke instance. Anda dapat menggunakan `ApplicationStop` hook untuk kedua kalinya Anda menyebarkan ke sebuah instance.

   Untuk menentukan lokasi revisi aplikasi terakhir yang berhasil diterapkan, CodeDeploy agen mencari lokasi yang tercantum dalam file. `deployment-group-id_last_successful_install` File ini terletak di:

   `/opt/codedeploy-agent/deployment-root/deployment-instructions`folder di Amazon Linux, Server Ubuntu, dan instans RHEL Amazon EC2. 

  `C:\ProgramData\Amazon\CodeDeploy\deployment-instructions`folder pada instans Windows Server Amazon EC2.

  Untuk memecahkan masalah penerapan yang gagal selama peristiwa siklus hidup `ApplicationStop` penerapan, lihat. [Memecahkan masalah peristiwa siklus hidup yang gagal ApplicationStop BeforeBlockTraffic, atau AfterBlockTraffic penerapan](troubleshooting-deployments.md#troubleshooting-deployments-lifecycle-event-failures)
+ `DownloadBundle`— Selama peristiwa siklus hidup penerapan ini, CodeDeploy agen menyalin file revisi aplikasi ke lokasi sementara: 

  `/opt/codedeploy-agent/deployment-root/deployment-group-id/deployment-id/deployment-archive`folder di Amazon Linux, Server Ubuntu, dan instans RHEL Amazon EC2. 

  `C:\ProgramData\Amazon\CodeDeploy\deployment-group-id\deployment-id\deployment-archive`folder pada instans Windows Server Amazon EC2. 

  Acara ini dicadangkan untuk CodeDeploy agen dan tidak dapat digunakan untuk menjalankan skrip.

  Untuk memecahkan masalah penerapan yang gagal selama peristiwa siklus hidup `DownloadBundle` penerapan, lihat. [Memecahkan masalah peristiwa siklus hidup DownloadBundle penerapan yang gagal dengan UnknownError: tidak dibuka untuk dibaca](troubleshooting-deployments.md#troubleshooting-deployments-downloadbundle)
+ `BeforeInstall`— Anda dapat menggunakan peristiwa siklus hidup penerapan ini untuk tugas prainstal, seperti mendekripsi file dan membuat cadangan versi saat ini.
+ `Install`— Selama peristiwa siklus hidup penerapan ini, CodeDeploy agen menyalin file revisi dari lokasi sementara ke folder tujuan akhir. Acara ini dicadangkan untuk CodeDeploy agen dan tidak dapat digunakan untuk menjalankan skrip.
+ `AfterInstall`— Anda dapat menggunakan peristiwa siklus hidup penerapan ini untuk tugas-tugas seperti mengonfigurasi aplikasi Anda atau mengubah izin file.
+ `ApplicationStart`— Anda biasanya menggunakan peristiwa siklus hidup penerapan ini untuk memulai ulang layanan yang dihentikan selama. `ApplicationStop`
+ `ValidateService`— Ini adalah peristiwa siklus hidup penerapan terakhir. Ini digunakan untuk memverifikasi penyebaran telah selesai dengan sukses.
+ `BeforeBlockTraffic`— Anda dapat menggunakan peristiwa siklus hidup penerapan ini untuk menjalankan tugas pada instance sebelum dideregistrasi dari penyeimbang beban.

  Untuk memecahkan masalah penerapan yang gagal selama peristiwa siklus hidup `BeforeBlockTraffic` penerapan, lihat. [Memecahkan masalah peristiwa siklus hidup yang gagal ApplicationStop BeforeBlockTraffic, atau AfterBlockTraffic penerapan](troubleshooting-deployments.md#troubleshooting-deployments-lifecycle-event-failures)
+ `BlockTraffic`— Selama peristiwa siklus hidup penerapan ini, lalu lintas internet diblokir dari mengakses instance yang saat ini melayani lalu lintas. Acara ini dicadangkan untuk CodeDeploy agen dan tidak dapat digunakan untuk menjalankan skrip. 
+ `AfterBlockTraffic`— Anda dapat menggunakan peristiwa siklus hidup penerapan ini untuk menjalankan tugas pada instance setelah dideregistrasi dari penyeimbang beban masing-masing. 

  Untuk memecahkan masalah penerapan yang gagal selama peristiwa siklus hidup `AfterBlockTraffic` penerapan, lihat. [Memecahkan masalah peristiwa siklus hidup yang gagal ApplicationStop BeforeBlockTraffic, atau AfterBlockTraffic penerapan](troubleshooting-deployments.md#troubleshooting-deployments-lifecycle-event-failures)
+ `BeforeAllowTraffic`— Anda dapat menggunakan peristiwa siklus hidup penerapan ini untuk menjalankan tugas pada instance sebelum terdaftar dengan penyeimbang beban.
+ `AllowTraffic`— Selama peristiwa siklus hidup penerapan ini, lalu lintas internet diizinkan untuk mengakses instance setelah penerapan. Acara ini dicadangkan untuk CodeDeploy agen dan tidak dapat digunakan untuk menjalankan skrip.
+ `AfterAllowTraffic`— Anda dapat menggunakan peristiwa siklus hidup penerapan ini untuk menjalankan tugas pada instance setelah terdaftar dengan penyeimbang beban.

### Ketersediaan kait acara siklus hidup
<a name="reference-appspec-file-structure-hooks-availability"></a>

Tabel berikut mencantumkan kait peristiwa siklus hidup yang tersedia untuk setiap skenario penerapan dan rollback.


| Nama acara siklus hidup | Penerapan peluncuran Auto Scaling¹ | Penerapan penghentian Penskalaan Otomatis¹ | Penyebaran di tempat² | Penerapan biru/hijau: Contoh asli | Penerapan biru/hijau: Instans penggantian | Rollback penerapan biru/hijau: Contoh asli | Rollback penerapan biru/hijau: Instans penggantian | 
| --- | --- | --- | --- | --- | --- | --- | --- | 
| ApplicationStop | ✓ | ✓ | ✓ |  | ✓ |  |  | 
| DownloadBundle³ | ✓ |  | ✓ |  | ✓ |  |  | 
| BeforeInstall | ✓ |  | ✓ |  | ✓ |  |  | 
| Instal ³ | ✓ |  | ✓ |  | ✓ |  |  | 
| AfterInstall | ✓ |  | ✓ |  | ✓ |  |  | 
| ApplicationStart | ✓ |  | ✓ |  | ✓ |  |  | 
| ValidateService | ✓ |  | ✓ |  | ✓ |  |  | 
| BeforeBlockTraffic |  | ✓ | ✓ | ✓ |  |  | ✓ | 
| BlockTraffic³ |  | ✓ | ✓ | ✓ |  |  | ✓ | 
| AfterBlockTraffic |  | ✓ | ✓ | ✓ |  |  | ✓ | 
| BeforeAllowTraffic | ✓ |  | ✓ |  | ✓ | ✓ |  | 
| AllowTraffic³ | ✓ |  | ✓ |  | ✓ | ✓ |  | 
| AfterAllowTraffic | ✓ |  | ✓ |  | ✓ | ✓ |  | 
|  ¹ Untuk informasi tentang penerapan Amazon EC2 Auto Scaling, lihat. [Cara Kerja Amazon EC2 Auto Scaling CodeDeploy](integrations-aws-auto-scaling.md#integrations-aws-auto-scaling-behaviors) ² Juga berlaku untuk rollback penerapan di tempat. ³ Dicadangkan untuk CodeDeploy operasi. Tidak dapat digunakan untuk menjalankan skrip.  | 

### Jalankan urutan kait dalam penerapan
<a name="reference-appspec-file-structure-hooks-run-order"></a>

**Penerapan peluncuran Auto Scaling**

Selama penerapan peluncuran Auto Scaling, CodeDeploy jalankan event hook dalam urutan berikut.

Untuk informasi selengkapnya tentang penerapan peluncuran Auto Scaling, lihat. [Cara Kerja Amazon EC2 Auto Scaling CodeDeploy](integrations-aws-auto-scaling.md#integrations-aws-auto-scaling-behaviors)

![\[Urutan kait peristiwa selama penerapan peluncuran Auto Scaling.\]](http://docs.aws.amazon.com/id_id/codedeploy/latest/userguide/images/lifecycle-event-order-scale-out.png)


**catatan**  
Peristiwa **Start **DownloadBundle****, **AllowTraffic**, **Install**, dan **End** dalam penyebaran tidak dapat ditulis, itulah sebabnya mereka muncul dalam warna abu-abu dalam diagram ini. Namun, Anda dapat mengedit `'files'` bagian AppSpec file untuk menentukan apa yang diinstal selama acara **Install**.

**Penerapan penghentian Auto Scaling**

Selama penerapan penghentian Auto Scaling, CodeDeploy jalankan event hook dalam urutan berikut.

Untuk informasi selengkapnya tentang penerapan penghentian Auto Scaling, lihat. [Mengaktifkan penerapan penghentian selama peristiwa penskalaan Auto Scaling](integrations-aws-auto-scaling.md#integrations-aws-auto-scaling-behaviors-hook-enable)

![\[Urutan kait peristiwa selama penerapan penghentian Auto Scaling.\]](http://docs.aws.amazon.com/id_id/codedeploy/latest/userguide/images/lifecycle-event-order-scale-in.png)


**catatan**  
Peristiwa **Mulai **BlockTraffic****,, dan **Akhir** dalam penerapan tidak dapat ditulis, itulah sebabnya mereka muncul dalam warna abu-abu dalam diagram ini. 

**Penerapan di tempat**

Dalam penerapan di tempat, termasuk rollback penerapan di tempat, kait peristiwa dijalankan dalam urutan berikut:

**catatan**  
Untuk penerapan di tempat, enam kait yang terkait dengan pemblokiran dan mengizinkan lalu lintas hanya berlaku jika Anda menentukan Classic Load Balancer, Application Load Balancer, atau Network Load Balancer dari Elastic Load Balancing dalam grup penyebaran.

![\[Urutan kait acara selama rollback penerapan di tempat.\]](http://docs.aws.amazon.com/id_id/codedeploy/latest/userguide/images/lifecycle-event-order-in-place.png)


**catatan**  
Peristiwa **Start **DownloadBundle****,, **Install**, dan **End** dalam penerapan tidak dapat ditulis, itulah sebabnya mereka muncul dalam warna abu-abu dalam diagram ini. Namun, Anda dapat mengedit `'files'` bagian AppSpec file untuk menentukan apa yang diinstal selama acara **Install**.

**Penerapan biru/hijau**

Dalam blue/green penerapan, event hook dijalankan dalam urutan sebagai berikut:

![\[Urutan kait acara dalam blue/green penyebaran.\]](http://docs.aws.amazon.com/id_id/codedeploy/latest/userguide/images/lifecycle-event-order-blue-green.png)


**catatan**  
Peristiwa **Mulai **DownloadBundle****,, **Instal **BlockTraffic**AllowTraffic******,,, dan **Akhir** dalam penerapan tidak dapat ditulis, itulah sebabnya mereka muncul dalam warna abu-abu dalam diagram ini. Namun, Anda dapat mengedit bagian 'file' dari AppSpec file untuk menentukan apa yang diinstal selama acara **Install**.

### Struktur bagian 'kait'
<a name="reference-appspec-file-structure-hooks-section-structure"></a>

`'hooks'`Bagian ini memiliki struktur sebagai berikut:

```
hooks:
   deployment-lifecycle-event-name:
     - location: script-location
       timeout: timeout-in-seconds
       runas: user-name
```

Anda dapat menyertakan elemen-elemen berikut dalam entri **hook** setelah nama peristiwa siklus hidup penerapan:

** lokasi **  
Wajib. Lokasi dalam bundel file skrip untuk revisi. Lokasi skrip yang Anda tentukan di `hooks` bagian ini relatif terhadap root bundel revisi aplikasi. Untuk informasi selengkapnya, lihat [Rencanakan revisi untuk CodeDeploy](application-revisions-plan.md).

** batas waktu **  
Tidak wajib. Jumlah detik untuk memungkinkan skrip dijalankan sebelum dianggap gagal. Defaultnya adalah 3600 detik (1 jam).  
3600 detik (1 jam) adalah jumlah waktu maksimum yang diizinkan untuk eksekusi skrip untuk setiap peristiwa siklus hidup penerapan. Jika skrip melebihi batas ini, penerapan berhenti dan penerapan ke instance gagal. Pastikan jumlah detik yang ditentukan dalam **batas waktu** untuk semua skrip di setiap peristiwa siklus hidup penerapan tidak melebihi batas ini.

** runa **  
Tidak wajib. Pengguna untuk meniru saat menjalankan skrip. Secara default, ini adalah CodeDeploy agen yang berjalan pada instance. CodeDeploy tidak menyimpan kata sandi, sehingga pengguna tidak dapat ditiru jika pengguna **runas** membutuhkan kata sandi. Elemen ini hanya berlaku untuk instance Amazon Linux dan Ubuntu Server.

### Mereferensikan file dalam skrip hook Anda
<a name="codedeploy-agent-working-directory"></a>

Jika Anda menghubungkan skrip ke peristiwa CodeDeploy siklus hidup seperti yang dijelaskan dalam[AppSpec Bagian 'kait'](#reference-appspec-file-structure-hooks), dan Anda ingin mereferensikan file (misalnya,`helper.sh`) dalam skrip Anda, maka Anda harus menentukan menggunakan: `helper.sh`
+ (Disarankan) Jalur absolut. Lihat [Menggunakan jalur absolut](#codedeploy-agent-working-dir-absolute).
+ Jalan relatif. Lihat [Menggunakan jalur relatif](#codedeploy-agent-working-dir-relative).

#### Menggunakan jalur absolut
<a name="codedeploy-agent-working-dir-absolute"></a>

Untuk mereferensikan file menggunakan jalur *absolutnya*, Anda dapat:
+ Tentukan jalur absolut di `files` bagian AppSpec file, di `destination` properti. Kemudian, tentukan jalur absolut yang sama di skrip hook Anda. Untuk informasi selengkapnya, lihat [AppSpec Bagian 'file' (EC2/hanya penerapan di lokasi)](reference-appspec-file-structure-files.md). 
+ Tentukan jalur absolut dinamis dalam skrip hook Anda. Untuk informasi selengkapnya, lihat [Lokasi arsip penerapan](#codedeploy-agent-working-dir-archive).

**Lokasi arsip penyebaran**

Selama peristiwa [DownloadBundle](#reference-appspec-file-structure-hooks-list)siklus hidup, CodeDeploy agen mengekstrak [revisi](application-revisions.md) untuk penerapan ke direktori yang memiliki format berikut:

`root-directory/deployment-group-id/deployment-id/deployment-archive`

*root-directory*Bagian jalur selalu diatur ke default yang ditunjukkan pada tabel berikut, atau dikendalikan oleh pengaturan `:root_dir` konfigurasi. Untuk informasi selengkapnya tentang pengaturan konfigurasi, lihat[CodeDeploy referensi konfigurasi agen](reference-agent-configuration.md).


| Platform agen | Direktori root default | 
| --- | --- | 
| Linux — semua distribusi rpm |  /opt/codedeploy-agent/deployment-root  | 
| Server Ubuntu — semua distribusi deb |  /opt/codedeploy-agent/deployment-root  | 
| Windows Server |  %ProgramData%\$1Amazon\$1CodeDeploy  | 

Dari skrip hook Anda, Anda dapat mengakses arsip penyebaran saat ini menggunakan jalur direktori root dan variabel `DEPLOYMENT_ID` dan `DEPLOYMENT_GROUP_ID` lingkungan. Untuk informasi lebih lanjut tentang variabel yang dapat Anda gunakan, lihat[Ketersediaan variabel lingkungan untuk kait](#reference-appspec-file-structure-environment-variable-availability).

Misalnya, berikut adalah bagaimana Anda dapat mengakses `data.json` file yang berada di root revisi Anda di Linux:

```
#!/bin/bash

rootDirectory="/opt/codedeploy-agent/deployment-root" # note: this will be different if you
                                                      # customize the :root_dir configuration
dataFile="$rootDirectory/$DEPLOYMENT_GROUP_ID/$DEPLOYMENT_ID/deployment-archive/data.json"
data=$(cat dataFile)
```

Sebagai contoh lain, berikut adalah bagaimana Anda dapat mengakses `data.json` file yang berada di root revisi Anda menggunakan Powershell di Windows:

```
$rootDirectory="$env:ProgramData\Amazon\CodeDeploy" # note: this will be different if you
                                                    # customize the :root_dir configuration
$dataFile="$rootDirectory\$env:DEPLOYMENT_GROUP_ID\$env:DEPLOYMENT_ID\deployment-archive\data.json"
$data=(Get-Content $dataFile)
```

#### Menggunakan jalur relatif
<a name="codedeploy-agent-working-dir-relative"></a>

Untuk mereferensikan file menggunakan jalur *relatifnya*, Anda harus mengetahui direktori kerja CodeDeploy agen. Jalur file relatif terhadap direktori ini.

Tabel berikut menunjukkan direktori kerja untuk setiap platform CodeDeploy agen yang didukung.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/codedeploy/latest/userguide/reference-appspec-file-structure-hooks.html)

### Ketersediaan variabel lingkungan untuk kait
<a name="reference-appspec-file-structure-environment-variable-availability"></a>

Selama setiap peristiwa siklus hidup penerapan, skrip hook dapat mengakses variabel lingkungan berikut:

** APPLICATION\$1NAME **  
Nama aplikasi di dalamnya CodeDeploy adalah bagian dari penyebaran saat ini (misalnya,`WordPress_App`).

** DEPLOYMENT\$1ID **  
ID CodeDeploy telah ditetapkan untuk penyebaran saat ini (misalnya,`d-AB1CDEF23`).

** DEPLOYMENT\$1GROUP\$1NAME **  
Nama grup penyebaran di dalamnya CodeDeploy adalah bagian dari penerapan saat ini (misalnya,`WordPress_DepGroup`).

** DEPLOYMENT\$1GROUP\$1ID **  
ID grup penyebaran di dalamnya CodeDeploy adalah bagian dari penerapan saat ini (misalnya,`b1a2189b-dd90-4ef5-8f40-4c1c5EXAMPLE`).

** LIFECYCLE\$1EVENT **  
Nama peristiwa siklus hidup penerapan saat ini (misalnya,). `AfterInstall`

Variabel lingkungan ini bersifat lokal untuk setiap peristiwa siklus hidup penerapan.

 Ada variabel lingkungan tambahan yang tersedia untuk mengaitkan skrip tergantung pada sumber bundel penerapan:

**Bundel dari Amazon S3**
+ **BUNDLE\$1BUCKET**

  Nama bucket Amazon S3 dari mana bundel penerapan diunduh (misalnya,). `my-s3-bucket`
+ **BUNDLE\$1KEY**

  Kunci objek untuk bundel yang diunduh dalam bucket Amazon S3 (misalnya,`WordPress_App.zip`).
+ **BUNDLE\$1VERSION**

  Versi objek untuk bundel (misalnya,`3sL4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY+MTRCxf3vjVBH40Nr8X8gdRQBpUMLUo`). Variabel ini hanya disetel jika bucket Amazon S3 mengaktifkan [versi objek](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html).
+ **BUNDLE\$1ETAG**

  Objek etag untuk bundel (misalnya,`b10a8db164e0754105b7a99be72e3fe5-4`).

**Bundel dari GitHub**
+ **BUNDLE\$1COMMIT**

  Hash SHA256 komit dari bundel yang dihasilkan oleh Git (misalnya,`d2a84f4b8b650937ec8f73cd8be2c74add5a911ba64df27458ed8229da804a26`).

Skrip berikut mengubah port mendengarkan pada server HTTP Apache menjadi 9090, bukan 80 jika nilai **DEPLOYMENT\$1GROUP\$1NAME** sama dengan. `Staging` Skrip ini harus dipanggil selama peristiwa siklus hidup `BeforeInstall` penerapan:

```
if [ "$DEPLOYMENT_GROUP_NAME" == "Staging" ]
then
    sed -i -e 's/Listen 80/Listen 9090/g' /etc/httpd/conf/httpd.conf
fi
```

Contoh skrip berikut mengubah tingkat verbositas pesan yang direkam dalam log kesalahannya dari peringatan menjadi debug jika nilai variabel lingkungan **DEPLOYMENT\$1GROUP\$1NAME** sama dengan. `Staging` Skrip ini harus dipanggil selama peristiwa siklus hidup `BeforeInstall` penerapan:

```
if [ "$DEPLOYMENT_GROUP_NAME" == "Staging" ]
then
    sed -i -e 's/LogLevel warn/LogLevel debug/g' /etc/httpd/conf/httpd.conf
fi
```

Contoh skrip berikut menggantikan teks di halaman web yang ditentukan dengan teks yang menampilkan nilai variabel lingkungan ini. Skrip ini harus dipanggil selama peristiwa siklus hidup `AfterInstall` penerapan:

```
#!/usr/bin/python

import os
 
strToSearch="<h2>This application was deployed using CodeDeploy.</h2>"
strToReplace="<h2>This page for "+os.environ['APPLICATION_NAME']+" application and "+os.environ['DEPLOYMENT_GROUP_NAME']+" deployment group with "+os.environ['DEPLOYMENT_GROUP_ID']+" deployment group ID was generated by a "+os.environ['LIFECYCLE_EVENT']+" script during "+os.environ['DEPLOYMENT_ID']+" deployment.</h2>"
 
fp=open("/var/www/html/index.html","r")
buffer=fp.read()
fp.close()
 
fp=open("/var/www/html/index.html","w")
fp.write(buffer.replace(strToSearch,strToReplace))
fp.close()
```

### Contoh kait
<a name="reference-appspec-file-structure-hooks-example"></a>

Berikut adalah contoh entri **kait** yang menentukan dua kait untuk acara siklus hidup: `AfterInstall`

```
hooks:
   AfterInstall:
     - location: Scripts/RunResourceTests.sh
       timeout: 180
     - location: Scripts/PostDeploy.sh
       timeout: 180
```

`Scripts/RunResourceTests.sh`Skrip berjalan selama `AfterInstall` tahap proses penyebaran. Penerapan tidak berhasil jika skrip membutuhkan waktu lebih dari 180 detik (3 menit) untuk dijalankan.

Lokasi skrip yang Anda tentukan di bagian 'kait' relatif terhadap root bundel revisi aplikasi. Dalam contoh sebelumnya, sebuah file bernama `RunResourceTests.sh` dalam direktori bernama. `Scripts` `Scripts`Direktori berada di tingkat root bundel. Untuk informasi selengkapnya, lihat [Rencanakan revisi untuk CodeDeploy](application-revisions-plan.md).