

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

# Pilih tutorial AWS Lambda integrasi
<a name="getting-started-with-lambda-integration"></a>

 Untuk membangun API dengan integrasi Lambda, Anda dapat menggunakan integrasi proxy Lambda atau integrasi non-proxy Lambda. 

Dalam integrasi proxy Lambda, input ke fungsi Lambda dapat dinyatakan sebagai kombinasi header permintaan, variabel jalur, parameter string kueri, isi, dan data konfigurasi API. Anda hanya perlu memilih fungsi Lambda. API Gateway mengonfigurasi permintaan integrasi dan respons integrasi untuk Anda. Setelah disiapkan, metode API Anda dapat berkembang tanpa mengubah pengaturan yang ada. Ini dimungkinkan karena fungsi backend Lambda mem-parsing data permintaan yang masuk dan merespons klien.

Dalam integrasi non-proxy Lambda, Anda harus memastikan bahwa input ke fungsi Lambda disediakan sebagai payload permintaan integrasi. Anda harus memetakan data input apa pun yang diberikan klien sebagai parameter permintaan ke dalam badan permintaan integrasi yang tepat. Anda mungkin juga perlu menerjemahkan badan permintaan yang disediakan klien ke dalam format yang dikenali oleh fungsi Lambda. 

Baik dalam proxy Lambda atau integrasi non-proxy Lambda, Anda dapat menggunakan fungsi Lambda di akun yang berbeda dari akun tempat Anda membuat API.

**Topics**
+ [Tutorial: Buat REST API dengan integrasi proxy Lambda](api-gateway-create-api-as-simple-proxy-for-lambda.md)
+ [Tutorial: Buat REST API dengan integrasi non-proxy Lambda](getting-started-lambda-non-proxy-integration.md)
+ [Tutorial: Buat REST API dengan integrasi proxy Lambda lintas akun](apigateway-cross-account-lambda-integrations.md)

# Tutorial: Buat REST API dengan integrasi proxy Lambda
<a name="api-gateway-create-api-as-simple-proxy-for-lambda"></a>

[Integrasi proxy Lambda adalah jenis integrasi](set-up-lambda-proxy-integrations.md) API Gateway API yang ringan dan fleksibel yang memungkinkan Anda mengintegrasikan metode API — atau seluruh API — dengan fungsi Lambda. Fungsi Lambda dapat ditulis dalam [bahasa apa pun yang didukung Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html). Karena ini adalah integrasi proxy, Anda dapat mengubah implementasi fungsi Lambda kapan saja tanpa perlu menerapkan ulang API Anda.

Dalam tutorial ini, Anda akan melakukan hal-hal berikut:
+ Buat “Halo, Dunia\$1” Lambda berfungsi sebagai backend untuk API.
+ Buat dan uji “Halo, Dunia\$1” API dengan integrasi proxy Lambda.

