

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

# Menggunakan variabel stage untuk REST API di API Gateway
<a name="stage-variables"></a>

Variabel tahap adalah pasangan nilai kunci yang dapat Anda definisikan sebagai atribut konfigurasi yang terkait dengan tahap penerapan REST API. Mereka bertindak seperti variabel lingkungan dan dapat digunakan dalam template penyiapan dan pemetaan API Anda. Dengan tahapan penerapan di API Gateway, Anda dapat mengelola beberapa tahapan rilis untuk setiap API dan menggunakan variabel tahap, Anda dapat mengonfigurasi tahap penerapan API untuk berinteraksi dengan titik akhir backend yang berbeda.

Variabel tahap tidak dimaksudkan untuk digunakan untuk data sensitif, seperti kredensial. Untuk meneruskan data sensitif ke integrasi, gunakan AWS Lambda otorisasi. Anda dapat meneruskan data sensitif ke integrasi dalam output otorisasi Lambda. Untuk mempelajari selengkapnya, lihat [Keluaran dari otorisasi API Gateway Lambda](api-gateway-lambda-authorizer-output.md).

## Gunakan kasus untuk variabel tahap
<a name="use-cases"></a>

Berikut ini adalah kasus penggunaan untuk variabel tahap Anda.

**Tentukan titik akhir backend yang berbeda**  
API Anda dapat meneruskan `GET` permintaan sebagai proxy HTTP ke host web backend. Anda dapat menggunakan variabel stage sehingga ketika pemanggil API memanggil titik akhir produksi Anda, API Gateway akan memanggil. `example.com` Kemudian, ketika pemanggil API memanggil tahap beta, API Gateway memanggil host web yang berbeda, seperti. `beta.example.com` Demikian pula, variabel tahap dapat digunakan untuk menentukan nama AWS Lambda fungsi yang berbeda untuk setiap tahap di API Anda. Anda tidak dapat menggunakan variabel tahap untuk menetapkan titik akhir integrasi yang berbeda, seperti mengarahkan `GET` permintaan ke integrasi proxy HTTP dalam satu tahap dan integrasi proxy Lambda di tahap lain.  
Saat menentukan nama fungsi Lambda sebagai nilai variabel tahap, Anda harus mengonfigurasi izin pada fungsi Lambda secara manual. Saat Anda menentukan fungsi Lambda di konsol API Gateway, sebuah AWS CLI perintah akan muncul untuk mengonfigurasi izin yang tepat. Anda juga dapat menggunakan AWS CLI perintah berikut untuk melakukan ini.  

```
aws lambda add-permission --function-name "arn:aws:lambda:us-east-2:123456789012:function:my-function" --source-arn "arn:aws:execute-api:us-east-2:123456789012:api_id/*/HTTP_METHOD/resource" --principal apigateway.amazonaws.com --statement-id apigateway-access --action lambda:InvokeFunction
```

**Lulus informasi menggunakan templat pemetaan**  
Anda dapat mengakses variabel tahap dalam template pemetaan, atau meneruskan parameter konfigurasi ke backend AWS Lambda atau HTTP Anda. Misalnya, Anda mungkin ingin menggunakan kembali fungsi Lambda yang sama untuk beberapa tahap di API Anda, tetapi fungsi tersebut harus membaca data dari tabel Amazon DynamoDB yang berbeda tergantung pada tahapannya. Dalam template pemetaan yang menghasilkan permintaan untuk fungsi Lambda, Anda dapat menggunakan variabel tahap untuk meneruskan nama tabel ke Lambda.

Untuk menggunakan variabel tahap, pertama-tama Anda mengkonfigurasi variabel tahap, dan kemudian Anda menetapkannya nilai. Misalnya, untuk menyesuaikan titik akhir integrasi HTTP, pertama buat variabel `url` stage, lalu di permintaan integrasi API Anda, masukkan nilai variabel stage,**http://\$1\$1stageVariables.url\$1**. Nilai ini memberi tahu API Gateway untuk mengganti variabel stage Anda `${}` saat runtime, tergantung pada tahap mana API Anda berjalan. Untuk informasi selengkapnya, lihat [Siapkan variabel tahap untuk REST APIs di API Gateway](how-to-set-stage-variables-aws-console.md). 

