Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Dalam tutorial ini, Anda membuat aplikasi siaran tanpa server dengan file. WebSocket API Klien dapat menerima pesan tanpa harus melakukan polling untuk pembaruan.
Tutorial ini menunjukkan cara menyiarkan pesan ke klien yang terhubung dan menyertakan contoh otorisasi Lambda, integrasi tiruan, dan integrasi non-proxy ke Step Functions.

Setelah membuat sumber daya menggunakan AWS CloudFormation templat, Anda akan menggunakan konsol API Gateway untuk membuat WebSocket API yang terintegrasi dengan AWS sumber daya Anda. Anda akan melampirkan otorisasi Lambda ke Anda API dan membuat integrasi AWS layanan dengan Step Functions untuk memulai eksekusi mesin status. Mesin status Step Functions akan memanggil fungsi Lambda yang mengirim pesan ke semua klien yang terhubung.
Setelah Anda membangunAPI, Anda akan menguji koneksi Anda ke Anda API dan memverifikasi bahwa pesan dikirim dan diterima. Tutorial ini membutuhkan waktu sekitar 45 menit untuk menyelesaikannya.
Topik
Prasyarat
Anda membutuhkan prasyarat berikut:
-
AWS Akun dan AWS Identity and Access Management pengguna dengan akses konsol. Untuk informasi selengkapnya, lihat Siapkan untuk menggunakan API Gateway.
-
wscat
untuk terhubung ke AndaAPI. Untuk informasi selengkapnya, lihat Gunakan wscat untuk terhubung ke WebSocket API dan mengirim pesan ke sana.
Kami menyarankan Anda menyelesaikan tutorial aplikasi WebSocket obrolan sebelum memulai tutorial ini. Untuk menyelesaikan tutorial aplikasi WebSocket obrolan, lihatTutorial: Buat aplikasi WebSocket obrolan dengan WebSocket API, Lambda dan DynamoDB.
Langkah 1: Buat sumber daya
Unduh dan unzip template pembuatan aplikasi untuk AWS CloudFormation. Anda akan menggunakan template ini untuk membuat yang berikut:
Fungsi Lambda yang menangani API permintaan dan mengotorisasi akses ke Anda. API
Tabel DynamoDB untuk menyimpan IDs klien dan identifikasi pengguna utama yang dikembalikan oleh otorisasi Lambda.
Mesin status Step Functions untuk mengirim pesan ke klien yang terhubung.
Untuk membuat AWS CloudFormation tumpukan
Buka AWS CloudFormation konsol di https://console.aws.amazon.com/cloudformation
. -
Pilih Buat tumpukan kemudian pilih Dengan sumber daya baru (standar).
-
Untuk Tentukan templat, pilih Unggah file templat.
-
Pilih template yang Anda unduh.
-
Pilih Selanjutnya.
-
Untuk nama Stack, masukkan
websocket-step-functions-tutorial
dan kemudian pilih Berikutnya. -
Untuk opsi Konfigurasi tumpukan, pilih Berikutnya.
-
Untuk Kemampuan, akui bahwa AWS CloudFormation dapat membuat IAM sumber daya di akun Anda.
-
Pilih Kirim.
AWS CloudFormation ketentuan sumber daya yang ditentukan dalam template. Diperlukan beberapa menit untuk menyelesaikan penyediaan sumber daya Anda. Pilih tab Output untuk melihat sumber daya yang Anda buat dan merekaARNs. Ketika status AWS CloudFormation tumpukan Anda adalah CREATE_ COMPLETE, Anda siap untuk melanjutkan ke langkah berikutnya.
Langkah 2: Buat WebSocket API
Anda akan membuat WebSocket API untuk menangani koneksi klien dan merutekan permintaan ke sumber daya yang Anda buat di Langkah 1.
Untuk membuat WebSocket API
Masuk ke konsol API Gateway di https://console.aws.amazon.com/apigateway
. Pilih Buat API. Kemudian untuk WebSocket API, pilih Build.
Untuk APInama, masukkan
websocket-step-functions-tutorial
.Untuk ekspresi pemilihan Rute, masukkan
request.body.action
.Ekspresi pemilihan rute menentukan rute yang API dipanggil Gateway saat klien mengirim pesan.
Pilih Selanjutnya.
Untuk rute Predefined, pilih Add $connect, Add $disconnect, Add $default.
Rute $connect dan $disconnect adalah rute khusus yang dipanggil API Gateway secara otomatis saat klien terhubung atau terputus dari file. API APIGateway memanggil rute $default ketika tidak ada rute lain yang cocok dengan permintaan. Anda akan membuat rute khusus untuk terhubung ke Step Functions setelah Anda membuatAPI.
Pilih Selanjutnya.
Untuk Integrasi untuk $connect, lakukan hal berikut:
Untuk jenis Integrasi, pilih Lambda.
-
Untuk fungsi Lambda, pilih fungsi Lambda $connect yang sesuai yang Anda buat AWS CloudFormation di Langkah 1. Nama fungsi Lambda harus dimulai dengan.
websocket-step
Untuk Integrasi untuk $disconnect, lakukan hal berikut:
Untuk jenis Integrasi, pilih Lambda.
-
Untuk fungsi Lambda, pilih fungsi Lambda $disconnect yang sesuai yang Anda buat di Langkah 1. AWS CloudFormation Nama fungsi Lambda harus dimulai dengan.
websocket-step
Untuk Integrasi untuk $ default, pilih mock.
Dalam integrasi tiruan, API Gateway mengelola respons rute tanpa backend integrasi.
Pilih Selanjutnya.
-
Tinjau tahap yang dibuat API Gateway untuk Anda. Secara default, API Gateway membuat tahap bernama produksi dan secara otomatis menyebarkan Anda API ke tahap itu. Pilih Selanjutnya.
Pilih Buat dan terapkan.
Langkah 3: Buat Authorizer Lambda
Untuk mengontrol akses ke Anda WebSocket API, Anda membuat otorisasi Lambda. AWS CloudFormation Template membuat fungsi Lambda Authorizer untuk Anda. Anda dapat melihat fungsi Lambda di konsol Lambda. Nama harus dimulai denganwebsocket-step-functions-tutorial-AuthorizerHandler
. Fungsi Lambda ini menolak semua panggilan ke WebSocket API kecuali headernya. Authorization
Allow
Fungsi Lambda juga meneruskan $context.authorizer.principalId
variabel ke AndaAPI, yang kemudian digunakan dalam tabel DynamoDB untuk mengidentifikasi penelepon. API
Pada langkah ini, Anda mengonfigurasi rute $connect untuk menggunakan Lambda Authorizer.
Untuk membuat otorisasi Lambda
Masuk ke konsol API Gateway di https://console.aws.amazon.com/apigateway
. Di panel navigasi utama, pilih Authorizers.
Pilih Buat Authorizer.
Untuk nama Authorizer, masukkan
LambdaAuthorizer
.Untuk Authorizer ARN, masukkan nama otorisasi yang dibuat oleh template. AWS CloudFormation Nama harus dimulai dengan
websocket-step-functions-tutorial-AuthorizerHandler
.catatan
Kami menyarankan Anda untuk tidak menggunakan contoh otorisasi ini untuk produksi APIs Anda.
Untuk tipe sumber Identity, pilih Header. Untuk Kunci, masukkan
Authorization
.Pilih Buat Authorizer.
Setelah Anda membuat authorizer Anda, Anda melampirkannya ke rute $connect Anda. API
Untuk melampirkan otorisasi ke rute $connect
Di panel navigasi utama, pilih Rute.
Pilih rute $connect.
Di bagian Pengaturan permintaan rute, pilih Edit.
Untuk Otorisasi, pilih menu tarik-turun, lalu pilih otorisasi permintaan Anda.
Pilih Simpan perubahan.
Langkah 4: Buat integrasi dua arah tiruan
Selanjutnya, Anda membuat integrasi tiruan dua arah untuk rute $default. Integrasi tiruan memungkinkan Anda mengirim respons ke klien tanpa menggunakan backend. Saat Anda membuat integrasi untuk rute $default, Anda dapat menunjukkan kepada klien cara berinteraksi dengan AndaAPI.
Anda mengonfigurasi rute $default untuk menginformasikan klien agar menggunakan rute sendmessage.
Untuk membuat integrasi tiruan
Masuk ke konsol API Gateway di https://console.aws.amazon.com/apigateway
. Pilih rute $ default, lalu pilih tab Permintaan integrasi.
Untuk templat Permintaan, pilih Edit.
Untuk ekspresi pemilihan Template, masukkan
200
, lalu pilih Edit.Pada tab Permintaan integrasi, untuk templat Permintaan, pilih Buat templat.
Untuk kunci Template, masukkan
200
.Untuk menghasilkan template, masukkan template pemetaan berikut:
{"statusCode": 200}
Pilih Buat templat.
Hasilnya akan terlihat seperti berikut ini:
Pada panel rute $default, pilih Aktifkan komunikasi dua arah.
Pilih tab Integration response, lalu pilih Create Integration Response.
Untuk tombol Respons, masukkan
$default
.Untuk ekspresi pemilihan Template, masukkan
200
.Pilih Buat respons.
Di bawah Templat respons, pilih Buat templat.
Untuk kunci Template, masukkan
200
.Untuk template Response, masukkan template pemetaan berikut:
{"Use the sendmessage route to send a message. Connection ID: $context.connectionId"}
Pilih Buat templat.
Hasilnya akan terlihat seperti berikut ini:
Langkah 5: Buat integrasi non-proxy dengan Step Functions
Selanjutnya, Anda membuat rute sendmessage. Klien dapat memanggil rute sendmessage untuk menyiarkan pesan ke semua klien yang terhubung. Rute sendmessage memiliki integrasi AWS layanan non-proxy dengan. AWS Step Functions Integrasi memanggil StartExecutionperintah untuk mesin status Step Functions yang dibuat AWS CloudFormation template untuk Anda.
Untuk membuat integrasi non-proxy
Masuk ke konsol API Gateway di https://console.aws.amazon.com/apigateway
. Pilih Buat rute.
Untuk kunci Rute, masukkan
sendmessage
.Untuk jenis Integrasi, pilih AWS layanan.
Untuk AWS Wilayah, masukkan Wilayah tempat Anda menerapkan AWS CloudFormation template Anda.
Untuk AWS layanan, pilih Step Functions.
Untuk HTTPmetode, pilih POST.
Untuk nama Action, masukkan
StartExecution
.Untuk peran Eksekusi, masukkan peran eksekusi yang dibuat oleh AWS CloudFormation template. Namanya seharusnya WebsocketTutorialApiRole.
Pilih Buat rute.
Selanjutnya, Anda membuat template pemetaan untuk mengirim parameter permintaan ke mesin status Step Functions.
Untuk membuat template pemetaan
Pilih rute sendmessage, lalu pilih tab Permintaan integrasi.
Di bagian Permintaan template, pilih Edit.
Untuk ekspresi pemilihan Template, masukkan
\$default
.Pilih Edit.
Di bagian Permintaan template, pilih Buat template.
Untuk kunci Template, masukkan
\$default
.Untuk menghasilkan template, masukkan template pemetaan berikut:
#set($domain = "$context.domainName") #set($stage = "$context.stage") #set($body = $input.json('$')) #set($getMessage = $util.parseJson($body)) #set($mymessage = $getMessage.message) { "input": "{\"domain\": \"$domain\", \"stage\": \"$stage\", \"message\": \"$mymessage\"}", "stateMachineArn": "arn:aws:states:
us-east-2
:123456789012
:stateMachine:WebSocket-Tutorial-StateMachine" }Ganti
stateMachineArn
dengan mesin ARN negara yang dibuat oleh AWS CloudFormation.Template pemetaan melakukan hal berikut:
-
Menciptakan variabel
$domain
menggunakan variabel konteksdomainName
. -
Menciptakan variabel
$stage
menggunakan variabel konteksstage
.$stage
Variabel$domain
dan diperlukan untuk membangun callbackURL. Mengambil
sendmessage
JSON pesan masuk, dan mengekstrakmessage
properti.-
Menciptakan input untuk mesin negara. Input adalah domain dan tahap WebSocket API dan pesan dari
sendmessage
rute.
-
-
Pilih Buat templat.
Anda dapat membuat integrasi non-proxy pada rute $connect atau $disconnect, untuk langsung menambahkan atau menghapus ID koneksi dari tabel DynamoDB, tanpa menjalankan fungsi Lambda.
Langkah 6: Uji API
Selanjutnya, Anda akan menerapkan dan menguji Anda API untuk memastikan bahwa itu berfungsi dengan benar. Anda akan menggunakan wscat
perintah untuk terhubung ke API dan kemudian, Anda akan menggunakan perintah garis miring untuk mengirim bingkai ping untuk memeriksa koneksi ke WebSocket API.
Untuk menyebarkan API
Masuk ke konsol API Gateway di https://console.aws.amazon.com/apigateway
. Di panel navigasi utama, pilih Rute.
Pilih DeployAPI.
Untuk Panggung, pilih produksi.
(Opsional) Untuk deskripsi Deployment, masukkan deskripsi.
Pilih Deploy.
Setelah Anda menyebarkanAPI, Anda dapat memanggilnya. Gunakan panggilan URL untuk menelepon AndaAPI.
Untuk mendapatkan panggilan URL untuk Anda API
Pilih API Anda.
Pilih Tahapan, lalu pilih produksi.
-
Perhatikan API milik Anda WebSocket URL. URLSeharusnya terlihat seperti
wss://
.abcdef123
.execute-api.us-east-2
.amazonaws.com/production
Sekarang setelah Anda memiliki panggilan AndaURL, Anda dapat menguji koneksi ke Anda WebSocket API.
Untuk menguji koneksi ke API
Gunakan perintah berikut untuk terhubung ke AndaAPI. Pertama, Anda menguji koneksi dengan memanggil
/ping
jalur.wscat -c wss://
abcdef123
.execute-api.us-east-2
.amazonaws.com/production -H "Authorization: Allow" --slash -PConnected (press CTRL+C to quit)
-
Masukkan perintah berikut untuk melakukan ping pada bingkai kontrol. Anda dapat menggunakan bingkai kontrol untuk tujuan keepalive dari sisi klien.
/ping
Hasilnya akan terlihat seperti berikut ini:
< Received pong (data: "")
Sekarang setelah Anda menguji koneksi, Anda dapat menguji apakah Anda API berfungsi dengan benar. Pada langkah ini, Anda membuka jendela terminal baru sehingga WebSocket API dapat mengirim pesan ke semua klien yang terhubung.
Untuk menguji API
-
Buka terminal baru dan jalankan
wscat
perintah lagi dengan parameter berikut.wscat -c wss://
abcdef123
.execute-api.us-east-2
.amazonaws.com/production -H "Authorization: Allow"Connected (press CTRL+C to quit)
-
APIGateway menentukan rute mana yang akan dipanggil berdasarkan ekspresi pemilihan API permintaan rute Anda. Ekspresi pilih rute Anda API adalah
$request.body.action
. Akibatnya, API Gateway memanggilsendmessage
rute saat Anda mengirim pesan berikut:{"action": "sendmessage", "message": "hello, from Step Functions!"}
Mesin status Step Functions yang terkait dengan rute memanggil fungsi Lambda dengan pesan dan callback. URL Fungsi Lambda memanggil Manajemen API Gateway API dan mengirimkan pesan ke semua klien yang terhubung. Semua klien menerima pesan berikut:
< hello, from Step Functions!
Sekarang setelah Anda menguji WebSocket API, Anda dapat memutuskan sambungan dari AndaAPI.
Untuk memutuskan sambungan dari API
Tekan
CTRL+C
untuk memutuskan sambungan dari AndaAPI.Ketika klien terputus dari AndaAPI, API Gateway memanggil rute $disconnect AndaAPI. Integrasi Lambda untuk rute $disconnect Anda API menghapus ID koneksi dari DynamoDB.
Langkah 7: Bersihkan
Untuk mencegah biaya yang tidak perlu, hapus sumber daya yang Anda buat sebagai bagian dari tutorial ini. Langkah-langkah berikut menghapus AWS CloudFormation tumpukan Anda dan WebSocket API.
Untuk menghapus WebSocket API
Masuk ke konsol API Gateway di https://console.aws.amazon.com/apigateway
. Pada APIshalaman, pilih websocket-api Anda.
Pilih Tindakan, pilih Hapus, lalu konfirmasikan pilihan Anda.
Untuk menghapus AWS CloudFormation tumpukan
Buka AWS CloudFormation konsol di https://console.aws.amazon.com/cloudformation
. -
Pilih AWS CloudFormation tumpukan Anda.
-
Pilih Hapus dan kemudian konfirmasikan pilihan Anda.
Langkah selanjutnya
Anda dapat mengotomatiskan pembuatan dan pembersihan semua sumber AWS daya yang terlibat dalam tutorial ini. Untuk contoh AWS CloudFormation template yang mengotomatiskan tindakan ini untuk tutorial ini, lihat ws-sfn.zip.