

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

# Tutorial: Menyebarkan layanan Amazon ECS dengan uji validasi
<a name="tutorial-ecs-deployment-with-hooks"></a>

 Dalam tutorial ini, Anda mempelajari cara menggunakan fungsi Lambda untuk memvalidasi bagian dari penerapan aplikasi Amazon ECS yang diperbarui. Tutorial ini menggunakan CodeDeploy aplikasi, grup CodeDeploy penyebaran, dan aplikasi Amazon ECS yang Anda gunakan. [Tutorial: Menyebarkan aplikasi ke Amazon ECS](tutorial-ecs-deployment.md) Selesaikan tutorial itu sebelum memulai yang satu ini.

 Untuk menambahkan uji validasi, pertama-tama Anda menerapkan pengujian dalam fungsi Lambda. Selanjutnya, dalam AppSpec file deployment Anda, Anda menentukan fungsi Lambda untuk hook siklus hidup yang ingin Anda uji. Jika tes validasi gagal, penerapan berhenti, dibatalkan, dan ditandai gagal. Jika pengujian berhasil, penerapan akan berlanjut ke event atau hook siklus hidup penerapan berikutnya. 

 Selama penerapan Amazon ECS dengan pengujian validasi, CodeDeploy gunakan penyeimbang beban yang dikonfigurasi dengan dua grup target: satu pendengar lalu lintas produksi dan satu pendengar lalu lintas pengujian. Diagram berikut menunjukkan bagaimana penyeimbang beban, pendengar produksi dan pengujian, grup target, dan aplikasi Amazon ECS Anda terkait sebelum penerapan dimulai. Tutorial ini menggunakan Application Load Balancer. Anda juga dapat menggunakan Network Load Balancer. 