# 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."
      ```

# Referensi variabel tahap API Gateway untuk REST APIs di API Gateway
<a name="aws-api-gateway-stage-variables-reference"></a>

 Anda dapat menggunakan variabel tahap API Gateway dalam kasus berikut.

## Ekspresi pemetaan parameter
<a name="stage-variables-in-parameter-mapping-expressions"></a>

Variabel tahap dapat digunakan dalam ekspresi pemetaan parameter untuk permintaan metode API atau parameter header respons, tanpa substitusi sebagian. Dalam contoh berikut, variabel tahap direferensikan tanpa `$` dan `{...}` melampirkan. 
+ `stageVariables.<variable_name>`

## Templat pemetaan
<a name="stage-variables-in-mapping-templates"></a>

 Variabel tahap dapat digunakan di mana saja dalam template pemetaan, seperti yang ditunjukkan pada contoh berikut. 
+  `{ "name" : "$stageVariables.<variable_name>"}`
+ `{ "name" : "${stageVariables.<variable_name>}"}`

## Integrasi HTTP URIs
<a name="stage-variables-in-integration-HTTP-uris"></a>

Variabel tahap dapat digunakan sebagai bagian dari URL integrasi HTTP, seperti yang ditunjukkan pada contoh berikut:
+ URI lengkap tanpa protokol — `http://${stageVariables.<variable_name>}`
+ Domain lengkap — `http://${stageVariables.<variable_name>}/resource/operation`
+ Sebuah subdomain — `http://${stageVariables.<variable_name>}.example.com/resource/operation`
+ Sebuah jalan — `http://example.com/${stageVariables.<variable_name>}/bar`
+ Sebuah string kueri - `http://example.com/foo?q=${stageVariables.<variable_name>}` 

## AWS integrasi URIs
<a name="stage-variables-in-integration-aws-uris"></a>

 Variabel tahap dapat digunakan sebagai bagian dari tindakan AWS URI atau komponen jalur, seperti yang ditunjukkan pada contoh berikut.
+ `arn:aws:apigateway:<region>:<service>:${stageVariables.<variable_name>}`

## AWS integrasi URIs (fungsi Lambda)
<a name="stage-variables-in-integration-lambda-functions"></a>

 Variabel tahap dapat digunakan sebagai pengganti nama fungsi Lambda, atau versi/alias, seperti yang ditunjukkan pada contoh berikut. 
+ `arn:aws:apigateway:<region>:lambda:path/2015-03-31/functions/arn:aws:lambda:<region>:<account_id>:function:${stageVariables.<function_variable_name>}/invocations`
+ `arn:aws:apigateway:<region>:lambda:path/2015-03-31/functions/arn:aws:lambda:<region>:<account_id>:function:<function_name>:${stageVariables.<version_variable_name>}/invocations`

**catatan**  
Untuk menggunakan variabel stage untuk fungsi Lambda, fungsi harus berada di akun yang sama dengan API. Variabel tahap tidak mendukung fungsi Lambda lintas akun.

## Kumpulan pengguna Amazon Cognito
<a name="stage-variables-in-integration-lambda-functions"></a>

Variabel tahap dapat digunakan sebagai pengganti kumpulan pengguna Amazon Cognito untuk otorisasi. `COGNITO_USER_POOLS`
+ `arn:aws:cognito-idp:<region>:<account_id>:userpool/${stageVariables.<variable_name>}`

## AWS kredensi integrasi
<a name="stage-variables-in-integration-aws-credentials"></a>

 Variabel tahap dapat digunakan sebagai bagian dari ARN kredensi AWS pengguna/peran, seperti yang ditunjukkan pada contoh berikut. 
+  `arn:aws:iam::<account_id>:${stageVariables.<variable_name>}` 