

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

# Siapkan variabel tahap untuk REST APIs di API Gateway
<a name="how-to-set-stage-variables-aws-console"></a>

Bagian ini menunjukkan cara menyiapkan berbagai variabel tahap untuk dua tahapan penerapan API sampel dengan menggunakan konsol Amazon API Gateway. Untuk memahami cara menggunakan variabel tahap di API Gateway, kami sarankan Anda mengikuti semua prosedur di bagian ini.

## Prasyarat
<a name="how-to-set-stage-variables-aws-console-prerequisites"></a>

Sebelum Anda mulai, pastikan prasyarat berikut terpenuhi: 
+ Anda harus memiliki API yang tersedia di API Gateway. Ikuti petunjuk dalam [Kembangkan REST APIs di API Gateway](rest-api-develop.md).
+ Anda harus telah menerapkan API setidaknya sekali. Ikuti petunjuk dalam [Menerapkan REST APIs di API Gateway](how-to-deploy-api.md).
+ Anda harus telah membuat tahap pertama untuk API yang diterapkan. Ikuti petunjuk dalam [Buat panggung baru](set-up-stages.md#how-to-create-stage-console).

  

## Memanggil titik akhir HTTP melalui API dengan variabel tahap
<a name="how-to-set-stage-variables-aws-console-http-endpoint"></a>

Prosedur ini menjelaskan cara membuat variabel tahap untuk titik akhir HTTP dan dua tahap untuk API Anda. Selain itu, Anda membuat variabel tahap,`url`,`stageName`, dan `function` yang digunakan dalam prosedur berikut di bagian ini.

**Untuk memanggil titik akhir HTTP melalui API dengan variabel tahap**

1. Masuk ke konsol API Gateway di [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. Buat API, lalu buat `GET` metode pada sumber daya root API. Atur tipe integrasi ke **HTTP** dan atur **URL Endpoint** ke**http://\$1\$1stageVariables.url\$1**.

1. Menerapkan API ke tahap baru bernama**beta**. 

1. Di panel navigasi utama, pilih **Tahapan**, lalu pilih tahap **beta**. 

1. Pada tab **variabel Stage**, pilih **Edit**.

1. Pilih **Tambahkan variabel tahap**.

1. Untuk **Nama**, masukkan **url**. Untuk **nilai**, masukkan**httpbin.org/get**.

1. Pilih **Tambahkan variabel tahap**, dan kemudian lakukan hal berikut:

   Untuk **Nama**, masukkan **stageName**. Untuk **nilai**, masukkan**beta**.

1. Pilih **Tambahkan variabel tahap**, dan kemudian lakukan hal berikut:

   Untuk **Nama**, masukkan **function**. Untuk **nilai**, masukkan**HelloWorld**.

1. Pilih **Simpan**.

1.  Sekarang buat tahap kedua. Dari panel navigasi **Tahapan**, pilih **Buat tahap**. Untuk **nama Panggung**, masukkan**prod**. Pilih penerapan terbaru dari **Deployment**, lalu pilih **Create** stage.

1.  Seperti tahap **beta**, atur variabel tiga tahap yang sama (**url**, **stageName**, dan **fungsi**) ke nilai yang berbeda (**petstore-demo-endpoint.execute-api.com/petstore/pets**,, dan**HelloEveryone**)**prod**, masing-masing. 

1. Di panel navigasi **Tahapan**, pilih **beta**. Di bawah **Detail tahap**, pilih ikon salin untuk menyalin URL pemanggilan API Anda, lalu masukkan URL pemanggilan API Anda di browser web. Ini memulai `GET` permintaan tahap **beta** pada sumber daya root API. 
**catatan**  
Tautan **URL Invoke** menunjuk ke sumber daya root API dalam tahap **beta**. Memasukkan URL di browser web memanggil `GET` metode tahap **beta** pada sumber daya root. Jika metode didefinisikan pada sumber daya anak dan bukan pada sumber daya root itu sendiri, memasukkan URL di browser web mengembalikan respons `{"message":"Missing Authentication Token"}` kesalahan. Dalam hal ini, Anda harus menambahkan nama sumber daya anak tertentu **ke tautan URL Panggilan**. 

1. Respons yang Anda dapatkan dari `GET` permintaan tahap **beta** ditampilkan berikutnya. Anda juga dapat memverifikasi hasilnya dengan menggunakan browser untuk menavigasi ke **http://httpbin.org/get**. Nilai ini ditetapkan ke `url` variabel dalam tahap **beta**. Kedua tanggapan itu identik. 

1. Di panel navigasi **Tahapan**, pilih tahap **prod**. Di bawah **Detail tahap**, pilih ikon salin untuk menyalin URL pemanggilan API Anda, lalu masukkan URL pemanggilan API Anda di browser web. Ini memulai `GET` permintaan tahap **prod** pada sumber daya root API. 

1. Respons yang Anda dapatkan dari `GET` permintaan tahap **prod** ditampilkan berikutnya. Anda dapat memverifikasi hasilnya dengan menggunakan browser untuk menavigasi ke **http://petstore-demo-endpoint.execute-api. com/petstore/pets**. Nilai ini ditetapkan ke `url` variabel dalam tahap **prod**. Kedua tanggapan itu identik. 

## Lulus metadata khusus tahap ke backend HTTP
<a name="how-to-set-stage-variables-aws-console-stage-metadata"></a>

Prosedur ini menjelaskan cara menggunakan nilai variabel tahap dalam ekspresi parameter kueri untuk meneruskan metadata spesifik tahap ke backend HTTP. Kami akan menggunakan variabel `stageName` tahap yang dinyatakan dalam prosedur sebelumnya.

**Untuk meneruskan metadata khusus tahap ke backend HTTP**

1. Di panel navigasi **Resource**, pilih metode **GET**. 

   Untuk menambahkan parameter string kueri ke URL metode, pilih tab **Permintaan metode**, lalu di bagian **Pengaturan permintaan metode**, pilih **Edit**. 

1. Pilih **parameter string kueri URL** dan lakukan hal berikut:

   1. Pilih **Tambahkan string kueri**.

   1. Untuk **Nama**, masukkan **stageName**.

   1. Tetap **Diperlukan** dan **Caching** dimatikan.

1. Pilih **Simpan**.

1. Pilih tab **Permintaan integrasi**, dan kemudian di bagian **Pengaturan permintaan integrasi**, pilih **Edit**.

1. Untuk **URL Endpoint**, tambahkan **?stageName=\$1\$1stageVariables.stageName\$1** ke nilai URL yang ditentukan sebelumnya, sehingga seluruh URL **Endpoint** adalah. **http://\$1\$1stageVariables.url\$1?stageName=\$1\$1stageVariables.stageName\$1**

1. Pilih **Deploy API** dan pilih tahap **beta**.

1. Di panel navigasi utama, pilih **Tahapan**. Di panel navigasi **Tahapan**, pilih **beta**. Di bawah **Detail tahap**, pilih ikon salin untuk menyalin URL pemanggilan API Anda, lalu masukkan URL pemanggilan API Anda di browser web. 
**catatan**  
 Kami menggunakan tahap beta di sini karena titik akhir HTTP (seperti yang ditentukan oleh `url` variabel "http://httpbin.org/get “) menerima ekspresi parameter kueri dan mengembalikannya sebagai `args` objek dalam responsnya. 

1. Anda mendapatkan tanggapan berikut. Perhatikan bahwa`beta`, ditugaskan ke variabel `stageName` tahap, diteruskan di backend sebagai argumen. `stageName` 

      
![\[Respon dari metode GET API dengan titik akhir HTTP menggunakan variabel tahap url.\]](http://docs.aws.amazon.com/id_id/apigateway/latest/developerguide/images/stageVariables-new-console-invoke-beta-stage-with-url-and-stageName-response.png)

## Memanggil fungsi Lambda melalui API dengan variabel panggung
<a name="how-to-set-stage-variables-aws-console-lambda-function"></a>

Prosedur ini menjelaskan cara menggunakan variabel stage untuk memanggil fungsi Lambda sebagai backend API Anda. Anda menggunakan variabel `function` tahap yang dideklarasikan dalam[Memanggil titik akhir HTTP melalui API dengan variabel tahap](#how-to-set-stage-variables-aws-console-http-endpoint).

 Saat menyetel fungsi Lambda sebagai nilai variabel tahap, gunakan nama lokal fungsi, mungkin termasuk alias atau spesifikasi versinya, seperti dalam**HelloWorld**, atau. **HelloWorld:1** **HelloWorld:alpha** Jangan gunakan ARN fungsi (misalnya,**arn:aws:lambda:us-east-1:123456789012:function:HelloWorld**). Konsol API Gateway mengasumsikan nilai variabel stage untuk fungsi Lambda sebagai nama fungsi yang tidak memenuhi syarat dan memperluas variabel tahap yang diberikan menjadi ARN. 

**Untuk menjalankan fungsi Lambda melalui API dengan variabel stage**

1. Buat fungsi Lambda bernama **HelloWorld** menggunakan runtime Node.js default. Kode harus berisi yang berikut:

   ```
   export const handler = function(event, context, callback) {
       if (event.stageName)
           callback(null, 'Hello, World! I\'m calling from the ' + event.stageName + ' stage.');
       else
           callback(null, 'Hello, World! I\'m not sure where I\'m calling from...');
   };
   ```

   Untuk informasi selengkapnya tentang cara membuat fungsi Lambda, lihat [Memulai konsol REST API](getting-started-rest-new-console.md#getting-started-rest-new-console-create-function).

1. Di panel **Resources**, pilih **Buat sumber daya**, lalu lakukan hal berikut:

   1. Untuk **jalur Sumber Daya**, pilih**/**.

   1. Untuk **Nama sumber daya**, masukkan **lambdav1**.

   1. Pilih **Buat sumber daya**.

1. **Pilih sumber daya **/lambdav1**, lalu pilih Create method.**

   Kemudian, lakukan hal berikut:

   1. Untuk **tipe Metode**, pilih **GET**.

   1. Untuk **jenis Integrasi**, pilih fungsi **Lambda**.

   1. Matikan **integrasi proxy Lambda**.

   1. Untuk **fungsi Lambda, masukkan**. `${stageVariables.function}`  
![\[Buat GET metode yang terintegrasi dengan fungsi Lambda seperti yang ditentukan oleh variabel function tahap.\]](http://docs.aws.amazon.com/id_id/apigateway/latest/developerguide/images/stageVariables-new-console-create-lambda-get-method.png)
**Tip**  
Saat diminta dengan perintah **Tambah izin, salin perintah** [add-permission](https://docs.aws.amazon.com/cli/latest/reference/lambda/add-permission.html). Jalankan perintah pada setiap fungsi Lambda yang akan ditugaskan ke variabel `function` panggung. Misalnya, jika `$stageVariables.function` nilainya`HelloWorld`, jalankan AWS CLI perintah berikut:   

      ```
      aws lambda add-permission --function-name arn:aws:lambda:us-east-1:account-id:function:HelloWorld --source-arn arn:aws:execute-api:us-east-1:account-id:api-id/*/GET/lambdav1 --principal apigateway.amazonaws.com --statement-id statement-id-guid --action lambda:InvokeFunction
      ```
 Gagal melakukannya menghasilkan `500 Internal Server Error` respons saat menjalankan metode. Ganti `${stageVariables.function}` dengan nama fungsi Lambda yang ditetapkan ke variabel stage.   
   

![\[AWS CLI perintah untuk menambahkan izin ke fungsi Lambda yang akan dipanggil oleh metode yang Anda buat.\]](http://docs.aws.amazon.com/id_id/apigateway/latest/developerguide/images/stageVariables-new-console-add-permission-to-lambda-function.png)


   1. Pilih **metode Buat**.

1. Terapkan API ke tahap **prod** dan **beta**.

1. Di panel navigasi utama, pilih **Tahapan**. Di panel navigasi **Tahapan**, pilih **beta**. Di bawah **Detail tahap**, pilih ikon salin untuk menyalin URL pemanggilan API Anda, lalu masukkan URL pemanggilan API Anda di browser web. Tambahkan **/lambdav1** ke URL sebelum Anda menekan enter.

   Anda mendapatkan tanggapan berikut.

   ```
   "Hello, World! I'm not sure where I'm calling from..."
   ```

## Lewati metadata spesifik tahap ke fungsi Lambda melalui variabel panggung
<a name="pass-version-info-to-lambda-backend-with-stage-variable"></a>

Prosedur ini menjelaskan cara menggunakan variabel tahap untuk meneruskan metadata konfigurasi spesifik tahap ke dalam fungsi Lambda. Anda membuat `POST` metode dan template pemetaan masukan untuk menghasilkan payload menggunakan variabel `stageName` stage yang Anda deklarasikan sebelumnya.

**Untuk meneruskan metadata spesifik tahap ke fungsi Lambda melalui variabel tahap**

1. **Pilih sumber daya **/lambdav1**, lalu pilih Create method.**

   Kemudian, lakukan hal berikut:

   1. Untuk **jenis Metode**, pilih **POST**.

   1. Untuk **jenis Integrasi**, pilih fungsi **Lambda**.

   1. Matikan **integrasi proxy Lambda**.

   1. Untuk **fungsi Lambda, masukkan**. `${stageVariables.function}`

   1. Saat diminta dengan perintah **Tambah izin, salin perintah** [add-permission](https://docs.aws.amazon.com/cli/latest/reference/lambda/add-permission.html). Jalankan perintah pada setiap fungsi Lambda yang akan ditugaskan ke variabel `function` panggung.

   1. Pilih **metode Buat**.

1. Pilih tab **Permintaan integrasi**, dan kemudian di bagian **Pengaturan permintaan integrasi**, pilih **Edit**.

1. Pilih **Templat pemetaan**, lalu pilih **Tambahkan templat pemetaan**.

1. Untuk **jenis Konten**, masukkan**application/json**.

1. Untuk **badan Template**, masukkan template berikut:

   ```
   #set($inputRoot = $input.path('$'))
   {
       "stageName" : "$stageVariables.stageName"
   }
   ```
**catatan**  
 Dalam template pemetaan, variabel tahap harus direferensikan dalam tanda kutip (seperti dalam `"$stageVariables.stageName"` atau`"${stageVariables.stageName}"`). Di tempat lain, itu harus direferensikan tanpa tanda kutip (seperti dalam`${stageVariables.function}`). 

1. Pilih **Simpan**.

1. Terapkan API ke **tahap beta** dan **prod**.

1. Untuk menggunakan klien REST API untuk meneruskan metadata khusus tahap, lakukan hal berikut:

   1. Di panel navigasi **Tahapan**, pilih **beta**. Di bawah **Detail tahap**, pilih ikon salin untuk menyalin URL pemanggilan API Anda, lalu masukkan URL pemanggilan API Anda di bidang input klien REST API. Tambahkan **/lambdav1** sebelum Anda mengirimkan permintaan Anda.

      Anda mendapatkan tanggapan berikut.

      ```
      "Hello, World! I'm calling from the beta stage."
      ```

   1. Di panel navigasi **Tahapan**, pilih **prod**. Di bawah **Detail tahap**, pilih ikon salin untuk menyalin URL pemanggilan API Anda, lalu masukkan URL pemanggilan API Anda di bidang input klien REST API. Tambahkan **/lambdav1** sebelum Anda mengirimkan permintaan Anda.

      Anda mendapatkan tanggapan berikut.

      ```
      "Hello, World! I'm calling from the prod stage."
      ```

1. Untuk menggunakan fitur **Uji** untuk meneruskan metadata khusus tahapan, lakukan hal berikut:

   1. Di panel navigasi **Sumber daya**, pilih tab **Uji**. Anda mungkin perlu memilih tombol panah kanan untuk menampilkan tab.

   1. Untuk **fungsi**, masukkan**HelloWorld**.

   1. Untuk **StageName, masukkan**. **beta**

   1. Pilih **Uji**. Anda tidak perlu menambahkan badan ke `POST` permintaan Anda.

      Anda mendapatkan tanggapan berikut.

      ```
      "Hello, World! I'm calling from the beta stage."
      ```

   1. Anda dapat mengulangi langkah-langkah sebelumnya untuk menguji tahap **Prod**. Untuk **StageName, masukkan**. **Prod**

      Anda mendapatkan tanggapan berikut.

      ```
      "Hello, World! I'm calling from the prod stage."
      ```