![\[Koneksi antara Application Load Balancer atau Network Load Balancer, pendengar, grup target, kumpulan tugas, dan layanan Amazon ECS.\]](http://docs.aws.amazon.com/id_id/codedeploy/latest/userguide/images/codedeploy-ecs-deployment-step-1.png)


 Selama penerapan Amazon ECS, ada lima kait siklus hidup untuk pengujian. Tutorial ini mengimplementasikan satu pengujian selama hook penerapan siklus hidup ketiga,. `AfterAllowTestTraffic` 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). Setelah penerapan berhasil, pendengar lalu lintas produksi menyajikan lalu lintas ke set tugas penggantian baru Anda dan set tugas asli dihentikan. Diagram berikut menunjukkan bagaimana sumber daya Anda terkait setelah penerapan berhasil. Untuk informasi selengkapnya, lihat [Apa yang terjadi selama penyebaran Amazon ECS](deployment-steps-ecs.md#deployment-steps-what-happens). 

![\[Koneksi antara Application Load Balancer atau Network Load Balancer, pendengar, grup target, dan tugas pengganti yang ditetapkan setelah penerapan.\]](http://docs.aws.amazon.com/id_id/codedeploy/latest/userguide/images/codedeploy-ecs-deployment-step-6.png)


**catatan**  
Menyelesaikan tutorial ini dapat mengakibatkan biaya ke AWS akun Anda. Ini termasuk kemungkinan biaya untuk CodeDeploy, AWS Lambda, dan CloudWatch. Untuk informasi selengkapnya, lihat [AWS CodeDeploy harga](https://aws.amazon.com/codedeploy/pricing/), [AWS Lambda harga](https://aws.amazon.com/lambda/pricing/), dan [ CloudWatch harga Amazon](https://aws.amazon.com/cloudwatch/pricing/).

**Topics**
+ [Prasyarat](tutorial-ecs-with-hooks-prereqs.md)
+ [Langkah 1: Buat pendengar tes](tutorial-ecs-with-hooks-create-second-listener.md)
+ [Langkah 2: Perbarui aplikasi Amazon ECS Anda](tutorial-ecs-with-hooks-update-the-ecs-application.md)
+ [Langkah 3: Buat fungsi Lambda kait siklus hidup](tutorial-ecs-with-hooks-create-hooks.md)
+ [Langkah 4: Perbarui AppSpec file Anda](tutorial-ecs-with-hooks-create-appspec-file.md)
+ [Langkah 5: Gunakan CodeDeploy konsol untuk menyebarkan layanan Amazon ECS Anda](tutorial-ecs-with-hooks-deployment.md)
+ [Langkah 6: Lihat output fungsi kait Lambda Anda di Log CloudWatch](tutorial-ecs-with-hooks-view-cw-logs.md)
+ [Langkah 7: Bersihkan](tutoria-ecs-with-hooks-clean-up.md)

# Prasyarat
<a name="tutorial-ecs-with-hooks-prereqs"></a>

Untuk berhasil menyelesaikan tutorial ini, Anda harus terlebih dahulu:
+  Lengkapi prasyarat untuk. [Prasyarat](tutorial-ecs-prereqs.md) [Tutorial: Menyebarkan aplikasi ke Amazon ECS](tutorial-ecs-deployment.md) 
+  Selesaikan langkah-langkah dalam [Tutorial: Menyebarkan aplikasi ke Amazon ECS](tutorial-ecs-deployment.md). Catat hal-hal berikut: 
  +  Nama penyeimbang beban Anda. 
  +  Nama-nama kelompok sasaran Anda. 
  +  Port yang digunakan oleh pendengar penyeimbang beban Anda. 
  +  ARN penyeimbang beban Anda. Anda menggunakan ini untuk membuat pendengar baru. 
  +  ARN dari salah satu kelompok sasaran Anda. Anda menggunakan ini untuk membuat pendengar baru. 
  +  Grup CodeDeploy aplikasi dan penyebaran yang Anda buat. 
  +  AppSpec File yang Anda buat yang digunakan oleh CodeDeploy penyebaran Anda. Anda mengedit file ini dalam tutorial ini. 

# Langkah 1: Buat pendengar tes
<a name="tutorial-ecs-with-hooks-create-second-listener"></a>

 Penerapan Amazon ECS dengan pengujian validasi memerlukan pendengar kedua. Listener ini digunakan untuk menyajikan lalu lintas pengujian ke aplikasi Amazon ECS Anda yang diperbarui dalam set tugas pengganti. Tes validasi Anda dijalankan terhadap lalu lintas pengujian. 

 Listener untuk lalu lintas pengujian Anda dapat menggunakan salah satu grup target Anda. Gunakan AWS CLI perintah [create-listener](https://docs.aws.amazon.com/cli/latest/reference/elbv2/create-listener.html) untuk membuat pendengar kedua dengan aturan default yang meneruskan lalu lintas pengujian ke port 8080. Gunakan ARN penyeimbang beban Anda dan ARN dari salah satu grup target Anda.

```
aws elbv2 create-listener --load-balancer-arn your-load-balancer-arn \
--protocol HTTP --port 8080 \
--default-actions Type=forward,TargetGroupArn=your-target-group-arn --region your-aws-region
```

# Langkah 2: Perbarui aplikasi Amazon ECS Anda
<a name="tutorial-ecs-with-hooks-update-the-ecs-application"></a>

 Di bagian ini, Anda memperbarui aplikasi Amazon ECS Anda untuk menggunakan revisi baru dari definisi tugasnya. Anda membuat revisi baru dan menambahkan pembaruan kecil ke dalamnya dengan menambahkan tag. 

**Untuk memperbarui definisi tugas**

1. Buka konsol klasik Amazon ECS di [https://console.aws.amazon.com/ecs/](https://console.aws.amazon.com/ecs/).

1.  Di panel navigasi, pilih **Ketentuan Tugas**. 

1.  Pilih kotak centang untuk definisi tugas yang digunakan oleh layanan Amazon ECS Anda.

1.  Pilih **Buat revisi baru**. 

1.  Buat pembaruan kecil untuk definisi tugas dengan menambahkan tag. Di bagian bawah halaman, di **Tag**, buat tag baru dengan memasukkan pasangan kunci dan nilai baru. 

1.  Pilih **Buat**. Anda akan melihat bahwa nomor revisi definisi tugas Anda telah bertambah satu. 

1.  Pilih tab **JSON**. Catat nilainya`taskDefinitionArn`. Formatnya adalah `arn:aws:ecs:aws-region: account-id:task-definition/task-definition-family: task-definition-revision`. Ini adalah ARN dari definisi tugas Anda yang diperbarui. 

# Langkah 3: Buat fungsi Lambda kait siklus hidup
<a name="tutorial-ecs-with-hooks-create-hooks"></a>

Di bagian ini, Anda menerapkan satu fungsi Lambda untuk hook penyebaran Amazon ECS Anda. `AfterAllowTestTraffic` Fungsi Lambda menjalankan uji validasi sebelum aplikasi Amazon ECS yang diperbarui diinstal. Untuk tutorial ini, fungsi Lambda kembali. `Succeeded` Selama penerapan dunia nyata, tes validasi kembali `Succeeded` atau`Failed`, tergantung pada hasil tes validasi. Juga selama penerapan dunia nyata, Anda dapat menerapkan fungsi pengujian Lambda untuk satu atau beberapa kait `BeforeInstall` peristiwa siklus hidup penerapan Amazon ECS lainnya (,,, dan). `AfterInstall` `BeforeAllowTraffic` `AfterAllowTraffic` 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).

 Peran IAM diperlukan untuk membuat fungsi Lambda Anda. Peran tersebut memberikan izin fungsi Lambda untuk menulis CloudWatch ke Log dan menyetel status hook siklus hidup CodeDeploy . 

**Untuk membuat IAM role**

1. Buka konsol IAM di [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Dari panel navigasi, pilih **Peran**, lalu pilih **Buat peran**.

1.  Buat peran dengan properti berikut: 
   +  **Entitas tepercaya**: **AWS Lambda**. 
   +  **Izin**: **AWSLambdaBasicExecutionRole**. Ini memberikan izin fungsi Lambda Anda untuk menulis CloudWatch ke Log. 
   +  **Nama peran**: **`lambda-cli-hook-role`**. 

   Untuk informasi selengkapnya, lihat [Membuat peran AWS Lambda eksekusi](https://docs.aws.amazon.com/lambda/latest/dg/with-userapp.html#with-userapp-walkthrough-custom-events-create-iam-role). 

1.  Lampirkan izin `codedeploy:PutLifecycleEventHookExecutionStatus` ke peran yang Anda buat. Ini memberikan izin fungsi Lambda Anda untuk menyetel status hook siklus CodeDeploy hidup selama penerapan. Untuk informasi selengkapnya, lihat [Menambahkan izin identitas IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#add-policies-console) di *Panduan AWS Identity and Access Management Pengguna* dan [PutLifecycleEventHookExecutionStatus](https://docs.aws.amazon.com/codedeploy/latest/APIReference/API_PutLifecycleEventHookExecutionStatus.html)di Referensi *CodeDeploy API*. 

**Untuk membuat fungsi Lambda `AfterAllowTestTraffic` hook**

1.  Buat file bernama `AfterAllowTestTraffic.js` dengan isi berikut ini. 

   ```
   'use strict';
    
    const AWS = require('aws-sdk');
    const codedeploy = new AWS.CodeDeploy({apiVersion: '2014-10-06'});
    
    exports.handler = (event, context, callback) => {
    
    	console.log("Entering AfterAllowTestTraffic hook.");
    	
    	// Read the DeploymentId and LifecycleEventHookExecutionId from the event payload
     var deploymentId = event.DeploymentId;
    	var lifecycleEventHookExecutionId = event.LifecycleEventHookExecutionId;
    	var validationTestResult = "Failed";
    	
    	// Perform AfterAllowTestTraffic validation tests here. Set the test result 
    	// to "Succeeded" for this tutorial.
    	console.log("This is where AfterAllowTestTraffic validation tests happen.")
    	validationTestResult = "Succeeded";
    	
    	// Complete the AfterAllowTestTraffic hook by sending CodeDeploy the validation status
    	var params = {
    		deploymentId: deploymentId,
    		lifecycleEventHookExecutionId: lifecycleEventHookExecutionId,
    		status: validationTestResult // status can be 'Succeeded' or 'Failed'
    	};
    	
    	// Pass CodeDeploy the prepared validation test results.
    	codedeploy.putLifecycleEventHookExecutionStatus(params, function(err, data) {
    		if (err) {
    			// Validation failed.
    			console.log('AfterAllowTestTraffic validation tests failed');
    			console.log(err, err.stack);
    			callback("CodeDeploy Status update failed");
    		} else {
    			// Validation succeeded.
    			console.log("AfterAllowTestTraffic validation tests succeeded");
    			callback(null, "AfterAllowTestTraffic validation tests succeeded");
    		}
    	});
    }
   ```

1.  Buat paket penyebaran Lambda. 

   ```
   zip AfterAllowTestTraffic.zip AfterAllowTestTraffic.js 
   ```

1.  Gunakan `create-function` perintah untuk membuat fungsi Lambda untuk hook Anda`AfterAllowTestTraffic`. 

   ```
   aws lambda create-function --function-name AfterAllowTestTraffic \
          --zip-file fileb://AfterAllowTestTraffic.zip \
          --handler AfterAllowTestTraffic.handler \
          --runtime nodejs10.x \
          --role arn:aws:iam::aws-account-id:role/lambda-cli-hook-role
   ```

1.  Catat ARN fungsi Lambda Anda dalam tanggapannya. `create-function` Anda menggunakan ARN ini saat memperbarui AppSpec file CodeDeploy penerapan di langkah berikutnya. 

# Langkah 4: Perbarui AppSpec file Anda
<a name="tutorial-ecs-with-hooks-create-appspec-file"></a>

 Di bagian ini, Anda memperbarui AppSpec file Anda dengan `Hooks` bagian. Di `Hooks` bagian ini, Anda menentukan fungsi Lambda untuk kait siklus `AfterAllowTestTraffic` hidup. 

**Untuk memperbarui AppSpec file Anda**

1.  Buka AppSpec file file yang Anda buat [Langkah 2: Buat AppSpec file](tutorial-ecs-create-appspec-file.md) dari file[Tutorial: Menyebarkan aplikasi ke Amazon ECS](tutorial-ecs-deployment.md). 

1.  Perbarui `TaskDefinition` properti dengan definisi tugas ARN yang Anda catat. [Langkah 2: Perbarui aplikasi Amazon ECS Anda](tutorial-ecs-with-hooks-update-the-ecs-application.md) 

1. Salin dan tempel `Hooks` bagian tersebut ke AppSpec file file Anda. Perbarui ARN setelahnya `AfterAllowTestTraffic` dengan ARN dari fungsi Lambda yang Anda catat. [Langkah 3: Buat fungsi Lambda kait siklus hidup](tutorial-ecs-with-hooks-create-hooks.md) 

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

   ```
   {
     "version": 0.0,
     "Resources": [
       {
         "TargetService": {
           "Type": "AWS::ECS::Service",
           "Properties": {
             "TaskDefinition": "arn:aws:ecs:aws-region-id:aws-account-id::task-definition/ecs-demo-task-definition:revision-number",
             "LoadBalancerInfo": {
               "ContainerName": "sample-website",
               "ContainerPort": 80
             }
           }
         }
       }
     ],
     "Hooks": [
       {
         "AfterAllowTestTraffic": "arn:aws:lambda:aws-region-id:aws-account-id:function:AfterAllowTestTraffic"
       }
     ]
   }
   ```

------
#### [ YAML AppSpec ]

   ```
   version: 0.0
   Resources:
     - TargetService:
         Type: AWS::ECS::Service
         Properties:
           TaskDefinition: "arn:aws:ecs:aws-region-id:aws-account-id::task-definition/ecs-demo-task-definition:revision-number"
           LoadBalancerInfo:
             ContainerName: "sample-website"
             ContainerPort: 80
   Hooks:
     - AfterAllowTestTraffic: "arn:aws:lambda:aws-region-id:aws-account-id:function:AfterAllowTestTraffic"
   ```

------

1.  Simpan AppSpec file Anda dan unggah ke bucket S3-nya. 

# Langkah 5: Gunakan CodeDeploy konsol untuk menyebarkan layanan Amazon ECS Anda
<a name="tutorial-ecs-with-hooks-deployment"></a>

 Di bagian ini, Anda memperbarui grup penerapan dengan menentukan port untuk listener pengujian Anda. Ini adalah pendengar yang Anda buat. [Langkah 1: Buat pendengar tes](tutorial-ecs-with-hooks-create-second-listener.md) Selama penerapan, CodeDeploy jalankan pengujian validasi Anda selama hook siklus hidup `AfterAllowTestTraffic` penerapan menggunakan lalu lintas pengujian yang disajikan ke set tugas pengganti Anda menggunakan listener pengujian. Tes validasi Anda mengembalikan hasilnya`Succeeded`, sehingga penerapan dilanjutkan dengan peristiwa siklus hidup penerapan berikutnya. Dalam skenario dunia nyata, fungsi pengujian Anda kembali `Succeeded` atau`Failed`. 

**Untuk menambahkan listener pengujian ke grup penerapan**

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

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

1. Pilih aplikasi yang Anda buat[Tutorial: Menyebarkan aplikasi ke Amazon ECS](tutorial-ecs-deployment.md). Jika Anda menggunakan nama yang disarankan, itu benar **ecs-demo-codedeploy-app**.

1. Di **grup Deployment**, pilih grup penyebaran yang Anda buat. [Tutorial: Menyebarkan aplikasi ke Amazon ECS](tutorial-ecs-deployment.md) Jika Anda menggunakan nama yang disarankan, itu benar **ecs-demo-dg**.

1.  Pilih **Edit**. 

1. Dari **port Test listener**, pilih port dan protokol untuk test listener yang Anda buat sebelumnya dalam tutorial ini. Ini harus **HTTP: 8080**. 

1.  Pilih **Simpan perubahan**. 

**Untuk menyebarkan aplikasi Amazon ECS Anda**

1. Dari halaman konsol grup penerapan Anda, pilih **Buat penerapan**.

1.  Untuk **grup Deployment**, pilih **ecs-demo-dg**. 

1.  Untuk **jenis Revisi**, pilih **Aplikasi saya disimpan di Amazon** S3. Di **lokasi Revisi**, masukkan nama bucket dan AppSpec file S3 Anda (misalnya,**s3://my-s3-bucket/appspec.json**). 

1.  Untuk **jenis file Revisi**, pilih **.json atau.yaml** yang sesuai**.** 

1.  (Opsional) Dalam **deskripsi Deployment**, masukkan deskripsi untuk penerapan Anda. 

1. Pilih **Buat penerapan**.

 Anda dapat memantau penerapan Anda dalam status **Deployment**. Setelah 100% lalu lintas produksi dirutekan ke set tugas pengganti, Anda dapat memilih **Hentikan set tugas asli** untuk segera menghentikan set tugas asli. Jika Anda tidak memilih **Menghentikan set tugas asli, set** tugas asli akan berakhir setelah durasi yang Anda tentukan saat membuat grup penerapan. 

![\[Bagian status penerapan CodeDeploy konsol.\]](http://docs.aws.amazon.com/id_id/codedeploy/latest/userguide/images/ecs-tutorial-deployment-status-with-test-listener.png)


# Langkah 6: Lihat output fungsi kait Lambda Anda di Log CloudWatch
<a name="tutorial-ecs-with-hooks-view-cw-logs"></a>

 Jika CodeDeploy penerapan Anda berhasil, tes validasi di fungsi kait Lambda Anda juga berhasil. Anda dapat mengonfirmasi ini dengan melihat log untuk fungsi hook di CloudWatch Log. 

1. Buka CloudWatch konsol di [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1.  Dari panel navigasi, pilih **Log**. Anda akan melihat satu grup log baru untuk fungsi kait Lambda yang Anda tentukan dalam file Anda AppSpec .   
![\[Grup log baru di CloudWatch konsol.\]](http://docs.aws.amazon.com/id_id/codedeploy/latest/userguide/images/ecs-demo-cw-logs.png)

1.  Pilih grup log baru. Ini harus**/aws/lambda/AfterAllowTestTrafficHook**. 

1.  Pilih pengaliran log. Jika Anda melihat lebih dari satu aliran log, pilih salah satu dengan tanggal dan waktu terbaru di bawah **Waktu Acara Terakhir**. 

1.  Perluas peristiwa aliran log untuk mengonfirmasi fungsi kait Lambda Anda menulis pesan sukses ke log. Berikut ini menunjukkan fungsi kait `AfterAllowTraffic` Lambda berhasil.   
![\[Peristiwa aliran log yang menunjukkan AfterAllowTraffic hook.\]](http://docs.aws.amazon.com/id_id/codedeploy/latest/userguide/images/ecs-demo-cw-log-events.png)

# Langkah 7: Bersihkan
<a name="tutoria-ecs-with-hooks-clean-up"></a>

 Bila Anda telah menyelesaikan tutorial ini, bersihkan sumber daya yang terkait dengannya untuk menghindari biaya untuk sumber daya yang tidak Anda gunakan. Nama sumber daya dalam langkah ini adalah nama yang disarankan dalam tutorial ini (**ecs-demo-codedeploy-app**misalnya, untuk nama CodeDeploy aplikasi Anda). Jika Anda menggunakan nama yang berbeda, maka pastikan untuk menggunakannya dalam pembersihan Anda. 

**Untuk membersihkan sumber daya tutorial**

1. Gunakan [delete-deployment-group](https://docs.aws.amazon.com/cli/latest/reference/deploy/delete-deployment-group.html)perintah untuk menghapus grup CodeDeploy penyebaran.

   ```
   aws deploy delete-deployment-group --application-name ecs-demo-deployment-group --deployment-group-name ecs-demo-dg --region aws-region-id
   ```

1. Gunakan perintah [hapus-aplikasi](https://docs.aws.amazon.com/cli/latest/reference/deploy/delete-application.html) untuk menghapus aplikasi. CodeDeploy 

   ```
   aws deploy delete-application --application-name ecs-demo-deployment-group --region aws-region-id
   ```

1. Gunakan perintah [delete-function](https://docs.aws.amazon.com/cli/latest/reference/lambda/delete-function.html) untuk menghapus fungsi hook Lambda Anda.

   ```
   aws lambda delete-function --function-name AfterAllowTestTraffic
   ```

1. Gunakan [delete-log-group](https://docs.aws.amazon.com/cli/latest/reference/logs/delete-log-group.html)perintah untuk menghapus grup CloudWatch log Anda.

   ```
   aws logs delete-log-group --log-group-name /aws/lambda/AfterAllowTestTraffic
   ```