

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

# AppSpec Struktur berkas
<a name="reference-appspec-file-structure"></a>

Berikut ini adalah struktur tingkat tinggi untuk AppSpec file yang digunakan untuk penerapan ke AWS Lambda dan EC2/platform komputasi lokal.

Nilai dalam AppSpec file berformat YAML yang merupakan string tidak boleh dibungkus dengan tanda kutip (“”) kecuali ditentukan lain.

## AppSpec struktur file untuk penerapan Amazon ECS
<a name="ecs-appspec-structure"></a>

**catatan**  
 AppSpec File ini ditulis dalam YAMAL, tetapi Anda dapat menggunakan struktur yang sama untuk menulis satu di JSON. String dalam AppSpec file berformat JSON selalu dibungkus dengan tanda kutip (“”).

```
version: 0.0
resources: 
  ecs-service-specifications
hooks: 
  deployment-lifecycle-event-mappings
```

Dalam struktur ini:

** **versi** **  
Bagian ini menentukan versi AppSpec file. Jangan ubah nilai ini. Hal ini diperlukan. Saat ini, satu-satunya nilai yang diizinkan adalah**0.0**. Ini dicadangkan oleh CodeDeploy untuk penggunaan masa depan.  
Tentukan **versi** dengan string.

** **sumber daya** **  
Bagian ini menentukan informasi tentang aplikasi Amazon ECS untuk digunakan.  
Untuk informasi selengkapnya, lihat [AppSpec Bagian 'sumber daya' untuk penerapan Amazon ECS](reference-appspec-file-structure-resources.md#reference-appspec-file-structure-resources-ecs).

** **kait** **  
Bagian ini menentukan fungsi Lambda untuk dijalankan pada kait peristiwa siklus hidup penerapan tertentu untuk memvalidasi penerapan.  
Untuk informasi selengkapnya, lihat [Daftar kait peristiwa siklus hidup untuk penerapan Amazon ECS](reference-appspec-file-structure-hooks.md#reference-appspec-file-structure-hooks-list-ecs).

## AppSpec struktur file untuk penerapan AWS Lambda
<a name="lambda-appspec-structure"></a>

**catatan**  
 AppSpec File ini ditulis dalam YAMB, tetapi Anda dapat menggunakan struktur yang sama untuk menulis AppSpec file untuk penyebaran Lambda di JSON. String dalam AppSpec file berformat JSON selalu dibungkus dengan tanda kutip (“”).

```
version: 0.0
resources: 
  lambda-function-specifications
hooks: 
  deployment-lifecycle-event-mappings
```

Dalam struktur ini:

** **versi** **  
Bagian ini menentukan versi AppSpec file. Jangan ubah nilai ini. Hal ini diperlukan. Saat ini, satu-satunya nilai yang diizinkan adalah**0.0**. Ini dicadangkan oleh CodeDeploy untuk penggunaan masa depan.  
Tentukan **versi** dengan string.

** **sumber daya** **  
Bagian ini menentukan informasi tentang fungsi Lambda untuk menyebarkan.  
Untuk informasi selengkapnya, lihat [AppSpec Bagian 'sumber daya' (hanya Amazon ECS dan AWS Lambda penerapan)](reference-appspec-file-structure-resources.md).

** **kait** **  
Bagian ini menentukan fungsi Lambda untuk dijalankan pada peristiwa siklus hidup penerapan tertentu untuk memvalidasi penerapan.  
Untuk informasi selengkapnya, lihat [AppSpec Bagian 'kait'](reference-appspec-file-structure-hooks.md).

## AppSpec struktur file untuk EC2/penerapan di lokasi
<a name="server-appspec-structure"></a>

```
version: 0.0
os: operating-system-name
files:
  source-destination-files-mappings
permissions:
  permissions-specifications
hooks:
  deployment-lifecycle-event-mappings
```

Dalam struktur ini:

** **versi** **  
Bagian ini menentukan versi AppSpec file. Jangan ubah nilai ini. Hal ini diperlukan. Saat ini, satu-satunya nilai yang diizinkan adalah**0.0**. Ini dicadangkan oleh CodeDeploy untuk penggunaan masa depan.  
Tentukan **versi** dengan string.

** **os** **  
Bagian ini menentukan nilai sistem operasi dari instance yang Anda gunakan. Hal ini diperlukan. Nilai-nilai berikut dapat ditentukan:  
+ **linux** — Instans ini adalah Amazon Linux, Ubuntu Server, atau RHEL instance.
+ **windows** — Instans adalah instance Windows Server.
Tentukan **os** dengan string.

** **berkas** **  
**Bagian ini menentukan nama-nama file yang harus disalin ke instance selama acara Install deployment.**  
Untuk informasi selengkapnya, lihat [AppSpec Bagian 'file' (EC2/hanya penerapan di lokasi)](reference-appspec-file-structure-files.md).

** **izin** **  
Bagian ini menentukan bagaimana izin khusus, jika ada, harus diterapkan ke file di `files` bagian saat mereka sedang disalin ke instance. Bagian ini hanya berlaku untuk Amazon Linux, Ubuntu Server, dan Red Hat Enterprise Linux (RHEL).  
Untuk informasi selengkapnya, lihat [AppSpec Bagian 'izin' (EC2/hanya penerapan di lokasi)](reference-appspec-file-structure-permissions.md).

** **kait** **  
Bagian ini menentukan skrip untuk dijalankan pada peristiwa siklus hidup penerapan tertentu selama penerapan.  
Untuk informasi selengkapnya, lihat [AppSpec Bagian 'kait'](reference-appspec-file-structure-hooks.md).

**Topics**
+ [AppSpec struktur file untuk penerapan Amazon ECS](#ecs-appspec-structure)
+ [AppSpec struktur file untuk penerapan AWS Lambda](#lambda-appspec-structure)
+ [AppSpec struktur file untuk EC2/penerapan di lokasi](#server-appspec-structure)
+ [AppSpec Bagian 'file' (EC2/hanya penerapan di lokasi)](reference-appspec-file-structure-files.md)
+ [AppSpec Bagian 'sumber daya' (hanya Amazon ECS dan AWS Lambda penerapan)](reference-appspec-file-structure-resources.md)
+ [AppSpec Bagian 'izin' (EC2/hanya penerapan di lokasi)](reference-appspec-file-structure-permissions.md)
+ [AppSpec Bagian 'kait'](reference-appspec-file-structure-hooks.md)

# AppSpec Bagian 'file' (EC2/hanya penerapan di lokasi)
<a name="reference-appspec-file-structure-files"></a>

Memberikan informasi CodeDeploy tentang file mana dari revisi aplikasi Anda yang harus diinstal pada instance selama peristiwa **Install** penerapan. Bagian ini diperlukan hanya jika Anda menyalin file dari revisi ke lokasi pada instance selama penerapan. 

Bagian ini memiliki struktur sebagai berikut:

```
files:
  - source: source-file-location-1
    destination: destination-file-location-1
file_exists_behavior: DISALLOW|OVERWRITE|RETAIN
```

Beberapa `source` dan `destination` pasangan dapat diatur.

`source`Instruksi mengidentifikasi file atau direktori dari revisi Anda untuk menyalin ke instance:
+ Jika `source` mengacu pada file, hanya file yang ditentukan yang disalin ke instance.
+ Jika `source` mengacu pada direktori, maka semua file dalam direktori disalin ke instance.
+ Jika `source` merupakan garis miring tunggal (“/” untuk instance Amazon Linux, RHEL, dan Ubuntu Server, atau “\$1” untuk instance Windows Server), maka semua file dari revisi Anda disalin ke instance.

Jalur yang `source` digunakan relatif terhadap `appspec.yml` file, yang seharusnya berada di akar revisi Anda. Untuk detail tentang struktur file revisi, lihat[Rencanakan revisi untuk CodeDeploy](application-revisions-plan.md).

`destination`Instruksi mengidentifikasi lokasi pada contoh di mana file harus disalin. Ini harus menjadi jalur yang sepenuhnya memenuhi syarat seperti `/root/destination/directory` (di Linux, RHEL, dan Ubuntu) atau `c:\destination\folder` (di Windows).

`source`dan `destination` masing-masing ditentukan dengan string.

`file_exists_behavior`Instruksi bersifat opsional, dan menentukan cara CodeDeploy menangani file yang sudah ada di lokasi target penerapan tetapi bukan bagian dari penerapan yang berhasil sebelumnya. Pengaturan ini dapat mengambil salah satu nilai berikut:
+ DILARANG: Penerapan gagal. Ini juga merupakan perilaku default jika tidak ada opsi yang ditentukan. 
+ OVERWRITE: Versi file dari revisi aplikasi yang saat ini sedang digunakan menggantikan versi yang sudah ada di instance. 
+ MEMPERTAHANKAN: Versi file yang sudah ada di instance disimpan dan digunakan sebagai bagian dari penerapan baru.

Saat menggunakan `file_exists_behavior` pengaturan, pahami bahwa pengaturan ini:
+ hanya dapat ditentukan sekali, dan berlaku untuk semua file dan direktori yang tercantum di bawah`files:`.
+ lebih diutamakan daripada `--file-exists-behavior` AWS CLI opsi dan opsi `fileExistsBehavior` API (keduanya juga opsional).

Berikut adalah `files` bagian contoh untuk Amazon Linux, Ubuntu Server, atau RHEL instance.

```
files:
  - source: Config/config.txt
    destination: /webapps/Config
  - source: source
    destination: /webapps/myApp
```

Dalam contoh ini, dua operasi berikut dilakukan selama acara **Install**:

1. Salin `Config/config.txt` file dalam revisi Anda ke `/webapps/Config/config.txt` jalur pada instance.

1. Salin secara rekursif semua file di direktori revisi Anda ke `source` `/webapps/myApp` direktori pada instance.

## Contoh bagian 'File'
<a name="reference-appspec-file-structure-files-examples"></a>

Contoh berikut menunjukkan cara menentukan `files` bagian. Meskipun contoh-contoh ini menggambarkan struktur file dan direktori (folder) Windows Server, mereka dapat dengan mudah diadaptasi untuk Amazon Linux, Ubuntu Server, dan instance RHEL.

**catatan**  
Hanya penerapan EC2/lokal yang menggunakan bagian ini. `files` Itu tidak berlaku untuk penyebaran AWS Lambda.

Untuk contoh berikut, kami berasumsi file-file ini muncul di bundel di root`source`:
+ `appspec.yml`
+ `my-file.txt`
+ `my-file-2.txt`
+ `my-file-3.txt`

```
# 1) Copy only my-file.txt to the destination folder c:\temp.
#
files:
  - source: .\my-file.txt
    destination: c:\temp
#
# Result:
#   c:\temp\my-file.txt
#
# ---------------------
#
# 2) Copy only my-file-2.txt and my-file-3.txt to the destination folder c:\temp.
#
files:
  - source: my-file-2.txt
    destination: c:\temp
  - source: my-file-3.txt
    destination: c:\temp
#
# Result:
#   c:\temp\my-file-2.txt
#   c:\temp\my-file-3.txt
#
# ---------------------
#
# 3) Copy my-file.txt, my-file-2.txt, and my-file-3.txt (along with the appspec.yml file) to the destination folder c:\temp.
#
files:
  - source: \
    destination: c:\temp
#
# Result:
#   c:\temp\appspec.yml
#   c:\temp\my-file.txt
#   c:\temp\my-file-2.txt
#   c:\temp\my-file-3.txt
```

Untuk contoh berikut, kita asumsikan `appspec.yml` muncul dalam bundel di root `source` bersama dengan folder bernama `my-folder` yang berisi tiga file:
+ `appspec.yml`
+ `my-folder\my-file.txt`
+ `my-folder\my-file-2.txt`
+ `my-folder\my-file-3.txt`

```
# 4) Copy the 3 files in my-folder (but do not copy my-folder itself) to the destination folder c:\temp. 
#
files:
  - source: .\my-folder
    destination: c:\temp
#
# Result:
#   c:\temp\my-file.txt
#   c:\temp\my-file-2.txt
#   c:\temp\my-file-3.txt
#
# ---------------------
#
# 5) Copy my-folder and its 3 files to my-folder within the destination folder c:\temp.
#
files:
  - source: .\my-folder
    destination: c:\temp\my-folder
#
# Result:
#   c:\temp\my-folder\my-file.txt
#   c:\temp\my-folder\my-file-2.txt
#   c:\temp\my-folder\my-file-3.txt
#
# ---------------------
#
# 6) Copy the 3 files in my-folder to other-folder within the destination folder c:\temp.
#
files:
  - source: .\my-folder
    destination: c:\temp\other-folder
#
# Result:
#   c:\temp\other-folder\my-file.txt
#   c:\temp\other-folder\my-file-2.txt
#   c:\temp\other-folder\my-file-3.txt	
#
# ---------------------
#
# 7) Copy only my-file-2.txt and my-file-3.txt to my-folder within the destination folder c:\temp.
#
files:
  - source: .\my-folder\my-file-2.txt
    destination: c:\temp\my-folder
  - source: .\my-folder\my-file-3.txt
    destination: c:\temp\my-folder
#
# Result:
#   c:\temp\my-folder\my-file-2.txt
#   c:\temp\my-folder\my-file-3.txt
#
# ---------------------
#
# 8) Copy only my-file-2.txt and my-file-3.txt to other-folder within the destination folder c:\temp.
#
files:
  - source: .\my-folder\my-file-2.txt
    destination: c:\temp\other-folder
  - source: .\my-folder\my-file-3.txt
    destination: c:\temp\other-folder
#
# Result:
#   c:\temp\other-folder\my-file-2.txt
#   c:\temp\other-folder\my-file-3.txt
#
# ---------------------
#
# 9) Copy my-folder and its 3 files (along with the appspec.yml file) to the destination folder c:\temp. If any of the files already exist on the instance, overwrite them.
#
files:
  - source: \
    destination: c:\temp
file_exists_behavior: OVERWRITE
#
# Result:
#   c:\temp\appspec.yml
#   c:\temp\my-folder\my-file.txt
#   c:\temp\my-folder\my-file-2.txt
#   c:\temp\my-folder\my-file-3.txt
```

# AppSpec Bagian 'sumber daya' (hanya Amazon ECS dan AWS Lambda penerapan)
<a name="reference-appspec-file-structure-resources"></a>

 Konten di `'resources'` bagian AppSpec file bervariasi, tergantung pada platform komputasi penerapan Anda. `'resources'`Bagian untuk penyebaran Amazon ECS berisi definisi tugas Amazon ECS, wadah, dan port untuk merutekan lalu lintas ke set tugas Amazon ECS yang diperbarui, dan informasi opsional lainnya. `'resources'`Bagian untuk AWS Lambda penerapan berisi nama, alias, versi saat ini, dan versi target dari fungsi Lambda. 

**Topics**
+ [AppSpec Bagian 'sumber daya' untuk penerapan AWS Lambda](#reference-appspec-file-structure-resources-lambda)
+ [AppSpec Bagian 'sumber daya' untuk penerapan Amazon ECS](#reference-appspec-file-structure-resources-ecs)

## AppSpec Bagian 'sumber daya' untuk penerapan AWS Lambda
<a name="reference-appspec-file-structure-resources-lambda"></a>

`'resources'`Bagian ini menentukan fungsi Lambda untuk menyebarkan dan memiliki struktur berikut:

YAML:

```
resources:
  - name-of-function-to-deploy:
      type: "AWS::Lambda::Function"
      properties:
        name: name-of-lambda-function-to-deploy
        alias: alias-of-lambda-function-to-deploy
        currentversion: version-of-the-lambda-function-traffic-currently-points-to
        targetversion: version-of-the-lambda-function-to-shift-traffic-to
```

JSON:

```
"resources": [
    {
        "name-of-function-to-deploy" {
            "type": "AWS::Lambda::Function",
            "properties": {
                "name": "name-of-lambda-function-to-deploy",
                "alias": "alias-of-lambda-function-to-deploy",
                "currentversion": "version-of-the-lambda-function-traffic-currently-points-to",
                "targetversion": "version-of-the-lambda-function-to-shift-traffic-to"
            }
        }
    }
]
```

Setiap properti ditentukan dengan string. 
+ `name` – Wajib. Ini adalah nama fungsi Lambda yang akan digunakan.
+ `alias` – Wajib. Ini adalah nama alias untuk fungsi Lambda.
+ `currentversion` – Wajib. Ini adalah versi lalu lintas fungsi Lambda yang saat ini menunjuk ke. Nilai ini harus berupa bilangan bulat positif yang valid.
+ `targetversion` – Wajib. Ini adalah versi lalu lintas fungsi Lambda yang digeser ke. Nilai ini harus berupa bilangan bulat positif yang valid.

## AppSpec Bagian 'sumber daya' untuk penerapan Amazon ECS
<a name="reference-appspec-file-structure-resources-ecs"></a>

 `'resources'`Bagian ini menentukan layanan Amazon ECS untuk diterapkan dan memiliki struktur berikut: 

YAML:

```
Resources:
  - TargetService:
      Type: AWS::ECS::Service
      Properties:
        TaskDefinition: "task-definition-arn"
        LoadBalancerInfo: 
          ContainerName: "ecs-container-name" 
          ContainerPort: "ecs-application-port"
# Optional properties
        PlatformVersion: "ecs-service-platform-version"
        NetworkConfiguration:
          AwsvpcConfiguration:
            Subnets: ["ecs-subnet-1","ecs-subnet-n"] 
            SecurityGroups: ["ecs-security-group-1","ecs-security-group-n"] 
            AssignPublicIp: "ENABLED | DISABLED"
        CapacityProviderStrategy:
          - Base: integer
            CapacityProvider: "capacityProviderA"
            Weight: integer
          - Base: integer
            CapacityProvider: "capacityProviderB"
            Weight: integer
```

JSON:

```
"Resources": [
    {
        "TargetService": {
            "Type": "AWS::ECS::Service",
            "Properties": {
                "TaskDefinition": "task-definition-arn",
                "LoadBalancerInfo": {
                    "ContainerName": "ecs-container-name",
                    "ContainerPort": "ecs-application-port"
                },
                "PlatformVersion": "ecs-service-platform-version",
                "NetworkConfiguration": {
                    "AwsvpcConfiguration": {
                        "Subnets": [
                            "ecs-subnet-1",
                            "ecs-subnet-n"
                        ],
                        "SecurityGroups": [
                            "ecs-security-group-1",
                            "ecs-security-group-n"
                        ],
                        "AssignPublicIp": "ENABLED | DISABLED"
                    }
                },
                "CapacityProviderStrategy": [
                    {
                        "Base": integer,
                        "CapacityProvider": "capacityProviderA",
                        "Weight": integer
                    },
                    {
                        "Base": integer,
                        "CapacityProvider": "capacityProviderB",
                        "Weight": integer
                    }
                ]
            }
        }
    }
]
```

Setiap properti ditentukan dengan string kecuali untuk`ContainerPort`, yang merupakan angka. 
+ `TaskDefinition` – Wajib. Ini adalah definisi tugas untuk layanan Amazon ECS untuk diterapkan. Ini ditentukan dengan ARN dari definisi tugas. Format ARN adalah. `arn:aws:ecs:aws-region:account-id:task-definition/task-definition-family:task-definition-revision` Untuk informasi selengkapnya, lihat [Amazon Resource Names (ARNs) dan ruang nama AWS layanan](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html).
**catatan**  
`:task-definition-revision`Bagian dari ARN adalah opsional. Jika dihilangkan, Amazon ECS menggunakan revisi ACTIVE terbaru dari definisi tugas.
+ `ContainerName` – Wajib. Ini adalah nama wadah Amazon ECS yang berisi aplikasi Amazon ECS Anda. Itu harus berupa wadah yang ditentukan dalam definisi tugas Amazon ECS Anda.
+ `ContainerPort` – Wajib. Ini adalah port pada kontainer tempat lalu lintas akan diarahkan.
+ `PlatformVersion`: Opsional. Versi platform tugas Fargate dalam layanan Amazon ECS yang digunakan. Untuk informasi selengkapnya, lihat [Versi platform AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/platform_versions.html). Jika tidak ditentukan, `LATEST` digunakan secara default.
+  `NetworkConfiguration`: Opsional. Di bawah`AwsvpcConfiguration`, Anda dapat menentukan yang berikut ini. Untuk informasi selengkapnya, lihat [AwsVpcConfiguration](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_AwsVpcConfiguration.html)di *Referensi API Amazon ECS Container Service*. 
  + `Subnets`: Opsional. Daftar terpisah koma dari satu atau beberapa subnet di layanan Amazon ECS Anda.
  + `SecurityGroups`: Opsional. Daftar terpisah koma dari satu atau beberapa grup keamanan di Amazon Elastic Container Service Anda.
  + `AssignPublicIp`: Opsional. String yang menentukan apakah elastic network interface layanan Amazon ECS Anda menerima alamat IP publik. Nilai yang valid adalah `ENABLED` dan `DISABLED`.
**catatan**  
 Semua atau tidak ada pengaturan di bawah `NetworkConfiguration` harus ditentukan. Misalnya, jika Anda ingin menentukan`Subnets`, Anda juga harus menentukan `SecurityGroups` dan`AssignPublicIp`. Jika tidak ada yang ditentukan, CodeDeploy gunakan pengaturan Amazon ECS jaringan saat ini. 
+ `CapacityProviderStrategy`: Opsional. Daftar penyedia kapasitas Amazon ECS yang ingin Anda gunakan untuk penyebaran Anda. Untuk informasi selengkapnya, lihat [Penyedia kapasitas Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/cluster-capacity-providers.html) di *Panduan Pengembang Layanan Kontainer Elastis Amazon*. Untuk setiap penyedia kapasitas, Anda dapat menentukan pengaturan berikut. Untuk detail tentang pengaturan ini, lihat [AWS::ECS::ServiceCapacityProviderStrategyItem](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-capacityproviderstrategyitem.html)di *Panduan AWS CloudFormation Pengguna*
  + `Base`: Opsional. Nilai dasar menandakan berapa banyak tugas, dengan angka minimum, yang berjalan pada penyedia kapasitas tertentu. Hanya satu penyedia kapasitas di strategi penyedia kapasitas yang dapat menentukan nilai dasar. Jika tidak ada nilai yang ditentukan, nilai default 0 digunakan.
  + `CapacityProvider`: Opsional. Nama singkat dari penyedia kapasitas. Contoh: *CapacityProvidera*
  + `Weight`: Opsional.

    Nilai *bobot* menandakan persentase relatif dari jumlah total tugas yang diluncurkan yang harus menggunakan penyedia kapasitas tertentu. Nilai `weight` dipertimbangkan setelah nilai `base`, jika ditentukan, dianggap memuaskan.

    Jika tidak ada nilai `weight` yang ditentukan, nilai default `0` digunakan. Ketika beberapa penyedia kapasitas ditentukan dalam strategi penyedia kapasitas, setidaknya satu dari penyedia kapasitas harus memiliki nilai bobot lebih besar dari nol dan penyedia kapasitas apa pun dengan bobot `0` tidak akan digunakan untuk menempatkan tugas. Jika Anda menentukan beberapa penyedia kapasitas dalam strategi di mana semua memiliki bobot `0`, tindakan `RunTask` atau `CreateService` apa pun yang menggunakan strategi penyedia kapasitas akan gagal.

     Contoh skenario untuk penggunaan bobot yang menentukan strategi yang berisi dua penyedia kapasitas dan keduanya memiliki bobot `1`, jadi ketika `base` dianggap memuaskan, tugas akan dibagi secara merata ke dua penyedia kapasitas. Dengan menggunakan logika yang sama, jika Anda menentukan bobot `1` untuk *capacityProviderA* dan bobot `4` untuk *capacityProviderB*, maka untuk setiap satu tugas yang berjalan menggunakan *capacityProviderA*, empat tugas akan menggunakan *capacityProviderB*.

# AppSpec Bagian 'izin' (EC2/hanya penerapan di lokasi)
<a name="reference-appspec-file-structure-permissions"></a>

`'permissions'`Bagian ini menentukan bagaimana izin khusus, jika ada, harus diterapkan ke file dan directories/folders di `'files'` bagian setelah mereka disalin ke instance. Anda dapat menentukan beberapa `object` instruksi. Bagian ini opsional. Ini berlaku untuk Amazon Linux, Ubuntu Server, dan instans RHEL saja.

**catatan**  
`'permissions'`Bagian ini digunakan hanya untuk penerapan EC2/On-premise. Ini tidak digunakan untuk penyebaran AWS Lambda atau Amazon ECS.

Bagian ini memiliki struktur sebagai berikut:

```
permissions:
  - object: object-specification
    pattern: pattern-specification
    except: exception-specification
    owner: owner-account-name
    group: group-name
    mode: mode-specification
    acls: 
      - acls-specification 
    context:
      user: user-specification
      type: type-specification
      range: range-specification
    type:
      - object-type
```

Instruksi adalah sebagai berikut:
+ `object` – Wajib. Ini adalah satu set objek sistem file (file atau direktori/folder) yang izin yang ditentukan diterapkan setelah objek sistem file disalin ke instance.

  Tentukan `object` dengan string.
+ `pattern` – Opsional. Menentukan pola untuk menerapkan izin. Jika tidak ditentukan atau ditentukan dengan karakter khusus**"\$1\$1"**, izin diterapkan ke semua file atau direktori yang cocok, tergantung pada file. `type` 

  Tentukan `pattern` dengan string dengan tanda kutip (“”).
+ `except` – Opsional. Menentukan file atau direktori yang pengecualian untuk. `pattern` 

  Tentukan `except` dengan daftar string yang dipisahkan koma di dalam tanda kurung siku.
+ `owner` – Opsional. Nama pemilik`object`. Jika tidak ditentukan, semua pemilik yang ada diterapkan ke struktur file atau direktori/folder asli tetap tidak berubah setelah operasi penyalinan.

  Tentukan `owner` dengan string.
+ `group` – Opsional. Nama grup untuk`object`. Jika tidak ditentukan, semua grup yang ada diterapkan ke struktur file atau direktori/folder asli tetap tidak berubah setelah operasi penyalinan.

  Tentukan `group` dengan string.
+ `mode` – Opsional. Nilai numerik yang menentukan izin yang akan diterapkan. `object` Pengaturan mode mengikuti sintaks perintah chmod Linux.
**penting**  
Jika nilainya termasuk nol di depan, Anda harus mengelilinginya dengan tanda kutip ganda, atau menghapus nol di depan sehingga hanya tersisa tiga digit.
**catatan**  
Notasi simbolik seperti tidak **u\$1x** didukung untuk pengaturan. `mode`

  Contoh:
  + `mode: "0644"`memberikan izin baca dan tulis kepada pemilik objek (6), izin hanya-baca ke grup (4), dan izin hanya-baca untuk semua pengguna lain (4).
  + `mode: 644`memberikan izin yang sama seperti. `mode: "0644"`
  + `mode: 4755`menetapkan atribut setuid (4), memberikan izin kontrol penuh kepada pemilik (7), memberikan izin baca dan eksekusi ke grup (5), dan memberikan izin baca dan eksekusi ke semua pengguna lain (5).

    Untuk contoh lainnya, lihat dokumentasi perintah Linux chmod.

    Jika mode tidak ditentukan, semua mode yang ada diterapkan ke file asli atau struktur folder tetap tidak berubah setelah operasi penyalinan.
+ `acls` – Opsional. Daftar string karakter yang mewakili satu atau lebih entri daftar kontrol akses (ACL) yang diterapkan. `object` Misalnya, **u:bob:rw** mewakili izin baca dan tulis untuk pengguna**bob**. (Untuk contoh lainnya, lihat contoh format entri ACL dalam dokumentasi `setfacl` perintah Linux.) Anda dapat menentukan beberapa entri ACL. Jika tidak `acls` ditentukan, apa pun yang ada ACLs diterapkan ke file atau directory/folder struktur asli tetap tidak berubah setelah operasi penyalinan. Ini menggantikan yang ada ACLs.

  Tentukan `acls` dengan tanda hubung (-), diikuti oleh spasi, dan kemudian string (misalnya,`- u:jane:rw`). Jika Anda memiliki lebih dari satu ACL, masing-masing ditentukan pada baris terpisah.
**catatan**  
Menyetel pengguna yang tidak disebutkan namanya, grup yang tidak disebutkan namanya, atau entri ACL serupa lainnya menyebabkan file gagal. AppSpec Gunakan `mode` untuk menentukan jenis izin ini sebagai gantinya.
+ `context` – Opsional. Untuk instance yang diaktifkan Security-Enhanced Linux (SELinux), daftar label konteks yang relevan dengan keamanan untuk diterapkan ke objek yang disalin. Label ditentukan sebagai kunci yang berisi`user`,`type`, dan`range`. (Untuk informasi lebih lanjut, lihat SELinux dokumentasi.) Setiap kunci dimasukkan dengan string. Jika tidak ditentukan, label apa pun yang ada yang diterapkan pada file atau directory/folder struktur asli tetap tidak berubah setelah operasi penyalinan.
  + `user` – Opsional. SELinux Pengguna.
  + `type` – Opsional. Nama SELinux tipe.
  + `range` – Opsional. Penentu SELinux rentang. Ini tidak berpengaruh kecuali Multi-Level Security (MLS) dan Multi-Category Security (MCS) diaktifkan pada mesin. Jika tidak diaktifkan, `range` default ke. **s0**

  Tentukan `context` dengan string (misalnya,`user: unconfined_u`). Masing-masing `context` ditentukan pada garis terpisah.
+ `type` – Opsional. Jenis objek yang menerapkan izin yang ditentukan. `type`adalah string yang dapat diatur ke **file** atau**directory**. Jika **file** ditentukan, izin diterapkan hanya untuk file yang segera terkandung dalam `object` setelah operasi salinan (dan bukan untuk `object` dirinya sendiri). Jika **directory** ditentukan, izin diterapkan secara rekursif ke semua directories/folders yang ada di mana saja `object` setelah operasi penyalinan (tetapi tidak untuk `object` dirinya sendiri).

  Tentukan `type` dengan tanda hubung (-), diikuti oleh spasi, dan kemudian string (misalnya,`- file`).

## Contoh bagian 'Izin'
<a name="reference-appspec-file-structure-permissions-example"></a>

Contoh berikut menunjukkan cara menentukan `'permissions'` bagian dengan`object`,,`pattern`,`except`, `owner``mode`, dan `type` instruksi. Contoh ini hanya berlaku untuk Amazon Linux, Ubuntu Server, dan instans RHEL. Dalam contoh ini, asumsikan file dan folder berikut disalin ke instance dalam hierarki ini:

```
/tmp
  `-- my-app
       |-- my-file-1.txt
       |-- my-file-2.txt
       |-- my-file-3.txt
       |-- my-folder-1
       |     |-- my-file-4.txt
       |     |-- my-file-5.txt
       |     `-- my-file-6.txt
       `-- my-folder-2
             |-- my-file-7.txt
             |-- my-file-8.txt
             |-- my-file-9.txt
	           `-- my-folder-3
```

 AppSpec File berikut menunjukkan cara mengatur izin pada file dan folder ini setelah disalin:

```
version: 0.0
os: linux
# Copy over all of the folders and files with the permissions they
#  were originally assigned.
files:
  - source: ./my-file-1.txt
    destination: /tmp/my-app
  - source: ./my-file-2.txt
    destination: /tmp/my-app
  - source: ./my-file-3.txt
    destination: /tmp/my-app
  - source: ./my-folder-1
    destination: /tmp/my-app/my-folder-1
  - source: ./my-folder-2
    destination: /tmp/my-app/my-folder-2
# 1) For all of the files in the /tmp/my-app folder ending in -3.txt
#  (for example, just my-file-3.txt), owner = adm, group = wheel, and
#  mode = 464 (-r--rw-r--).
permissions:
  - object: /tmp/my-app
    pattern: "*-3.txt"
    owner: adm
    group: wheel
    mode: 464
    type:
      - file
# 2) For all of the files ending in .txt in the /tmp/my-app
#  folder, but not for the file my-file-3.txt (for example,
#  just my-file-1.txt and my-file-2.txt),
#  owner = ec2-user and mode = 444 (-r--r--r--).
  - object: /tmp/my-app
    pattern: "*.txt"
    except: [my-file-3.txt]
    owner: ec2-user
    mode: 444
    type:
      - file
# 3) For all the files in the /tmp/my-app/my-folder-1 folder except
#  for my-file-4.txt and my-file-5.txt, (for example,
#  just my-file-6.txt), owner = operator and mode = 646 (-rw-r--rw-).
  - object: /tmp/my-app/my-folder-1
    pattern: "**"
    except: [my-file-4.txt, my-file-5.txt]
    owner: operator
    mode: 646
    type:
      - file
# 4) For all of the files that are immediately under
#  the /tmp/my-app/my-folder-2 folder except for my-file-8.txt,
#  (for example, just my-file-7.txt and
#  my-file-9.txt), owner = ec2-user and mode = 777 (-rwxrwxrwx).
  - object: /tmp/my-app/my-folder-2
    pattern: "**"
    except: [my-file-8.txt]
    owner: ec2-user
    mode: 777
    type:
      - file
# 5) For all folders at any level under /tmp/my-app that contain
#  the name my-folder but not
#  /tmp/my-app/my-folder-2/my-folder-3 (for example, just
#  /tmp/my-app/my-folder-1 and /tmp/my-app/my-folder-2),
#  owner = ec2-user and mode = 555 (dr-xr-xr-x).
  - object: /tmp/my-app
    pattern: "*my-folder*"
    except: [tmp/my-app/my-folder-2/my-folder-3]
    owner: ec2-user
    mode: 555
    type:
      - directory
# 6) For the folder /tmp/my-app/my-folder-2/my-folder-3,
#  group = wheel and mode = 564 (dr-xrw-r--).
  - object: /tmp/my-app/my-folder-2/my-folder-3
    group: wheel
    mode: 564
    type:
      - directory
```

Izin yang dihasilkan adalah sebagai berikut:

```
-r--r--r-- ec2-user root  my-file-1.txt
-r--r--r-- ec2-user root  my-file-2.txt
-r--rw-r-- adm      wheel my-file-3.txt

dr-xr-xr-x ec2-user root  my-folder-1
-rw-r--r-- root     root  my-file-4.txt
-rw-r--r-- root     root  my-file-5.txt
-rw-r--rw- operator root  my-file-6.txt

dr-xr-xr-x ec2-user root  my-folder-2
-rwxrwxrwx ec2-user root  my-file-7.txt
-rw-r--r-- root     root  my-file-8.txt
-rwxrwxrwx ec2-user root  my-file-9.txt

dr-xrw-r-- root     wheel my-folder-3
```

Contoh berikut menunjukkan cara menentukan `'permissions'` bagian dengan penambahan `acls` dan `context` instruksi. Contoh ini hanya berlaku untuk Amazon Linux, Ubuntu Server, dan instans RHEL.

```
permissions:
  - object: /var/www/html/WordPress
    pattern: "**"
    except: [/var/www/html/WordPress/ReadMe.txt]
    owner: bob
    group: writers
    mode: 644
    acls: 
      - u:mary:rw
      - u:sam:rw
      - m::rw
    context:
      user: unconfined_u
      type: httpd_sys_content_t
      range: s0
    type:
      - file
```

# 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).