Siapkan permintaan WebSocket API integrasi di API Gateway - APIGerbang Amazon

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

Siapkan permintaan WebSocket API integrasi di API Gateway

Menyiapkan permintaan integrasi melibatkan hal-hal berikut:

  • Memilih kunci rute untuk diintegrasikan ke backend.

  • Menentukan titik akhir backend untuk dipanggil. WebSocket APIsmendukung jenis integrasi berikut:

    • AWS_PROXY

    • AWS

    • HTTP_PROXY

    • HTTP

    • MOCK

    Untuk informasi selengkapnya tentang jenis integrasi, lihat IntegrationTypedi API Gateway V2 RESTAPI.

  • Mengkonfigurasi cara mengubah data permintaan rute, jika perlu, menjadi data permintaan integrasi dengan menentukan satu atau beberapa templat permintaan.

Menyiapkan permintaan WebSocket API integrasi menggunakan konsol API Gateway

Untuk menambahkan permintaan integrasi ke rute dalam WebSocket API menggunakan konsol API Gateway
  1. Masuk ke konsol API Gateway, pilihAPI, dan pilih Rute.

  2. Di bawah Rute, pilih rute.

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

  4. Untuk jenis Integrasi, pilih salah satu dari berikut ini:

    • Pilih fungsi Lambda hanya jika Anda API akan diintegrasikan dengan AWS Lambda fungsi yang telah Anda buat di akun ini atau di akun lain.

      Untuk membuat fungsi Lambda baru di AWS Lambda, untuk menetapkan izin sumber daya pada fungsi Lambda, atau untuk melakukan tindakan layanan Lambda lainnya, pilih Layanan sebagai gantinya.AWS

    • Pilih HTTPapakah Anda API akan terintegrasi dengan HTTP titik akhir yang ada. Untuk informasi selengkapnya, lihat Integrasi HTTP untuk REST API di API Gateway.

    • Pilih Mock jika Anda ingin menghasilkan API respons dari API Gateway secara langsung, tanpa perlu backend integrasi. Untuk informasi selengkapnya, lihat Integrasi tiruan untuk REST API di API Gateway.

    • Pilih AWS layanan jika Anda API akan terintegrasi dengan AWS layanan.

    • Pilih VPCtautan jika Anda API akan menggunakan titik akhir integrasi VpcLink sebagai pribadi. Untuk informasi selengkapnya, lihat Integrasi pribadi untuk REST APIs di API Gateway.

  5. Jika Anda memilih fungsi Lambda, lakukan hal berikut:

    1. Untuk Menggunakan integrasi proxy Lambda, pilih kotak centang jika Anda ingin menggunakan integrasi proxy Lambda atau integrasi proxy Lambda lintas akun.

    2. Untuk fungsi Lambda, tentukan fungsi dengan salah satu cara berikut:

      • Jika fungsi Lambda Anda berada di akun yang sama, masukkan nama fungsi dan kemudian pilih fungsi dari daftar dropdown.

        catatan

        Nama fungsi secara opsional dapat menyertakan alias atau spesifikasi versinya, seperti dalam, HelloWorldHelloWorld:1, atau. HelloWorld:alpha

      • Jika fungsinya ada di akun yang berbeda, masukkan fungsi ARN untuk.

    3. 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

  6. Jika Anda memilih HTTP, ikuti instruksi pada langkah 4 dariMenyiapkan permintaan integrasi API menggunakan konsol API Gateway.

  7. Jika Anda memilih Mock, lanjutkan ke langkah Permintaan Template.

  8. Jika Anda memilih AWS layanan, ikuti instruksi pada langkah 6 dariMenyiapkan permintaan integrasi API menggunakan konsol API Gateway.

  9. Jika Anda memilih VPCtautan, lakukan hal berikut:

    1. Untuk integrasi VPC proxy, pilih kotak centang jika Anda ingin permintaan Anda diproksi ke titik akhir AndaVPCLink.

    2. Untuk HTTPmetode, pilih jenis HTTP metode yang paling cocok dengan metode di HTTP backend.

    3. Dari daftar tarik-turun VPCtautan, pilih tautanVPC. Anda dapat memilih [Use Stage Variables] dan memasukkan ${stageVariables.vpcLinkId} dalam kotak teks di bawah daftar.

      Anda dapat menentukan variabel vpcLinkId tahap setelah menerapkan API ke tahap dan mengatur nilainya ke ID. VpcLink

    4. Untuk Endpoint URL, masukkan HTTP backend yang Anda inginkan untuk digunakan integrasi ini. URL

    5. 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

  10. Pilih Simpan perubahan.

  11. Di bawah templat Permintaan, lakukan hal berikut:

    1. Untuk memasukkan ekspresi pemilihan Template, di bawah Permintaan template, pilih Edit.

    2. Masukkan ekspresi pemilihan Template. Gunakan ekspresi yang dicari API Gateway di payload pesan. Jika ditemukan, itu dievaluasi, dan hasilnya adalah nilai kunci template yang digunakan untuk memilih template pemetaan data yang akan diterapkan ke data dalam payload pesan. Anda membuat template pemetaan data di langkah berikutnya. Pilih Edit untuk menyimpan perubahan Anda.

    3. Pilih Buat template untuk membuat template pemetaan data. Untuk kunci Template, masukkan nilai kunci template yang digunakan untuk memilih template pemetaan data yang akan diterapkan ke data dalam payload pesan. Kemudian, masukkan template pemetaan. Pilih Buat templat.

      Untuk informasi tentang ekspresi pemilihan templat, lihatEkspresi pemilihan template.

