

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

# Pelajari cara menggunakan penemuan AWS Cloud Map layanan dengan atribut khusus
<a name="tutorial-microservices"></a>

Tutorial berikut menunjukkan bagaimana Anda dapat menggunakan penemuan AWS Cloud Map layanan dengan atribut khusus yang dapat ditemukan menggunakan API. AWS Cloud Map Tutorial memandu Anda melalui membuat dan menjalankan aplikasi klien menggunakan AWS CloudShell. Aplikasi menggunakan dua fungsi Lambda untuk menulis data ke tabel DynamoDB dan kemudian membaca dari tabel. Fungsi Lambda dan tabel DynamoDB terdaftar sebagai instance layanan. AWS Cloud Map Kode dalam aplikasi klien dan fungsi Lambda menggunakan atribut AWS Cloud Map khusus untuk menemukan sumber daya yang diperlukan untuk melakukan pekerjaan.

Untuk versi AWS CLI berbasis tutorial ini, lihat[Pelajari cara menggunakan penemuan AWS Cloud Map layanan dengan atribut kustom menggunakan AWS CLI](tutorial-microservices-cli.md).

**penting**  
Anda akan membuat AWS sumber daya selama lokakarya yang akan dikenakan biaya di AWS akun Anda. Disarankan untuk membersihkan sumber daya segera setelah Anda menyelesaikan bengkel untuk meminimalkan biaya.

## Prasyarat
<a name="tutorial-customattributes-prerequisites"></a>

Sebelum memulai, selesaikan langkah-langkah di [Siapkan untuk digunakan AWS Cloud Map](setting-up-cloud-map.md).

## Langkah 1: Buat AWS Cloud Map namespace
<a name="tutorial-customattributes-step1"></a>

Pada langkah ini, Anda membuat AWS Cloud Map namespace. Namespace adalah konstruksi yang digunakan untuk mengelompokkan layanan untuk aplikasi. Saat Anda membuat namespace, Anda menentukan bagaimana sumber daya akan ditemukan. Sumber daya yang dibuat di namespace yang dibuat pada langkah ini akan dapat ditemukan dengan panggilan AWS Cloud Map API menggunakan atribut khusus.

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

1. Pilih **Buat namespace**.

1. Untuk **nama Namespace, tentukan**. `cloudmap-tutorial`

1. (Opsional) Untuk **deskripsi Namespace**, tentukan deskripsi untuk tujuan Anda menggunakan namespace.

1. Untuk **penemuan Instance**, pilih **panggilan API**.

1. Tinggalkan sisa nilai default dan pilih **Buat namespace**.

## Langkah 2: Buat tabel DynamoDB
<a name="tutorial-customattributes-step2"></a>

Pada langkah ini, Anda membuat tabel DynamoDB. Tabel ini digunakan untuk menyimpan dan mengambil data untuk aplikasi sampel yang akan Anda buat dalam langkah-langkah berikut.

Untuk informasi tentang cara membuat DynamoDB, [lihat Langkah 1: Membuat tabel di DynamoDB dalam](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/getting-started-step-1.html) Panduan Pengembang DynamoDB dan *gunakan tabel berikut untuk menentukan opsi* apa yang akan ditentukan.


| Opsi | Nilai | 
| --- | --- | 
| Nama tabel | cloudmap | 
| Kunci partisi | id | 

Simpan nilai default untuk sisa pengaturan dan buat tabel.

## Langkah 3: Buat layanan AWS Cloud Map data dan daftarkan tabel DynamoDB sebagai contoh
<a name="tutorial-customattributes-step3"></a>

Pada langkah ini, Anda membuat AWS Cloud Map layanan dan kemudian mendaftarkan tabel DynamoDB yang dibuat pada langkah terakhir sebagai instance layanan.

