

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

# AppSpec Contoh berkas
<a name="reference-appspec-file-example"></a>

Topik ini menyediakan contoh AppSpec file untuk AWS Lambda dan penerapan EC2/On-premise.

**Topics**
+ [AppSpec Contoh file untuk penyebaran Amazon ECS](#appspec-file-example-ecs)
+ [AppSpec Contoh file untuk penerapan AWS Lambda](#appspec-file-example-lambda)
+ [AppSpec Contoh berkas untuk penerapan EC2/On-premise](#appspec-file-example-server)

## AppSpec Contoh file untuk penyebaran Amazon ECS
<a name="appspec-file-example-ecs"></a>

 Berikut adalah contoh AppSpec file yang ditulis dalam YAMAL untuk menerapkan layanan Amazon ECS. 

```
version: 0.0
Resources:
  - TargetService:
      Type: AWS::ECS::Service
      Properties:
        TaskDefinition: "arn:aws:ecs:us-east-1:111222333444:task-definition/my-task-definition-family-name:1"
        LoadBalancerInfo:
          ContainerName: "SampleApplicationName"
          ContainerPort: 80
# Optional properties
        PlatformVersion: "LATEST"
        NetworkConfiguration:
          AwsvpcConfiguration:
            Subnets: ["subnet-1234abcd","subnet-5678abcd"]
            SecurityGroups: ["sg-12345678"]
            AssignPublicIp: "ENABLED"
        CapacityProviderStrategy:
          - Base: 1
            CapacityProvider: "FARGATE_SPOT"
            Weight: 2
          - Base: 0
            CapacityProvider: "FARGATE"
            Weight: 1
Hooks:
  - BeforeInstall: "LambdaFunctionToValidateBeforeInstall"
  - AfterInstall: "LambdaFunctionToValidateAfterInstall"
  - AfterAllowTestTraffic: "LambdaFunctionToValidateAfterTestTrafficStarts"
  - BeforeAllowTraffic: "LambdaFunctionToValidateBeforeAllowingProductionTraffic"
  - AfterAllowTraffic: "LambdaFunctionToValidateAfterAllowingProductionTraffic"
```

 Berikut adalah versi dari contoh sebelumnya yang ditulis dalam JSON. 

```
{
    "version": 0.0,
    "Resources": [
        {
            "TargetService": {
                "Type": "AWS::ECS::Service",
                "Properties": {
                    "TaskDefinition": "arn:aws:ecs:us-east-1:111222333444:task-definition/my-task-definition-family-name:1",
                    "LoadBalancerInfo": {
                        "ContainerName": "SampleApplicationName",
                        "ContainerPort": 80
                    },
                    "PlatformVersion": "LATEST",
                    "NetworkConfiguration": {
                        "AwsvpcConfiguration": {
                            "Subnets": [
                                "subnet-1234abcd",
                                "subnet-5678abcd"
                            ],
                            "SecurityGroups": [
                                "sg-12345678"
                            ],
                            "AssignPublicIp": "ENABLED"
                        }
                    },
                    "CapacityProviderStrategy": [
                        {
                            "Base" : 1,
                            "CapacityProvider" : "FARGATE_SPOT",
                            "Weight" : 2
                        },
                        {
                            "Base" : 0,
                            "CapacityProvider" : "FARGATE",
                            "Weight" : 1
                        }
                    ]
                }               
            }
        }
    ],
    "Hooks": [
        {
            "BeforeInstall": "LambdaFunctionToValidateBeforeInstall"
        },
        {
            "AfterInstall": "LambdaFunctionToValidateAfterInstall"
        },
        {
            "AfterAllowTestTraffic": "LambdaFunctionToValidateAfterTestTrafficStarts"
        },
        {
            "BeforeAllowTraffic": "LambdaFunctionToValidateBeforeAllowingProductionTraffic"
        },
        {
            "AfterAllowTraffic": "LambdaFunctionToValidateAfterAllowingProductionTraffic"
        }
    ]
}
```

Berikut adalah urutan peristiwa selama penerapan:

1.  Sebelum aplikasi Amazon ECS yang diperbarui diinstal pada set tugas pengganti, fungsi `LambdaFunctionToValidateBeforeInstall` Lambda disebut berjalan. 

1.  Setelah aplikasi Amazon ECS yang diperbarui diinstal pada set tugas pengganti, tetapi sebelum menerima lalu lintas apa pun, fungsi `LambdaFunctionToValidateAfterInstall` Lambda disebut berjalan. 

1.  Setelah aplikasi Amazon ECS pada set tugas pengganti mulai menerima lalu lintas dari pendengar pengujian, fungsi Lambda yang disebut berjalan. `LambdaFunctionToValidateAfterTestTrafficStarts` Fungsi ini kemungkinan menjalankan tes validasi untuk menentukan apakah penerapan berlanjut. Jika Anda tidak menentukan listener pengujian dalam grup penerapan Anda, hook ini akan diabaikan. 

1.  Setelah tes validasi apa pun di `AfterAllowTestTraffic` hook selesai, dan sebelum lalu lintas produksi disajikan ke aplikasi Amazon ECS yang diperbarui, fungsi Lambda disebut berjalan. `LambdaFunctionToValidateBeforeAllowingProductionTraffic` 

1.  Setelah lalu lintas produksi disajikan ke aplikasi Amazon ECS yang diperbarui pada set tugas pengganti, fungsi `LambdaFunctionToValidateAfterAllowingProductionTraffic` Lambda disebut berjalan. 

 Fungsi Lambda yang berjalan selama hook apa pun dapat melakukan tes validasi atau mengumpulkan metrik lalu lintas. 

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

 Berikut adalah contoh AppSpec file yang ditulis dalam YAMAL untuk menerapkan versi fungsi Lambda. 

```
version: 0.0
Resources:
  - myLambdaFunction:
      Type: AWS::Lambda::Function
      Properties:
        Name: "myLambdaFunction"
        Alias: "myLambdaFunctionAlias"
        CurrentVersion: "1"
        TargetVersion: "2"
Hooks:
  - BeforeAllowTraffic: "LambdaFunctionToValidateBeforeTrafficShift"
  - AfterAllowTraffic: "LambdaFunctionToValidateAfterTrafficShift"
```

 Berikut adalah versi dari contoh sebelumnya yang ditulis dalam JSON. 

```
{
 	"version": 0.0,
 	"Resources": [{
 		"myLambdaFunction": {
 			"Type": "AWS::Lambda::Function",
 			"Properties": {
 				"Name": "myLambdaFunction",
 				"Alias": "myLambdaFunctionAlias",
 				"CurrentVersion": "1",
 				"TargetVersion": "2"
 			}
 		}
 	}],
 	"Hooks": [{
 			"BeforeAllowTraffic": "LambdaFunctionToValidateBeforeTrafficShift"
      },
      {
 			"AfterAllowTraffic": "LambdaFunctionToValidateAfterTrafficShift"
 		}
 	]
 }
```

Berikut adalah urutan peristiwa selama penerapan:

1. Sebelum mengalihkan lalu lintas dari versi 1 dari fungsi Lambda yang `myLambdaFunction` dipanggil ke versi 2, jalankan fungsi Lambda yang `LambdaFunctionToValidateBeforeTrafficShift` disebut yang memvalidasi penerapan siap untuk memulai pergeseran lalu lintas.

1. Jika `LambdaFunctionToValidateBeforeTrafficShift` mengembalikan kode keluar 0 (sukses), mulailah mengalihkan lalu lintas ke versi 2. `myLambdaFunction` Konfigurasi penyebaran untuk penyebaran ini menentukan tingkat di mana lalu lintas digeser.

1. Setelah pergeseran lalu lintas dari versi 1 dari fungsi Lambda yang `myLambdaFunction` dipanggil ke versi 2 selesai, jalankan fungsi Lambda yang `LambdaFunctionToValidateAfterTrafficShift` disebut yang memvalidasi penerapan berhasil diselesaikan.

## AppSpec Contoh berkas untuk penerapan EC2/On-premise
<a name="appspec-file-example-server"></a>

Berikut adalah contoh AppSpec file untuk penyebaran di tempat ke Amazon Linux, Ubuntu Server, atau instance RHEL. 

**catatan**  
 Penerapan ke instance Windows Server tidak mendukung elemen. `runas` Jika Anda menyebarkan ke instance Windows Server, jangan sertakan dalam file Anda AppSpec . 

```
version: 0.0
os: linux
files:
  - source: Config/config.txt
    destination: /webapps/Config
  - source: source
    destination: /webapps/myApp
hooks:
  BeforeInstall:
    - location: Scripts/UnzipResourceBundle.sh
    - location: Scripts/UnzipDataBundle.sh
  AfterInstall:
    - location: Scripts/RunResourceTests.sh
      timeout: 180
  ApplicationStart:
    - location: Scripts/RunFunctionalTests.sh
      timeout: 3600
  ValidateService:
    - location: Scripts/MonitorService.sh
      timeout: 3600
      runas: codedeployuser
```

Untuk instance Windows Server, ubah `os: linux` ke`os: windows`. Juga, Anda harus sepenuhnya memenuhi syarat `destination` jalur (misalnya, `c:\temp\webapps\Config` dan`c:\temp\webapps\myApp`). Jangan sertakan `runas` elemen. 

Berikut adalah urutan peristiwa selama penerapan:

1. Jalankan skrip yang terletak di`Scripts/UnzipResourceBundle.sh`.

1. Jika skrip sebelumnya mengembalikan kode keluar 0 (sukses), jalankan skrip yang terletak di`Scripts/UnzipDataBundle.sh`.

1. Salin file dari jalur `Config/config.txt` ke jalur`/webapps/Config/config.txt`.

1. Salin semua file dalam direktori secara rekursif ke `source` `/webapps/myApp` direktori.

1. Jalankan skrip yang terletak di `Scripts/RunResourceTests.sh` dengan batas waktu 180 detik (3 menit).

1. Jalankan skrip yang terletak di `Scripts/RunFunctionalTests.sh` dengan batas waktu 3600 detik (1 jam).

1. Jalankan skrip yang terletak di `Scripts/MonitorService.sh` sebagai pengguna `codedeploy` dengan batas waktu 3600 detik (1 jam).