Siapkan permintaan integrasi menggunakan AWS CLI

Anda dapat menyiapkan permintaan integrasi untuk rute di a WebSocket API dengan menggunakan AWS CLI as pada contoh berikut, yang membuat integrasi tiruan:

  1. Buat file bernamaintegration-params.json, dengan konten berikut:

    {"PassthroughBehavior": "WHEN_NO_MATCH", "TimeoutInMillis": 29000, "ConnectionType": "INTERNET", "RequestTemplates": {"application/json": "{\"statusCode\":200}"}, "IntegrationType": "MOCK"}
  2. Jalankan perintah create-integration seperti yang ditunjukkan pada contoh berikut:

    aws apigatewayv2 --region us-east-1 create-integration --api-id aabbccddee --cli-input-json file://integration-params.json

Berikut ini adalah contoh output untuk contoh ini:

{ "PassthroughBehavior": "WHEN_NO_MATCH", "TimeoutInMillis": 29000, "ConnectionType": "INTERNET", "IntegrationResponseSelectionExpression": "${response.statuscode}", "RequestTemplates": { "application/json": "{\"statusCode\":200}" }, "IntegrationId": "0abcdef", "IntegrationType": "MOCK" }

Atau, Anda dapat mengatur permintaan integrasi untuk integrasi proxy dengan menggunakan AWS CLI seperti pada contoh berikut:

  1. Buat fungsi Lambda di konsol Lambda dan berikan peran eksekusi Lambda dasar.

  2. Jalankan perintah create-integration seperti pada contoh berikut:

    aws apigatewayv2 create-integration --api-id aabbccddee --integration-type AWS_PROXY --integration-method POST --integration-uri arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:123412341234:function:simpleproxy-echo-e2e/invocations

Berikut ini adalah contoh output untuk contoh ini:

{ "PassthroughBehavior": "WHEN_NO_MATCH", "IntegrationMethod": "POST", "TimeoutInMillis": 29000, "ConnectionType": "INTERNET", "IntegrationUri": "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:123412341234:function:simpleproxy-echo-e2e/invocations", "IntegrationId": "abcdefg", "IntegrationType": "AWS_PROXY" }

Format input fungsi Lambda untuk integrasi proxy untuk WebSocket APIs

Dalam integrasi proxy Lambda, API Gateway memetakan seluruh permintaan klien ke event parameter input fungsi Lambda backend. Contoh berikut menunjukkan struktur peristiwa masukan dari $connect rute dan peristiwa masukan dari $disconnect rute yang dikirim API Gateway ke integrasi proxy Lambda.

Input from the $connect route
{ headers: { Host: 'abcd123.execute-api.us-east-1.amazonaws.com', 'Sec-WebSocket-Extensions': 'permessage-deflate; client_max_window_bits', 'Sec-WebSocket-Key': '...', 'Sec-WebSocket-Version': '13', 'X-Amzn-Trace-Id': '...', 'X-Forwarded-For': '192.0.2.1', 'X-Forwarded-Port': '443', 'X-Forwarded-Proto': 'https' }, multiValueHeaders: { Host: [ 'abcd123.execute-api.us-east-1.amazonaws.com' ], 'Sec-WebSocket-Extensions': [ 'permessage-deflate; client_max_window_bits' ], 'Sec-WebSocket-Key': [ '...' ], 'Sec-WebSocket-Version': [ '13' ], 'X-Amzn-Trace-Id': [ '...' ], 'X-Forwarded-For': [ '192.0.2.1' ], 'X-Forwarded-Port': [ '443' ], 'X-Forwarded-Proto': [ 'https' ] }, requestContext: { routeKey: '$connect', eventType: 'CONNECT', extendedRequestId: 'ABCD1234=', requestTime: '09/Feb/2024:18:11:43 +0000', messageDirection: 'IN', stage: 'prod', connectedAt: 1707502303419, requestTimeEpoch: 1707502303420, identity: { sourceIp: '192.0.2.1' }, requestId: 'ABCD1234=', domainName: 'abcd1234.execute-api.us-east-1.amazonaws.com', connectionId: 'AAAA1234=', apiId: 'abcd1234' }, isBase64Encoded: false }
Input from the $disconnect route
{ headers: { Host: 'abcd1234.execute-api.us-east-1.amazonaws.com', 'x-api-key': '', 'X-Forwarded-For': '', 'x-restapi': '' }, multiValueHeaders: { Host: [ 'abcd1234.execute-api.us-east-1.amazonaws.com' ], 'x-api-key': [ '' ], 'X-Forwarded-For': [ '' ], 'x-restapi': [ '' ] }, requestContext: { routeKey: '$disconnect', disconnectStatusCode: 1005, eventType: 'DISCONNECT', extendedRequestId: 'ABCD1234=', requestTime: '09/Feb/2024:18:23:28 +0000', messageDirection: 'IN', disconnectReason: 'Client-side close frame status not set', stage: 'prod', connectedAt: 1707503007396, requestTimeEpoch: 1707503008941, identity: { sourceIp: '192.0.2.1' }, requestId: 'ABCD1234=', domainName: 'abcd1234.execute-api.us-east-1.amazonaws.com', connectionId: 'AAAA1234=', apiId: 'abcd1234' }, isBase64Encoded: false }