1. Buka AWS Cloud Map konsol di [https://console.aws.amazon.com/cloudmap/](https://console.aws.amazon.com/cloudmap/)

1. **Dari daftar ruang nama, pilih `cloudmap-tutorial` namespace dan pilih Lihat detail.**

1. Di bagian **Layanan**, pilih **Buat layanan** dan lakukan hal berikut.

   1. Untuk **nama Layanan**, masukkan`data-service`.

   1. Tinggalkan sisa nilai default dan pilih **Buat layanan**.

1. Di bagian **Layanan**, pilih `data-service` layanan dan pilih **Lihat detail**.

1. Di bagian **Instans layanan**, pilih **Daftar instance layanan**.

1. Pada halaman **contoh layanan Register**, lakukan hal berikut.

   1. Untuk **jenis Instance**, pilih **Mengidentifikasi informasi untuk sumber daya lain**.

   1. Untuk **id contoh Layanan**, tentukan`data-instance`.

   1. Di bagian **Atribut khusus**, tentukan pasangan kunci-nilai berikut: **key** =`tablename`, **value** =. `cloudmap`

## Langkah 4: Buat peran AWS Lambda eksekusi
<a name="tutorial-customattributes-step4"></a>

Pada langkah ini, Anda membuat peran IAM yang digunakan AWS Lambda fungsi pada langkah berikutnya. Anda dapat memberi nama peran IAM `cloudmap-tutorial-role` dan menghilangkan batas izin karena peran tersebut hanya digunakan untuk tutorial ini, dan Anda dapat menghapusnya setelahnya.

**Untuk membuat peran layanan untuk Lambda (konsol IAM)**

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

1. Di panel navigasi konsol IAM, pilih **Peran**, dan lalu pilih **Buat peran**.

1. Untuk **jenis entitas Tepercaya**, pilih **Layanan AWS**.

1. Untuk **kasus Layanan atau penggunaan**, pilih **Lambda**, lalu pilih kasus penggunaan **Lambda**.

1. Pilih **Berikutnya**.

1. Cari, lalu pilih kotak di samping, `PowerUserAccess` kebijakan, lalu pilih **Berikutnya**.

1. Pilih **Berikutnya**.

1. Untuk **nama Peran**, tentukan`cloudmap-tutorial-role`.

1. Tinjau peran lalu pilih **Buat peran**.

## Langkah 5: Buat fungsi Lambda untuk menulis data
<a name="tutorial-customattributes-step5"></a>

Pada langkah ini, Anda membuat fungsi Lambda yang ditulis dari awal yang menulis data ke tabel DynamoDB dengan menggunakan API untuk menanyakan layanan yang Anda buat. AWS Cloud Map AWS Cloud Map 

Untuk informasi tentang membuat fungsi Lambda, lihat [Membuat fungsi Lambda dengan konsol di *Panduan AWS Lambda Pengembang*](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html#getting-started-create-function) dan gunakan tabel berikut untuk menentukan opsi apa yang akan ditentukan atau dipilih.


| Opsi | Nilai | 
| --- | --- | 
| Nama fungsi | writefunction | 
| Waktu Aktif | Python 3.12 | 
| Arsitektur  | x86\_64 | 
| Izin | Gunakan peran yang ada | 
| Peran yang ada | cloudmap-tutorial-role | 

Setelah Anda membuat fungsi, perbarui kode contoh untuk mencerminkan kode Python berikut, dan kemudian menyebarkan fungsi. Perhatikan bahwa Anda menentukan atribut `datatable` kustom yang Anda kaitkan dengan instance AWS Cloud Map layanan yang Anda buat untuk tabel DynamoDB. Fungsi menghasilkan kunci yang merupakan angka acak antara 1 dan 100 dan mengaitkannya dengan nilai yang diteruskan ke fungsi ketika dipanggil.

```
import json
import boto3
import random

def lambda_handler(event, context):
       
    serviceclient = boto3.client('servicediscovery')
    
    response = serviceclient.discover_instances(
        NamespaceName='cloudmap-tutorial',
        ServiceName='data-service')
       
    tablename = response["Instances"][0]["Attributes"]["tablename"]
       
    dynamodbclient = boto3.resource('dynamodb')
       
    table = dynamodbclient.Table(tablename)
       
    response = table.put_item(
        Item={ 'id': str(random.randint(1,100)), 'todo': event })
       
    return {
        'statusCode': 200,
        'body': json.dumps(response)
    }
```

Setelah menerapkan fungsi, untuk menghindari kesalahan batas waktu, perbarui batas waktu fungsi menjadi 5 detik. *Untuk informasi selengkapnya, lihat [Mengonfigurasi batas waktu fungsi Lambda di Panduan](https://docs.aws.amazon.com/lambda/latest/dg/configuration-timeout.html) Pengembang.AWS Lambda *

## Langkah 6: Buat layanan AWS Cloud Map aplikasi dan daftarkan fungsi tulis Lambda sebagai instance
<a name="tutorial-customattributes-step6"></a>

Pada langkah ini, Anda membuat AWS Cloud Map layanan dan kemudian mendaftarkan fungsi tulis Lambda sebagai instance layanan.

1. Buka AWS Cloud Map konsol di [https://console.aws.amazon.com/cloudmap/](https://console.aws.amazon.com/cloudmap/)

1. Di navigasi kiri, pilih **Namespaces**.

1. **Dari daftar ruang nama, pilih `cloudmap-tutorial` namespace dan pilih Lihat detail.**

1. Di bagian **Layanan**, pilih **Buat layanan** dan lakukan hal berikut.

   1. Untuk **nama Layanan**, masukkan`app-service`.

   1. Tinggalkan sisa nilai default dan pilih **Buat layanan**.

1. Di bagian **Layanan**, pilih `app-service` layanan dan pilih **Lihat detail**.

1. Di bagian **Instans layanan**, pilih **Daftar instance layanan**.

1. Pada halaman **contoh layanan Register**, lakukan hal berikut.

   1. Untuk **jenis Instance**, pilih **Mengidentifikasi informasi untuk sumber daya lain**.

   1. Untuk **id contoh Layanan**, tentukan`write-instance`.

   1. Di bagian **Atribut kustom**, tentukan pasangan kunci-nilai berikut.
      + **kunci** =`action`, **nilai** = `write`
      + **kunci** =`functionname`, **nilai** = `writefunction`

## Langkah 7: Buat fungsi Lambda untuk membaca data
<a name="tutorial-customattributes-step7"></a>

Pada langkah ini, Anda membuat fungsi Lambda yang ditulis dari awal yang menulis data ke tabel DynamoDB yang Anda buat.

Untuk informasi tentang membuat fungsi Lambda, lihat [Membuat fungsi Lambda dengan konsol di *Panduan AWS Lambda Pengembang*](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html#getting-started-create-function) dan gunakan tabel berikut untuk menentukan opsi apa yang akan ditentukan atau dipilih.


| Opsi | Nilai | 
| --- | --- | 
| Nama fungsi | fungsi baca | 
| Waktu Aktif | Python 3.12 | 
| Arsitektur  | x86\_64 | 
| Izin | Gunakan peran yang ada | 
| Peran yang ada | cloudmap-tutorial-role | 

Setelah Anda membuat fungsi, perbarui kode contoh untuk mencerminkan kode Python berikut, dan kemudian menyebarkan fungsi. Fungsi memindai tabel dan mengembalikan semua item.

```
import json
import boto3

def lambda_handler(event, context):
    serviceclient = boto3.client('servicediscovery')

    response = serviceclient.discover_instances(NamespaceName='cloudmap-tutorial', ServiceName='data-service')
       
    tablename = response["Instances"][0]["Attributes"]["tablename"]
       
    dynamodbclient = boto3.resource('dynamodb')
       
    table = dynamodbclient.Table(tablename)
       
    response = table.scan(Select='ALL_ATTRIBUTES')

    return {
        'statusCode': 200,
        'body': json.dumps(response)
    }
```

Setelah menerapkan fungsi, untuk menghindari kesalahan batas waktu, perbarui batas waktu fungsi menjadi 5 detik. *Untuk informasi selengkapnya, lihat [Mengonfigurasi batas waktu fungsi Lambda di Panduan](https://docs.aws.amazon.com/lambda/latest/dg/configuration-timeout.html) Pengembang.AWS Lambda *

## Langkah 8: Daftarkan fungsi baca Lambda sebagai instance layanan AWS Cloud Map
<a name="tutorial-customattributes-step8"></a>

Pada langkah ini, Anda mendaftarkan fungsi baca Lambda sebagai instance layanan di `app-service` layanan yang sebelumnya Anda buat.

1. Buka AWS Cloud Map konsol di [https://console.aws.amazon.com/cloudmap/](https://console.aws.amazon.com/cloudmap/)

1. Di navigasi kiri, pilih **Namespaces**.

1. **Dari daftar ruang nama, pilih `cloudmap-tutorial` namespace dan pilih Lihat detail.**

1. Di bagian **Layanan**, pilih `app-service` layanan dan pilih **Lihat detail**.

1. Di bagian **Instans layanan**, pilih **Daftar instance layanan**.

1. Pada halaman **contoh layanan Register**, lakukan hal berikut.

   1. Untuk **jenis Instance**, pilih **Mengidentifikasi informasi untuk sumber daya lain**.

   1. Untuk **id contoh Layanan**, tentukan`read-instance`.

   1. Di bagian **Atribut kustom**, tentukan pasangan kunci-nilai berikut.
      + **kunci** =`action`, **nilai** = `read`
      + **kunci** =`functionname`, **nilai** = `readfunction`

## Langkah 9: Buat dan jalankan klien baca dan tulis AWS CloudShell
<a name="tutorial-customattributes-step10"></a>

Anda dapat membuat dan menjalankan aplikasi klien AWS CloudShell yang menggunakan kode untuk menemukan layanan yang Anda konfigurasikan AWS Cloud Map dan melakukan panggilan ke layanan ini.

1. Buka AWS CloudShell konsol di [https://console.aws.amazon.com/cloudshell/](https://console.aws.amazon.com/cloudshell/)

1. Gunakan perintah berikut untuk membuat file bernama`writefunction.py`.

   ```
   vim writeclient.py
   ```

1. Dalam `writeclient.py` file, masuk ke mode insert dengan menekan `i` tombol. Kemudian, salin dan tempel kode berikut. Kode ini menemukan fungsi Lambda untuk menulis data dengan mencari `name=writeservice` atribut kustom dalam `app-service` layanan. Nama fungsi Lambda yang bertanggung jawab untuk menulis data ke tabel DynamoDB dikembalikan. Kemudian fungsi Lambda dipanggil, meneruskan payload sampel yang ditulis ke tabel sebagai nilai.

   ```
   import boto3
   
   serviceclient = boto3.client('servicediscovery')
   
   response = serviceclient.discover_instances(NamespaceName='cloudmap-tutorial', ServiceName='app-service', QueryParameters={ 'action': 'write' })
   
   functionname = response["Instances"][0]["Attributes"]["functionname"]
   
   lambdaclient = boto3.client('lambda')
   
   resp = lambdaclient.invoke(FunctionName=functionname, Payload='"This is a test data"')
   
   print(resp["Payload"].read())
   ```

1. Tekan tombol escape, ketik`:wq`, dan tekan tombol enter untuk menyimpan file dan keluar.

1. Gunakan perintah berikut untuk menjalankan kode Python.

   ```
   python3 writeclient.py
   ```

   Outputnya harus berupa `200` respons, mirip dengan yang berikut ini.

   ```
   b'{"statusCode": 200, "body": "{\\"ResponseMetadata\\": {\\"RequestId\\": \\"Q0M038IT0BPBVBJK8OCKK6I6M7VV4KQNSO5AEMVJF66Q9ASUAAJG\\", \\"HTTPStatusCode\\": 200, \\"HTTPHeaders\\": {\\"server\\": \\"Server\\", \\"date\\": \\"Wed, 06 Mar 2024 22:46:09 GMT\\", \\"content-type\\": \\"application/x-amz-json-1.0\\", \\"content-length\\": \\"2\\", \\"connection\\": \\"keep-alive\\", \\"x-amzn-requestid\\": \\"Q0M038IT0BPBVBJK8OCKK6I6M7VV4KQNSO5AEMVJF66Q9ASUAAJG\\", \\"x-amz-crc32\\": \\"2745614147\\"}, \\"RetryAttempts\\": 0}}"}'
   ```

1. Untuk memverifikasi penulisan berhasil pada langkah sebelumnya, buat klien baca.

   1. Gunakan perintah berikut untuk membuat file bernama`readfunction.py`.

      ```
      vim readclient.py
      ```

   1. Dalam `readclient.py` file, tekan `i` tombol untuk masuk ke mode insert. Kemudian, salin dan tempel kode berikut. Kode ini memindai tabel dan akan mengembalikan nilai yang Anda tulis ke tabel pada langkah sebelumnya.

      ```
      import boto3
      
      serviceclient = boto3.client('servicediscovery')
      
      response = serviceclient.discover_instances(NamespaceName='cloudmap-tutorial', ServiceName='app-service', QueryParameters={ 'action': 'read' })
      
      functionname = response["Instances"][0]["Attributes"]["functionname"]
      
      lambdaclient = boto3.client('lambda')
      
      resp = lambdaclient.invoke(FunctionName=functionname, InvocationType='RequestResponse')
      
      print(resp["Payload"].read())
      ```

   1. Tekan tombol escape, ketik`:wq`, dan tekan tombol enter untuk menyimpan file dan keluar.

   1. Gunakan perintah berikut untuk menjalankan kode Python.

      ```
      python3 readclient.py
      ```

      Outputnya akan terlihat mirip dengan berikut ini, mencantumkan nilai yang ditulis ke tabel dengan menjalankan `writefunction.py` dan kunci acak yang dihasilkan dalam fungsi tulis Lambda.

      ```
        b'{"statusCode": 200, "body": "{\\"Items\\": [{\\"id\\": \\"45\\", \\"todo\\": \\"This is a test data\\"}], \\"Count\\": 1, \\"ScannedCount\\": 1, \\"ResponseMetadata\\": {\\"RequestId\\": \\"9JF8J6SFQCKR6IDT5JG5NOM3CNVV4KQNSO5AEMVJF66Q9ASUAAJG\\", \\"HTTPStatusCode\\": 200, \\"HTTPHeaders\\": {\\"server\\": \\"Server\\", \\"date\\": \\"Thu, 25 Jul 2024 20:43:33 GMT\\", \\"content-type\\": \\"application/x-amz-json-1.0\\", \\"content-length\\": \\"91\\", \\"connection\\": \\"keep-alive\\", \\"x-amzn-requestid\\": \\"9JF8J6SFQCKR6IDT5JG5NOM3CNVV4KQNSO5AEMVJF66Q9ASUAAJG\\", \\"x-amz-crc32\\": \\"1163081893\\"}, \\"RetryAttempts\\": 0}}"}'
      ```

## Langkah 10: Bersihkan sumber daya
<a name="tutorial-customattributes-step11"></a>

Setelah Anda menyelesaikan tutorial, hapus sumber daya untuk menghindari biaya tambahan. AWS Cloud Map mengharuskan Anda membersihkannya dalam urutan terbalik, instance layanan terlebih dahulu, lalu layanan, dan akhirnya namespace. Langkah-langkah berikut memandu Anda melalui pembersihan AWS Cloud Map sumber daya yang digunakan dalam tutorial.

**Untuk menghapus sumber AWS Cloud Map daya**

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

1. **Dari daftar ruang nama, pilih `cloudmap-tutorial` namespace dan pilih Lihat detail.**

1. Pada halaman detail namespace, dari daftar layanan, pilih `data-service` layanan dan pilih **Lihat** detail.

1. Di bagian **Service instance**, pilih `data-instance` instance dan pilih **Deregister**.

1. Menggunakan breadcrumb di bagian atas halaman, pilih **cloudmap-tutorial.com** untuk menavigasi kembali ke halaman detail namespace.

1. **Pada halaman detail namespace, dari daftar layanan, pilih layanan **layanan data** dan pilih Hapus.**

1. Ulangi langkah 3-6 untuk `app-service` layanan dan instance `write-instance` dan `read-instance` layanan.

1. Di navigasi kiri, pilih **Namespaces**.

1. **Pilih `cloudmap-tutorial` namespace dan pilih Delete.**

Tabel berikut mencantumkan prosedur yang dapat Anda ikuti untuk menghapus sumber daya lain yang digunakan dalam tutorial.


| Sumber daya | Langkah-langkah | 
| --- | --- | 
| Tabel DynamoDB | [Langkah 6: (Opsional) Hapus tabel DynamoDB Anda untuk membersihkan sumber daya di Panduan Pengembang Amazon *DynamoDB*](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/getting-started-step-6.html) | 
| Fungsi Lambda dan peran eksekusi IAM terkait | [Bersihkan](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html#gettingstarted-cleanup) di *Panduan AWS Lambda Pengembang* | 