**Topics**
+ [Buat “Halo, Dunia\$1” Fungsi Lambda](#api-gateway-proxy-integration-create-lambda-backend)
+ [Buat “Halo, Dunia\$1” API](#api-gateway-create-api-as-simple-proxy-for-lambda-build)
+ [Menerapkan dan menguji API](#api-gateway-create-api-as-simple-proxy-for-lambda-test)

## Buat “Halo, Dunia\$1” Fungsi Lambda
<a name="api-gateway-proxy-integration-create-lambda-backend"></a>

**Untuk membuat “Halo, Dunia\$1” Fungsi Lambda di konsol Lambda**

1. [Masuk ke konsol Lambda di https://console.aws.amazon.com /lambda.](https://console.aws.amazon.com/lambda)

1. Pada bilah AWS navigasi, pilih file [Wilayah AWS](https://docs.aws.amazon.com/general/latest/gr/apigateway.html).
**catatan**  
Perhatikan wilayah tempat Anda membuat fungsi Lambda. Anda akan membutuhkannya saat membuat API.

1. Pilih **Fungsi** di panel navigasi.

1. Pilih **Buat fungsi**.

1. Pilih **Penulis dari scratch**.

1. Di bagian **Informasi dasar**, lakukan hal berikut:

   1. Dalam **nama Fungsi**, masukkan**GetStartedLambdaProxyIntegration**.

   1. Untuk **Runtime, pilih runtime** **Node.js** atau **Python** terbaru yang didukung.

   1. Untuk **Arsitektur**, pertahankan pengaturan default.

   1. (Opsional) Di bagian **Izin**, luaskan **Ubah peran eksekusi default**. Untuk daftar dropdown **peran eksekusi**, pilih **Buat peran baru dari templat AWS kebijakan**.

   1. Dalam **nama Peran**, masukkan**GetStartedLambdaBasicExecutionRole**.

   1. Biarkan bidang **Policy templates** kosong.

   1. Pilih **Buat fungsi**.

1. Di bawah **Kode fungsi**, dalam editor kode inline, kode copy/paste berikut:

------
#### [ Node.js ]

   ```
   export const handler = async(event, context) => {
       console.log('Received event:', JSON.stringify(event, null, 2));
       var res ={
           "statusCode": 200,
           "headers": {
               "Content-Type": "*/*"
           }
       };
       var greeter = 'World';
       if (event.greeter && event.greeter!=="") {
           greeter =  event.greeter;
       } else if (event.body && event.body !== "") {
           var body = JSON.parse(event.body);
           if (body.greeter && body.greeter !== "") {
               greeter = body.greeter;
           }
       } else if (event.queryStringParameters && event.queryStringParameters.greeter && event.queryStringParameters.greeter !== "") {
           greeter = event.queryStringParameters.greeter;
       } else if (event.multiValueHeaders && event.multiValueHeaders.greeter && event.multiValueHeaders.greeter != "") {
           greeter = event.multiValueHeaders.greeter.join(" and ");
       } else if (event.headers && event.headers.greeter && event.headers.greeter != "") {
           greeter = event.headers.greeter;
       } 
       res.body = "Hello, " + greeter + "!";
       return res
   };
   ```

------
#### [ Python ]

   ```
   import json
   
   
   def lambda_handler(event, context):
       print(event)
   
       greeter = 'World'
   
       try:
           if (event['queryStringParameters']) and (event['queryStringParameters']['greeter']) and (
                   event['queryStringParameters']['greeter'] is not None):
               greeter = event['queryStringParameters']['greeter']
       except KeyError:
           print('No greeter')
   
       try:
           if (event['multiValueHeaders']) and (event['multiValueHeaders']['greeter']) and (
                   event['multiValueHeaders']['greeter'] is not None):
               greeter = " and ".join(event['multiValueHeaders']['greeter'])
       except KeyError:
           print('No greeter')
   
       try:
           if (event['headers']) and (event['headers']['greeter']) and (
                   event['headers']['greeter'] is not None):
               greeter = event['headers']['greeter']
       except KeyError:
           print('No greeter')
   
       if (event['body']) and (event['body'] is not None):
           body = json.loads(event['body'])
           try:
               if (body['greeter']) and (body['greeter'] is not None):
                   greeter = body['greeter']
           except KeyError:
               print('No greeter')
   
       res = {
           "statusCode": 200,
           "headers": {
               "Content-Type": "*/*"
           },
           "body": "Hello, " + greeter + "!"
       }
   
       return res
   ```

------

1. Pilih **Deploy**.

## Buat “Halo, Dunia\$1” API
<a name="api-gateway-create-api-as-simple-proxy-for-lambda-build"></a>

Sekarang buat API untuk “Hello, World\$1” Lambda berfungsi dengan menggunakan konsol API Gateway.

**Untuk membuat “Halo, Dunia\$1” API**

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

1. Jika ini adalah pertama kalinya Anda menggunakan API Gateway, Anda akan melihat halaman yang memperkenalkan Anda ke fitur layanan. Di bawah **REST API**, pilih **Build**. **Saat munculan **Create Example API** muncul, pilih OK.**

   Jika ini bukan pertama kalinya Anda menggunakan API Gateway, pilih **Buat API**. Di bawah **REST API**, pilih **Build**.

1.  Untuk **nama API**, masukkan**LambdaProxyAPI**.

1. (Opsional) Untuk **Deskripsi**, masukkan deskripsi.

1. Tetap tetapkan **jenis endpoint API** ke **Regional**.

1. Untuk **jenis alamat IP**, pilih **IPv4**.

1. Pilih **Buat API**.

Setelah membuat API, Anda membuat sumber daya. Biasanya, sumber daya API diatur dalam pohon sumber daya sesuai dengan logika aplikasi. Untuk contoh ini, Anda membuat sumber daya **/helloworld**. 

**Untuk membuat sumber daya**

1. Pilih **Buat sumber daya**.

1. Matikan **sumber daya Proxy**. 

1. Pertahankan **jalur Sumber Daya** sebagai`/`.

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

1. Tetap nonaktifkan **CORS (Cross Origin Resource Sharing)**.

1. Pilih **Buat sumber daya**.

 Dalam integrasi proxy, seluruh permintaan dikirim ke fungsi Lambda backend apa adanya, melalui metode catch-all `ANY` yang mewakili metode HTTP apa pun. Metode HTTP sebenarnya ditentukan oleh klien pada waktu berjalan. `ANY`Metode ini memungkinkan Anda untuk menggunakan penyiapan metode API tunggal untuk semua metode HTTP yang didukung:`DELETE`,`GET`,`HEAD`,`OPTIONS`,`PATCH`,`POST`, dan`PUT`.

**Untuk membuat `ANY` metode**

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

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

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

1. Aktifkan **integrasi proxy Lambda**.

1. Untuk **fungsi Lambda**, pilih Wilayah AWS tempat Anda membuat fungsi Lambda Anda, lalu masukkan nama fungsi.

1. Untuk menggunakan nilai batas waktu default 29 detik, tetap aktifkan **batas waktu default**. Untuk menetapkan batas waktu kustom, pilih Batas **waktu default** dan masukkan nilai batas waktu antara `50` dan milidetik. `29000`

1. Pilih **metode Buat**.

## Menerapkan dan menguji API
<a name="api-gateway-create-api-as-simple-proxy-for-lambda-test"></a>

**Untuk men-deploy API Anda**

1. Pilih **Deploy API**.

1. Untuk **Stage**, pilih **New stage**.

1. Untuk **nama Panggung**, masukkan**test**.

1. (Opsional) Untuk **Deskripsi**, masukkan deskripsi.

1. Pilih **Deploy**.

1. Di bawah **Detail tahap**, pilih ikon salin untuk menyalin URL pemanggilan API Anda.

### Gunakan browser dan cURL untuk menguji API dengan integrasi proxy Lambda
<a name="api-gateway-create-api-as-simple-proxy-for-lambda-test-curl"></a>

Anda dapat menggunakan browser atau [cURL](https://curl.se/) untuk menguji API Anda.

Untuk menguji `GET` permintaan hanya menggunakan parameter string kueri, Anda dapat memasukkan URL untuk `helloworld` sumber daya API ke dalam bilah alamat browser. 

Untuk membuat URL sumber daya API, tambahkan `helloworld` sumber daya `helloworld` dan parameter `?greeter=John` string kueri ke URL pemanggilan Anda. URL Anda akan terlihat seperti berikut ini.

```
https://r275xc9bmd.execute-api.us-east-1.amazonaws.com/test/helloworld?greeter=John
```

Untuk metode lain, Anda harus menggunakan utilitas pengujian REST API yang lebih canggih, seperti [POSTMAN](https://www.postman.com/) atau [cURL](https://curl.se/). Tutorial ini menggunakan cURL. Contoh perintah cURL di bawah ini mengasumsikan bahwa cURL diinstal pada komputer Anda.

**Untuk menguji API yang Anda gunakan menggunakan cURL:**

1. Buka jendela terminal.

1. Salin perintah cURL berikut dan tempel ke jendela terminal, dan ganti URL pemanggilan dengan yang Anda salin di langkah sebelumnya dan tambahkan **/helloworld** ke akhir URL.
**catatan**  
Jika Anda menjalankan perintah di Windows, gunakan sintaks ini sebagai gantinya:  

   ```
   curl -v -X POST "https://r275xc9bmd.execute-api.us-east-1.amazonaws.com/test/helloworld" -H "content-type: application/json" -d "{ \"greeter\": \"John\" }"
   ```

   1. Untuk memanggil API dengan parameter string kueri`?greeter=John`:

      ```
      curl -X GET 'https://r275xc9bmd.execute-api.us-east-1.amazonaws.com/test/helloworld?greeter=John'
      ```

   1. Untuk memanggil API dengan parameter header`greeter:John`:

      ```
      curl -X GET https://r275xc9bmd.execute-api.us-east-1.amazonaws.com/test/helloworld \
        -H 'content-type: application/json' \
        -H 'greeter: John'
      ```

   1. Untuk memanggil API dengan badan`{"greeter":"John"}`:

      ```
      curl -X POST https://r275xc9bmd.execute-api.us-east-1.amazonaws.com/test/helloworld \
        -H 'content-type: application/json' \
        -d '{ "greeter": "John" }'
      ```

   Dalam semua kasus, outputnya adalah respons 200 dengan badan respons berikut:

   ```
   Hello, John!
   ```

# Tutorial: Buat REST API dengan integrasi non-proxy Lambda
<a name="getting-started-lambda-non-proxy-integration"></a>

Dalam panduan ini, kami menggunakan konsol API Gateway untuk membangun API yang memungkinkan klien memanggil fungsi Lambda melalui integrasi non-proxy Lambda (juga dikenal sebagai integrasi khusus). Untuk informasi selengkapnya tentang AWS Lambda dan fungsi Lambda, lihat Panduan [AWS Lambda Pengembang](https://docs.aws.amazon.com/lambda/latest/dg/). 

Untuk memfasilitasi pembelajaran, kami memilih fungsi Lambda sederhana dengan pengaturan API minimal untuk memandu Anda melalui langkah-langkah membangun API Gateway API dengan integrasi kustom Lambda. Bila perlu, kami menjelaskan beberapa logika. Untuk contoh lebih rinci tentang integrasi kustom Lambda, lihat. [Tutorial: Buat REST API kalkulator dengan dua integrasi AWS layanan dan satu integrasi non-proxy Lambda](integrating-api-with-aws-services-lambda.md) 

Sebelum membuat API, siapkan backend Lambda dengan membuat fungsi Lambda di, dijelaskan selanjutnya. AWS Lambda

**Topics**
+ [Buat fungsi Lambda untuk integrasi non-proxy Lambda](#getting-started-new-lambda)
+ [Buat API dengan integrasi non-proxy Lambda](#getting-started-new-api)
+ [Uji pemanggilan metode API](#getting-started-new-get)
+ [Terapkan API](#getting-started-deploy-api)
+ [Uji API dalam tahap penerapan](#getting-started-test)
+ [Bersihkan](#getting-started-clean-up)

## Buat fungsi Lambda untuk integrasi non-proxy Lambda
<a name="getting-started-new-lambda"></a>

**catatan**  
Membuat fungsi Lambda dapat mengakibatkan biaya ke akun Anda AWS .

 Pada langkah ini, Anda membuat “Halo, Dunia\$1” -seperti fungsi Lambda untuk integrasi kustom Lambda. Sepanjang panduan ini, fungsi ini disebut. `GetStartedLambdaIntegration`

 Implementasi fungsi `GetStartedLambdaIntegration` Lambda ini adalah sebagai berikut: 

------
#### [ Node.js ]

```
'use strict';
var days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];            
var times = ['morning', 'afternoon', 'evening', 'night', 'day'];

export const handler = async(event) => {
  console.log(event);
  // Parse the input for the name, city, time and day property values
  let name = event.name === null || event.name === undefined || event.name === "" ? 'you' : event.name;
  let city = event.city === undefined ? 'World' : event.city;
  let time = times.indexOf(event.time)<0 ? 'day' : event.time;
  let day = days.indexOf(event.day)<0 ? null : event.day;

  // Generate a greeting
  let greeting = 'Good ' + time + ', ' + name + ' of ' + city + '. ';
  if (day) greeting += 'Happy ' + day + '!';
  
  // Log the greeting to CloudWatch
  console.log('Hello: ', greeting);
  
  // Return a greeting to the caller
  return {"greeting": greeting}
};
```

------
#### [ Python ]

```
import json

days = {
    'Sunday',
    'Monday',
    'Tuesday',
    'Wednesday',
    'Thursday',
    'Friday',
    'Saturday'}
times = {'morning', 'afternoon', 'evening', 'night', 'day'}


def lambda_handler(event, context):
    print(event)
    # parse the input for the name, city, time, and day property values
    name = event.get("name") or 'you'
    city = event.get("city") or 'World'
    try:
        if event['time'] in times:
            time = event['time']
        else:
            time = 'day'
    except KeyError:
        time = 'day'
    try:
        if event['day'] in days:
            day = event['day']
        else:
            day = ''
    except KeyError:
        day = ''
    # Generate a greeting
    greeting = 'Good ' + time + ', ' + name + ' of ' + \
        city + '.' + ['', ' Happy ' + day + '!'][day != '']
    # Log the greeting to CloudWatch
    print(greeting)

    # Return a greeting to the caller
    return {"greeting": greeting}
```

------

Untuk integrasi kustom Lambda, API Gateway meneruskan input ke fungsi Lambda dari klien sebagai badan permintaan integrasi. `event`Objek dari fungsi handler Lambda adalah input. 

Fungsi Lambda kami sederhana. Ini mem-parsing `event` objek input untuk`name`,, `city``time`, dan `day` properti. Kemudian mengembalikan salam, sebagai objek JSON dari`{"message":greeting}`, ke penelepon. Pesannya ada dalam `"Good [morning|afternoon|day], [name|you] in [city|World]. Happy day!"` pola. Diasumsikan bahwa input ke fungsi Lambda adalah dari objek JSON berikut: 

```
{
  "city": "...",
  "time": "...",
  "day": "...",
  "name" : "..."
}
```

Lihat informasi selengkapnya di [Panduan Developer AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html). 

Selain itu, fungsi mencatat eksekusinya ke Amazon CloudWatch dengan menelepon`console.log(...)`. Ini berguna untuk melacak panggilan saat men-debug fungsi. Untuk mengizinkan `GetStartedLambdaIntegration` fungsi mencatat panggilan, tetapkan peran IAM dengan kebijakan yang sesuai untuk fungsi Lambda untuk membuat CloudWatch aliran dan menambahkan entri log ke aliran. Konsol Lambda memandu Anda untuk membuat peran dan kebijakan IAM yang diperlukan.

Jika Anda menyiapkan API tanpa menggunakan konsol API Gateway, seperti saat [mengimpor API dari file OpenAPI](https://github.com/aws-samples/api-gateway-secure-pet-store/blob/master/src/main/resources/swagger.yaml#L39), Anda harus secara eksplisit membuat, jika perlu, dan menyiapkan peran dan kebijakan pemanggilan untuk API Gateway untuk menjalankan fungsi Lambda. Untuk informasi selengkapnya tentang cara menyiapkan peran pemanggilan dan eksekusi Lambda untuk API Gateway API, lihat. [Kontrol akses ke REST API dengan izin IAM](permissions.md) 

 Dibandingkan dengan`GetStartedLambdaProxyIntegration`, fungsi Lambda untuk integrasi proxy Lambda, fungsi Lambda untuk integrasi kustom `GetStartedLambdaIntegration` Lambda hanya mengambil masukan dari badan permintaan integrasi API Gateway API. Fungsi ini dapat mengembalikan output dari setiap objek JSON, string, angka, Boolean, atau bahkan blob biner. Fungsi Lambda untuk integrasi proxy Lambda, sebaliknya, dapat mengambil input dari data permintaan apa pun, tetapi harus mengembalikan output dari objek JSON tertentu. `GetStartedLambdaIntegration`Fungsi untuk integrasi kustom Lambda dapat memiliki parameter permintaan API sebagai input, asalkan API Gateway memetakan parameter permintaan API yang diperlukan ke badan permintaan integrasi sebelum meneruskan permintaan klien ke backend. Agar hal ini terjadi, pengembang API harus membuat template pemetaan dan mengonfigurasinya pada metode API saat membuat API. 

Sekarang, buat fungsi `GetStartedLambdaIntegration` Lambda. 

**Untuk membuat fungsi `GetStartedLambdaIntegration` Lambda untuk integrasi kustom Lambda**

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

1. Lakukan salah satu tindakan berikut:
   + Jika halaman selamat datang muncul, pilih **Mulai Sekarang** dan kemudian pilih **Buat fungsi**.
   + Jika halaman daftar **Lambda > Fungsi** muncul, pilih **Buat** fungsi.

1. Pilih **Tulis dari awal**. 

1. Di panel **Penulis dari awal**, lakukan hal berikut:

   1. Untuk **Nama**, masukkan **GetStartedLambdaIntegration** sebagai nama fungsi Lambda.

   1. Untuk **Runtime, pilih runtime** **Node.js** atau **Python** terbaru yang didukung.

   1. Untuk **Arsitektur**, pertahankan pengaturan default.

   1. (Opsional) Di bagian **Izin**, luaskan **Ubah peran eksekusi default**. Untuk daftar dropdown **peran eksekusi**, pilih **Buat peran baru dari templat AWS kebijakan**.

   1. Untuk **nama Peran**, masukkan nama untuk peran Anda (misalnya,**GetStartedLambdaIntegrationRole**).

   1. Untuk **templat Kebijakan**, pilih **Izin microservice sederhana**.

   1. Pilih **Buat fungsi**.

1. Di panel **Configure function**, di bawah **Kode fungsi** lakukan hal berikut:

   1. Salin kode fungsi Lambda yang tercantum di awal bagian ini dan tempel di editor kode sebaris.

   1. Tinggalkan pilihan default untuk semua bidang lain di bagian ini.

   1. Pilih **Deploy**.

1. Untuk menguji fungsi yang baru dibuat, pilih tab **Uji**.

   1. Untuk **Nama peristiwa**, masukkan **HelloWorldTest**. 

   1. Untuk **Event JSON**, ganti kode default dengan yang berikut ini.

      ```
      {
        "name": "Jonny",
        "city": "Seattle",
        "time": "morning",
        "day": "Wednesday"
      }
      ```

   1.  Pilih **Uji** untuk menjalankan fungsi. **Hasil eksekusi: bagian berhasil** ditampilkan. Perluas **Detail** dan Anda melihat output berikut.

      ```
      {
          "greeting": "Good morning, Jonny of Seattle. Happy Wednesday!"
      }
      ```

      Outputnya juga ditulis ke CloudWatch Log. 

 Sebagai latihan sampingan, Anda dapat menggunakan konsol IAM untuk melihat peran IAM (`GetStartedLambdaIntegrationRole`) yang dibuat sebagai bagian dari pembuatan fungsi Lambda. Terlampir pada peran IAM ini adalah dua kebijakan inline. Satu menetapkan izin paling dasar untuk eksekusi Lambda. Ini memungkinkan memanggil CloudWatch sumber daya apa pun dari akun Anda di wilayah tempat fungsi Lambda dibuat. CloudWatch `CreateLogGroup` Kebijakan ini juga memungkinkan pembuatan CloudWatch stream dan peristiwa logging untuk fungsi `GetStartedLambdaIntegration` Lambda. 

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "logs:CreateLogGroup",
            "Resource": "arn:aws:logs:us-east-1:111111111111:*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": [
                "arn:aws:logs:us-east-1:111111111111:log-group:/aws/lambda/GetStartedLambdaIntegration:*"
            ]
        }
    ]
}
```

------

Dokumen kebijakan lainnya berlaku untuk memanggil AWS layanan lain yang tidak digunakan dalam contoh ini. Anda dapat melewatkannya untuk saat ini. 

 Terkait dengan peran IAM adalah entitas tepercaya, yaitu`lambda.amazonaws.com`. Inilah hubungan kepercayaannya: 

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------

 Kombinasi hubungan kepercayaan ini dan kebijakan sebaris memungkinkan fungsi Lambda memanggil fungsi untuk mencatat peristiwa ke `console.log()` Log. CloudWatch 

## Buat API dengan integrasi non-proxy Lambda
<a name="getting-started-new-api"></a>

 Dengan fungsi Lambda (`GetStartedLambdaIntegration`) yang dibuat dan diuji, Anda siap mengekspos fungsi tersebut melalui API Gateway API. Untuk tujuan ilustrasi, kami mengekspos fungsi Lambda dengan metode HTTP generik. Kami menggunakan badan permintaan, variabel jalur URL, string kueri, dan header untuk menerima data input yang diperlukan dari klien. Kami mengaktifkan validator permintaan API Gateway untuk API untuk memastikan bahwa semua data yang diperlukan didefinisikan dan ditentukan dengan benar. Kami mengonfigurasi template pemetaan untuk API Gateway untuk mengubah data permintaan yang disediakan klien menjadi format yang valid seperti yang dipersyaratkan oleh fungsi Lambda backend.

**Untuk membuat API dengan integrasi non-proxy Lambda**

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

1. Jika ini adalah pertama kalinya Anda menggunakan API Gateway, Anda akan melihat halaman yang memperkenalkan Anda ke fitur layanan. Di bawah **REST API**, pilih **Build**. **Saat munculan **Create Example API** muncul, pilih OK.**

   Jika ini bukan pertama kalinya Anda menggunakan API Gateway, pilih **Buat API**. Di bawah **REST API**, pilih **Build**.

1.  Untuk **nama API**, masukkan**LambdaNonProxyAPI**.

1. (Opsional) Untuk **Deskripsi**, masukkan deskripsi.

1. Tetap tetapkan **jenis endpoint API** ke **Regional**.

1. Untuk **jenis alamat IP**, pilih **IPv4**.

1. Pilih **Buat API**.

Setelah membuat API Anda, Anda membuat sumber daya**/\$1city\$1**. Ini adalah contoh sumber daya dengan variabel jalur yang mengambil masukan dari klien. Kemudian, Anda memetakan variabel jalur ini ke input fungsi Lambda menggunakan template pemetaan.

**Untuk membuat sumber daya**

1. Pilih **Buat sumber daya**.

1. Matikan **sumber daya Proxy**. 

1. Pertahankan **jalur Sumber Daya** sebagai`/`.

1. Untuk **Nama sumber daya**, masukkan **\$1city\$1**.

1. Tetap nonaktifkan **CORS (Cross Origin Resource Sharing)**.

1. Pilih **Buat sumber daya**.

Setelah membuat sumber daya**/\$1city\$1** Anda, Anda membuat `ANY` metode. Kata kerja `ANY` HTTP adalah placeholder untuk metode HTTP yang valid yang klien kirimkan pada waktu berjalan. Contoh ini menunjukkan bahwa `ANY` metode dapat digunakan untuk integrasi kustom Lambda serta untuk integrasi proxy Lambda.

**Untuk membuat `ANY` metode**

1. Pilih sumber daya**/\$1city\$1**, lalu pilih **Create method**.

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

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

1. Matikan **integrasi proxy Lambda**.

1. Untuk **fungsi Lambda**, pilih Wilayah AWS tempat Anda membuat fungsi Lambda Anda, lalu masukkan nama fungsi.

1. Pilih **Pengaturan permintaan Metode.**

   Sekarang, Anda mengaktifkan validator permintaan untuk variabel jalur URL, parameter string kueri, dan header untuk memastikan bahwa semua data yang diperlukan ditentukan. Untuk contoh ini, Anda membuat parameter string `time` kueri dan `day` header. 

1. Untuk **validator Permintaan**, pilih **Validasi parameter string kueri** dan header.

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

   1. Pilih **Tambahkan string kueri**.

   1. Untuk **Nama**, masukkan **time**.

   1. Aktifkan **Diperlukan**.

   1. Tetap **caching** dimatikan. 

1. Pilih **header permintaan HTTP** dan lakukan hal berikut: 

   1. Pilih **Tambahkan header**.

   1. Untuk **Nama**, masukkan **day**.

   1. Aktifkan **Diperlukan**.

   1. Tetap **caching** dimatikan. 

1. Pilih **metode Buat**.

Setelah mengaktifkan validator permintaan, Anda mengonfigurasi permintaan integrasi untuk `ANY` metode dengan menambahkan templat pemetaan tubuh untuk mengubah permintaan yang masuk menjadi payload JSON, seperti yang dipersyaratkan oleh fungsi Lambda backend. 

**Untuk mengkonfigurasi permintaan integrasi**

1. Pada tab **Permintaan integrasi**, di bawah **pengaturan permintaan Integrasi**, pilih **Edit**.

1. Untuk **Request body passthrough**, pilih **Bila tidak ada templat yang ditentukan (disarankan)**.

1. Pilih **Template pemetaan**.

1. Pilih **Tambahkan templat pemetaan**.

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

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

   ```
   #set($inputRoot = $input.path('$'))
   {
     "city": "$input.params('city')",
     "time": "$input.params('time')",
     "day":  "$input.params('day')",
     "name": "$inputRoot.callerName"
   }
   ```

1. Pilih **Simpan**.

## Uji pemanggilan metode API
<a name="getting-started-new-get"></a>

 Konsol API Gateway menyediakan fasilitas pengujian bagi Anda untuk menguji pemanggilan API sebelum diterapkan. Anda menggunakan fitur Uji konsol untuk menguji API dengan mengirimkan permintaan berikut: 

```
POST /Seattle?time=morning
day:Wednesday

{
    "callerName": "John"
}
```

 Dalam permintaan pengujian ini, Anda akan mengatur `ANY` ke`POST`, mengatur `{city}` ke`Seattle`, menetapkan `Wednesday` sebagai nilai `day` header, dan menetapkan `"John"` sebagai nilai`callerName`. 

**Untuk menguji `ANY` metode**

1. Pilih tab **Uji**. Anda mungkin perlu memilih tombol panah kanan untuk menampilkan tab.

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

1. Untuk **Path**, di bawah **kota**, masuk**Seattle**.

1. Untuk **string Query**, masukkan**time=morning**.

1. Untuk **Header**, masukkan**day:Wednesday**.

1. Untuk **Badan Permintaan**, masukkan**\$1 "callerName": "John" \$1**.

1. Pilih **Uji**.

Verifikasi bahwa muatan respons yang dikembalikan adalah sebagai berikut:

```
{
  "greeting": "Good morning, John of Seattle. Happy Wednesday!"
}
```

Anda juga dapat melihat log untuk memeriksa bagaimana API Gateway memproses permintaan dan respons.

```
Execution log for request test-request
Thu Aug 31 01:07:25 UTC 2017 : Starting execution for request: test-invoke-request
Thu Aug 31 01:07:25 UTC 2017 : HTTP Method: POST, Resource Path: /Seattle
Thu Aug 31 01:07:25 UTC 2017 : Method request path: {city=Seattle}
Thu Aug 31 01:07:25 UTC 2017 : Method request query string: {time=morning}
Thu Aug 31 01:07:25 UTC 2017 : Method request headers: {day=Wednesday}
Thu Aug 31 01:07:25 UTC 2017 : Method request body before transformations: { "callerName": "John" }
Thu Aug 31 01:07:25 UTC 2017 : Request validation succeeded for content type application/json
Thu Aug 31 01:07:25 UTC 2017 : Endpoint request URI: https://lambda.us-west-2.amazonaws.com/2015-03-31/functions/arn:aws:lambda:us-west-2:123456789012:function:GetStartedLambdaIntegration/invocations
Thu Aug 31 01:07:25 UTC 2017 : Endpoint request headers: {x-amzn-lambda-integration-tag=test-request, Authorization=****************************************************************************************************************************************************************************************************************************************************************************************************************************************338c72, X-Amz-Date=20170831T010725Z, x-amzn-apigateway-api-id=beags1mnid, X-Amz-Source-Arn=arn:aws:execute-api:us-west-2:123456789012:beags1mnid/null/POST/{city}, Accept=application/json, User-Agent=AmazonAPIGateway_beags1mnid, X-Amz-Security-Token=FQoDYXdzELL//////////wEaDMHGzEdEOT/VvGhabiK3AzgKrJw+3zLqJZG4PhOq12K6W21+QotY2rrZyOzqhLoiuRg3CAYNQ2eqgL5D54+63ey9bIdtwHGoyBdq8ecWxJK/YUnT2Rau0L9HCG5p7FC05h3IvwlFfvcidQNXeYvsKJTLXI05/yEnY3ttIAnpNYLOezD9Es8rBfyruHfJfOqextKlsC8DymCcqlGkig8qLKcZ0hWJWVwiPJiFgL7laabXs++ZhCa4hdZo4iqlG729DE4gaV1mJVdoAagIUwLMo+y4NxFDu0r7I0/EO5nYcCrppGVVBYiGk7H4T6sXuhTkbNNqVmXtV3ch5bOlh7 [TRUNCATED]
Thu Aug 31 01:07:25 UTC 2017 : Endpoint request body after transformations: {
  "city": "Seattle",
  "time": "morning",
  "day": "Wednesday",
  "name" : "John"
}
Thu Aug 31 01:07:25 UTC 2017 : Sending request to https://lambda.us-west-2.amazonaws.com/2015-03-31/functions/arn:aws:lambda:us-west-2:123456789012:function:GetStartedLambdaIntegration/invocations
Thu Aug 31 01:07:25 UTC 2017 : Received response. Integration latency: 328 ms
Thu Aug 31 01:07:25 UTC 2017 : Endpoint response body before transformations: {"greeting":"Good morning, John of Seattle. Happy Wednesday!"}
Thu Aug 31 01:07:25 UTC 2017 : Endpoint response headers: {x-amzn-Remapped-Content-Length=0, x-amzn-RequestId=c0475a28-8de8-11e7-8d3f-4183da788f0f, Connection=keep-alive, Content-Length=62, Date=Thu, 31 Aug 2017 01:07:25 GMT, X-Amzn-Trace-Id=root=1-59a7614d-373151b01b0713127e646635;sampled=0, Content-Type=application/json}
Thu Aug 31 01:07:25 UTC 2017 : Method response body after transformations: {"greeting":"Good morning, John of Seattle. Happy Wednesday!"}
Thu Aug 31 01:07:25 UTC 2017 : Method response headers: {X-Amzn-Trace-Id=sampled=0;root=1-59a7614d-373151b01b0713127e646635, Content-Type=application/json}
Thu Aug 31 01:07:25 UTC 2017 : Successfully completed execution
Thu Aug 31 01:07:25 UTC 2017 : Method completed with status: 200
```

Log menampilkan permintaan masuk sebelum pemetaan dan permintaan integrasi setelah pemetaan. Ketika pengujian gagal, log berguna untuk mengevaluasi apakah input asli benar atau template pemetaan berfungsi dengan benar. 

## Terapkan API
<a name="getting-started-deploy-api"></a>

 Doa tes adalah simulasi dan memiliki keterbatasan. Misalnya, ia melewati mekanisme otorisasi apa pun yang diberlakukan pada API. Untuk menguji eksekusi API secara real time, Anda harus menerapkan API terlebih dahulu. Untuk menerapkan API, Anda membuat tahapan untuk membuat snapshot API pada saat itu. Nama stage juga mendefinisikan path dasar setelah nama host default API. Sumber daya root API ditambahkan setelah nama panggung. Saat memodifikasi API, Anda harus menerapkannya kembali ke tahap baru atau yang sudah ada sebelum perubahan diterapkan. 

**Untuk menerapkan API ke panggung**

1. Pilih **Deploy API**.

1. Untuk **Stage**, pilih **New stage**.

1. Untuk **nama Panggung**, masukkan**test**.
**catatan**  
Input harus berupa teks yang dikodekan UTF-8 (yaitu, tidak terlokalisasi).

1. (Opsional) Untuk **Deskripsi**, masukkan deskripsi.

1. Pilih **Deploy**.

Di bawah **Detail tahap**, pilih ikon salin untuk menyalin URL pemanggilan API Anda. Pola umum URL dasar API adalah`https://api-id.region.amazonaws.com/stageName`. Misalnya, URL dasar API (`beags1mnid`) yang dibuat di `us-west-2` wilayah dan diterapkan ke `test` panggung adalah`https://beags1mnid.execute-api.us-west-2.amazonaws.com/test`.

## Uji API dalam tahap penerapan
<a name="getting-started-test"></a>

Ada beberapa cara Anda dapat menguji API yang diterapkan. Untuk permintaan GET yang hanya menggunakan variabel jalur URL atau parameter string kueri, Anda dapat memasukkan URL sumber daya API di browser. Untuk metode lain, Anda harus menggunakan utilitas pengujian REST API yang lebih canggih, seperti [POSTMAN](https://www.postman.com/) atau [cURL](https://curl.se/).

**Untuk menguji API menggunakan cURL**

1. Buka jendela terminal di komputer lokal Anda yang terhubung ke internet.

1. Untuk menguji`POST /Seattle?time=evening`:

   Salin perintah cURL berikut dan tempel ke jendela terminal.

   ```
   curl -v -X POST \
     'https://beags1mnid.execute-api.us-west-2.amazonaws.com/test/Seattle?time=evening' \
     -H 'content-type: application/json' \
     -H 'day: Thursday' \
     -H 'x-amz-docs-region: us-west-2' \
     -d '{
   	"callerName": "John"
   }'
   ```

   Anda harus mendapatkan respons yang sukses dengan muatan berikut:

   ```
   {"greeting":"Good evening, John of Seattle. Happy Thursday!"}
   ```

   Jika Anda `POST` mengubah `PUT` permintaan metode ini, Anda mendapatkan respons yang sama.

## Bersihkan
<a name="getting-started-clean-up"></a>

Jika Anda tidak lagi membutuhkan fungsi Lambda yang Anda buat untuk panduan ini, Anda dapat menghapusnya sekarang. Anda juga dapat menghapus sumber daya IAM yang menyertainya.

**Awas**  
Jika Anda berencana untuk menyelesaikan penelusuran lain dalam seri ini, jangan hapus peran eksekusi Lambda atau peran pemanggilan Lambda. Jika Anda menghapus fungsi Lambda yang Anda APIs andalkan, fungsi tersebut tidak APIs akan berfungsi lagi. Menghapus fungsi Lambda tidak dapat dibatalkan. Jika Anda ingin menggunakan fungsi Lambda lagi, Anda harus membuat ulang fungsi tersebut.  
Jika Anda menghapus sumber daya IAM yang bergantung pada fungsi Lambda, fungsi Lambda itu tidak akan berfungsi lagi, dan APIs semua yang bergantung pada fungsi itu tidak akan berfungsi lagi. Menghapus sumber daya IAM tidak dapat dibatalkan. Jika Anda ingin menggunakan sumber daya IAM lagi, Anda harus membuat ulang sumber daya. 

**Untuk menghapus fungsi Lambda**

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

1. Dari daftar fungsi, pilih **GetStartedLambdaIntegration**, pilih **Tindakan**, lalu pilih **Hapus fungsi**. Saat diminta, pilih **Hapus** lagi.

**Untuk menghapus sumber daya IAM terkait**

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

1. Dari **Detail**, pilih **Peran**.

1. Dari daftar peran, pilih **GetStartedLambdaIntegrationRole**, pilih **Tindakan Peran**, lalu pilih **Hapus Peran**. Ikuti langkah-langkah di konsol untuk menghapus peran.

# Tutorial: Buat REST API dengan integrasi proxy Lambda lintas akun
<a name="apigateway-cross-account-lambda-integrations"></a>

Anda sekarang dapat menggunakan AWS Lambda fungsi dari AWS akun yang berbeda sebagai backend integrasi API Anda. Setiap akun dapat berada di wilayah mana pun di mana Amazon API Gateway tersedia. Ini membuatnya mudah untuk mengelola dan berbagi fungsi backend Lambda secara terpusat di beberapa. APIs

Di bagian ini, kami menunjukkan cara mengonfigurasi integrasi proxy Lambda lintas akun menggunakan konsol Amazon API Gateway.

## Buat API untuk integrasi Lambda lintas akun API Gateway
<a name="apigateway-cross-account-lambda-integrations-create-api"></a>

**Untuk membuat API**

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

1. Jika ini adalah pertama kalinya Anda menggunakan API Gateway, Anda akan melihat halaman yang memperkenalkan Anda ke fitur layanan. Di bawah **REST API**, pilih **Build**. **Saat munculan **Create Example API** muncul, pilih OK.**

   Jika ini bukan pertama kalinya Anda menggunakan API Gateway, pilih **Buat API**. Di bawah **REST API**, pilih **Build**.

1.  Untuk **nama API**, masukkan**CrossAccountLambdaAPI**.

1. (Opsional) Untuk **Deskripsi**, masukkan deskripsi.

1. Tetap tetapkan **jenis endpoint API** ke **Regional**.

1. Untuk **jenis alamat IP**, pilih **IPv4**.

1. Pilih **Buat API**.

## Buat fungsi integrasi Lambda di akun lain
<a name="apigateway-cross-account-lambda-integrations-create-lambda-function"></a>

Sekarang Anda akan membuat fungsi Lambda di akun yang berbeda dari yang Anda buat contoh API.

**Membuat fungsi Lambda di akun lain**

1. Masuk ke konsol Lambda di akun yang berbeda dari akun tempat Anda membuat API Gateway API.

1. Pilih **Buat fungsi**.

1. Pilih **Penulis dari scratch**.

1. Di bawah **Tulis dari awal**, lakukan langkah berikut:

   1. Untuk **nama Fungsi**, masukkan nama.

   1. Dari daftar drop-down **Runtime, pilih runtime** Node.js yang didukung.

   1. Untuk **Arsitektur**, pertahankan pengaturan default.

   1. Di bagian **Izin**, perluas **Pilih atau buat peran eksekusi**. Anda dapat membuat peran atau memilih peran yang ada.

   1. Pilih **fungsi Buat** untuk melanjutkan.

1. Gulir ke bawah ke panel **kode Fungsi**.

1. Masukkan implementasi fungsi Node.js dari[Tutorial: Buat REST API dengan integrasi proxy Lambda](api-gateway-create-api-as-simple-proxy-for-lambda.md).

1. Pilih **Deploy**.

1. Perhatikan ARN lengkap untuk fungsi Anda (di sudut kanan atas panel fungsi Lambda). Anda akan membutuhkannya saat membuat integrasi Lambda lintas akun Anda.

## Konfigurasikan integrasi Lambda lintas akun
<a name="apigateway-cross-account-lambda-integrations-create-integration2"></a>

Setelah Anda memiliki fungsi integrasi Lambda di akun yang berbeda, Anda dapat menggunakan konsol API Gateway untuk menambahkannya ke API Anda di akun pertama Anda.

**catatan**  
Jika Anda mengonfigurasi otorisasi lintas wilayah dan lintas akun, `sourceArn` yang ditambahkan ke fungsi target harus menggunakan wilayah fungsi, bukan wilayah API.

Setelah membuat API, Anda membuat sumber daya. Biasanya, sumber daya API diatur dalam pohon sumber daya sesuai dengan logika aplikasi. Untuk contoh ini, Anda membuat sumber daya **/helloworld**. 

**Untuk membuat sumber daya**

1. Pilih **Buat sumber daya**.

1. Matikan **sumber daya Proxy**. 

1. Pertahankan **jalur Sumber Daya** sebagai`/`.

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

1. Tetap nonaktifkan **CORS (Cross Origin Resource Sharing)**.

1. Pilih **Buat sumber daya**.

Setelah Anda membuat sumber daya, Anda membuat `GET` metode. Anda mengintegrasikan `GET` metode dengan fungsi Lambda di akun lain. 

**Untuk membuat `GET` metode**

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

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

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

1. Aktifkan **integrasi proxy Lambda**.

1. Untuk **fungsi Lambda**, masukkan ARN lengkap fungsi Lambda Anda dari Langkah 1. 

   Di konsol Lambda, Anda dapat menemukan ARN untuk fungsi Anda di sudut kanan atas jendela konsol.

1. Saat Anda memasukkan ARN, string `aws lambda add-permission` perintah akan muncul. Kebijakan ini memberikan akses akun pertama Anda ke fungsi Lambda akun kedua Anda. Salin dan tempel string `aws lambda add-permission` perintah ke AWS CLI jendela yang dikonfigurasi untuk akun kedua Anda.

1. Pilih **metode Buat**.

Anda dapat melihat kebijakan terbaru untuk fungsi Anda di konsol Lambda.

**(Opsional) Untuk melihat kebijakan Anda yang diperbarui**

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

1. Pilih fungsi Lambda Anda.

1. Pilih **Izin**.

   Anda akan melihat `Allow` kebijakan dengan `Condition` klausa di mana dalam `AWS:SourceArn` adalah ARN untuk metode API `GET` Anda.