Hubungi pihak ketiga APIs dalam alur kerja Step Functions - AWS Step Functions

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

Hubungi pihak ketiga APIs dalam alur kerja Step Functions

HTTPTugas adalah jenis Status alur kerja tugas status yang memungkinkan Anda memanggil publik, pihak ketigaAPI, seperti Salesforce dan Stripe, dalam alur kerja Anda. Untuk memanggil pihak ketigaAPI, gunakan status Tugas dengan arn:aws:states:::http:invoke sumber daya. Kemudian, berikan detail konfigurasi API titik akhir, seperti, metode yang ingin Anda gunakan APIURL, dan detail otentikasi.

Jika Anda menggunakan Workflow Studio untuk membangun mesin status yang berisi HTTP Tugas, Workflow Studio secara otomatis menghasilkan peran eksekusi dengan IAM kebijakan untuk HTTP tugas tersebut. Untuk informasi selengkapnya, lihat Peran untuk menguji HTTP Tugas di Workflow Studio.

HTTPDefinisi tugas

ASLDefinisi tersebut mewakili HTTP Tugas dengan http:invoke sumber daya. Definisi HTTP Tugas berikut memanggil Stripe API yang mengembalikan daftar semua pelanggan.

"Call third-party API": { "Type": "Task", "Resource": "arn:aws:states:::http:invoke", "Parameters": { "ApiEndpoint": "https://api.stripe.com/v1/customers", "Authentication": { "ConnectionArn": "arn:aws:events:us-east-2:123456789012:connection/Stripe/81210c42-8af1-456b-9c4a-6ff02fc664ac" }, "Method": "GET" }, "End": true }

HTTPBidang tugas

HTTPTugas mencakup bidang-bidang berikut dalam definisinya.

Resource (Wajib)

Untuk menentukan jenis tugas, berikan ARN di Resource bidang. Untuk HTTP Tugas, Anda menentukan Resource bidang sebagai berikut.

"Resource": "arn:aws:states:::http:invoke"
Parameters (Wajib)

BerisiApiEndpoint,Method, dan ConnectionArn bidang yang memberikan informasi tentang pihak ketiga yang ingin API Anda hubungi. Parametersjuga berisi bidang opsional, seperti Headers danQueryParameters.

Anda dapat menentukan kombinasi statis JSON dan JsonPathsintaks seperti Parameters di Parameters lapangan. Untuk informasi selengkapnya, lihat Meneruskan parameter ke layanan API di Step Functions.

ApiEndpoint(Diperlukan)

Menentukan pihak URL ketiga yang ingin API Anda panggil. Untuk menambahkan parameter kueri keURL, gunakan QueryParameters bidang. Contoh berikut menunjukkan bagaimana Anda dapat memanggil Stripe API untuk mengambil daftar semua pelanggan.

"ApiEndpoint":"https://api.stripe.com/v1/customers"

Anda juga dapat menentukan jalur referensi menggunakan JsonPathsintaks untuk memilih JSON node yang berisi pihak ketiga APIURL. Misalnya, Anda ingin memanggil salah satu Stripe APIs menggunakan ID pelanggan tertentu. Bayangkan Anda telah memberikan masukan status berikut.

{ "customer_id": "1234567890", "name": "John Doe" }

Untuk mengambil rincian ID pelanggan ini menggunakan StripeAPI, tentukan ApiEndpoint seperti yang ditunjukkan pada contoh berikut. Contoh ini menggunakan fungsi intrinsik dan jalur referensi.

"ApiEndpoint.$":"States.Format('https://api.stripe.com/v1/customers/{}', $.customer_id)"

Saat runtime, Step Functions menyelesaikan nilai sebagai berikut. ApiEndpoint

https://api.stripe.com/v1/customers/1234567890
Method(Diperlukan)

Menentukan HTTP metode yang ingin Anda gunakan untuk memanggil pihak ketigaAPI. Anda dapat menentukan salah satu metode ini di HTTP Tugas Anda:GET,POST,PUT,DELETE,PATCH,OPTIONS, atauHEAD.

Misalnya, untuk menggunakan GET metode ini, tentukan Method bidang sebagai berikut.

"Method": "GET"

Anda juga dapat menggunakan jalur referensi untuk menentukan metode saat runtime. Misalnya, "Method.$": "$.myHTTPMethod".

Authentication(Diperlukan)

Berisi ConnectionArn bidang yang menentukan cara mengautentikasi panggilan pihak ketigaAPI. Step Functions mendukung otentikasi untuk yang ditentukan ApiEndpoint menggunakan sumber daya koneksi Amazon EventBridge.

ConnectionArn(Diperlukan)

Menentukan EventBridge koneksiARN.

HTTPTugas memerlukan EventBridge koneksi, yang mengelola kredensi otentikasi penyedia dengan aman. API Koneksi menentukan jenis otorisasi dan kredensi yang akan digunakan untuk mengotorisasi pihak ketiga. API Menggunakan koneksi membantu Anda menghindari rahasia hard-coding, seperti API kunci, ke dalam definisi mesin negara Anda. Dalam koneksi, Anda juga dapat menentukanHeaders,QueryParameters, dan RequestBody parameter.

Saat Anda membuat EventBridge koneksi, Anda memberikan detail otentikasi Anda. Untuk informasi selengkapnya tentang cara kerja autentikasi untuk HTTP Tugas, lihatOtentikasi untuk Tugas HTTP.

Contoh berikut menunjukkan bagaimana Anda dapat menentukan Authentication bidang dalam definisi HTTP Tugas Anda.

"Authentication": { "ConnectionArn": "arn:aws:events:us-east-2:123456789012:connection/Stripe/81210c42-8af1-456b-9c4a-6ff02fc664ac" }
Headers (Opsional)

Menyediakan konteks dan metadata tambahan ke titik akhir. API Anda dapat menentukan header sebagai string atau JSON array.

Anda dapat menentukan header di EventBridge koneksi dan Headers bidang dalam HTTP Tugas. Kami menyarankan Anda untuk tidak menyertakan detail otentikasi ke API penyedia Anda di Headers lapangan. Kami menyarankan Anda memasukkan detail ini ke dalam EventBridge koneksi.

Step Functions menambahkan header yang Anda tentukan di EventBridge koneksi ke header yang Anda tentukan dalam definisi HTTP Tugas. Jika tombol header yang sama hadir dalam definisi dan koneksi, Step Functions menggunakan nilai yang sesuai yang ditentukan dalam EventBridge koneksi untuk header tersebut. Untuk informasi lebih lanjut tentang caranya Step Functions melakukan penggabungan data, lihatPenggabungan EventBridge koneksi dan data definisi HTTP Tugas.

Contoh berikut menentukan header yang akan disertakan dalam API panggilan pihak ketiga:content-type.

"Headers": { "content-type": "application/json" }

Anda juga dapat menggunakan jalur referensi untuk menentukan header saat runtime. Misalnya, "Headers.$": "$.myHTTPHeaders".

Step Functions menetapkanUser-Agent,Range, dan Host header. Step Functions menetapkan nilai Host header berdasarkan panggilan API Anda. Berikut ini adalah contoh dari header ini.

User-Agent: Amazon|StepFunctions|HttpInvoke|us-east-1, Range: bytes=0-262144, Host: api.stripe.com

Anda tidak dapat menggunakan header berikut dalam definisi HTTP Tugas Anda. Jika Anda menggunakan header ini, HTTP Tugas gagal dengan States.Runtime kesalahan.

  • A-IM

  • Terima-Charset

  • Terima-Datetime

  • Terima-Pengenkodean

  • Kontrol Cache

  • Koneksi

  • Pengkodean Konten

  • Konten- MD5

  • Tanggal

  • Harapkan

  • Diteruskan

  • Dari

  • Host

  • HTTP2-Pengaturan

  • Jika-Pertandingan

  • Jika-Modifikasi-Sejak

  • Jika-Tidak Pertandingan

  • Jika-Rentang

  • Jika-Tidak Dimodifikasi-Sejak

  • Max-Maju

  • Asal

  • Pragma

  • Otorisasi Proksi

  • Perujuk

  • Server

  • TE

  • Trailer

  • Transfer-Encoding

  • Peningkatan

  • Melalui

  • Peringatan

  • x-diteruskan-*

  • x-amz-*

  • x-amzn-*

QueryParameters (Opsional)

Menyisipkan pasangan kunci-nilai di akhir file. API URL Anda dapat menentukan parameter kueri sebagai string, JSON array, atau JSON objek. Step Functions secara otomatis URL -menyandikan parameter kueri saat memanggil pihak ketiga. API

Misalnya, katakan bahwa Anda ingin menelepon Stripe API untuk mencari pelanggan yang melakukan transaksi mereka dalam dolar AS (USD). Bayangkan Anda telah memberikan yang berikut ini QueryParameters sebagai input status.

"QueryParameters": { "currency": "usd" }

Saat runtime, Step Functions menambahkan QueryParameters ke API URL sebagai berikut.

https://api.stripe.com/v1/customers/search?currency=usd

Anda juga dapat menggunakan jalur referensi untuk menentukan parameter kueri saat runtime. Misalnya, "QueryParameters.$": "$.myQueryParameters".

Jika Anda telah menentukan parameter kueri di EventBridge koneksi, Step Functions menambahkan parameter kueri ini ke parameter kueri yang Anda tentukan dalam definisi HTTP Tugas. Jika kunci parameter kueri yang sama hadir dalam definisi dan koneksi, Step Functions menggunakan nilai yang sesuai yang ditentukan dalam EventBridge koneksi untuk header tersebut. Untuk informasi lebih lanjut tentang caranya Step Functions melakukan penggabungan data, lihatPenggabungan EventBridge koneksi dan data definisi HTTP Tugas.

Transform (Opsional)

Berisi RequestBodyEncoding dan RequestEncodingOptions bidang. Secara default, Step Functions mengirimkan badan permintaan sebagai JSON data ke API titik akhir.

Jika API penyedia Anda menerima badan form-urlencoded permintaan, gunakan Transform bidang untuk menentukan URL -encoding untuk badan permintaan. Anda juga harus menentukan content-type header sebagaiapplication/x-www-form-urlencoded. Step Functions kemudian secara otomatis URL -mengkodekan badan permintaan Anda.

RequestBodyEncoding

Menentukan URL -encoding dari badan permintaan Anda. Anda dapat menentukan satu nilai ini: NONE atauURL_ENCODED.

  • NONE— Badan HTTP permintaan akan menjadi serial JSON RequestBody lapangan. Ini adalah nilai default.

  • URL_ENCODED— Badan HTTP permintaan akan menjadi data formulir yang URL dikodekan dari bidang tersebut. RequestBody

RequestEncodingOptions

Menentukan opsi pengkodean yang akan digunakan untuk array di badan permintaan Anda jika Anda menyetel RequestBodyEncoding ke. URL_ENCODED

Step Functions mendukung opsi pengkodean array berikut. Untuk informasi lebih lanjut tentang opsi ini dan contohnya, lihatMenerapkan URL -encoding pada badan permintaan.

  • INDICES— Mengkodekan array menggunakan nilai indeks elemen array. Secara default, Step Functions menggunakan opsi pengkodean ini.

  • REPEAT— Mengulangi kunci untuk setiap item dalam array.

  • COMMAS— Mengkodekan semua nilai dalam kunci sebagai daftar nilai yang dibatasi koma.

  • BRACKETS— Mengulangi kunci untuk setiap item dalam array dan menambahkan braket, [], ke kunci untuk menunjukkan bahwa itu adalah array.

Contoh berikut menetapkan URL -encoding untuk data badan permintaan. Ini juga menentukan untuk menggunakan opsi COMMAS pengkodean untuk array di badan permintaan.

"Transform": { "RequestBodyEncoding": "URL_ENCODED", "RequestEncodingOptions": { "ArrayFormat": "COMMAS" } }
RequestBody (Opsional)

Menerima JSON data yang Anda berikan dalam input status. DiRequestBody, Anda dapat menentukan kombinasi statis JSON dan JsonPathsintaks. Misalnya, katakan bahwa Anda memberikan masukan status berikut:

{ "CardNumber": "1234567890", "ExpiryDate": "09/25" }

Untuk menggunakan nilai-nilai ini dari CardNumber dan ExpiryDate dalam badan permintaan Anda saat runtime, Anda dapat menentukan JSON data berikut di badan permintaan Anda.

"RequestBody": { "Card": { "Number.$": "$.CardNumber", "Expiry.$": "$.ExpiryDate", "Name": "John Doe", "Address": "123 Any Street, Any Town, USA" } }

Jika pihak ketiga yang ingin API Anda panggil memerlukan badan form-urlencoded permintaan, Anda harus menentukan URL -encoding untuk data badan permintaan Anda. Untuk informasi selengkapnya, lihat Menerapkan URL -encoding pada badan permintaan.

Otentikasi untuk Tugas HTTP

HTTPTugas memerlukan EventBridge koneksi, yang mengelola kredensi otentikasi penyedia dengan aman. API Koneksi menentukan jenis otorisasi dan kredensi yang akan digunakan untuk mengotorisasi pihak ketiga. API Menggunakan koneksi membantu Anda menghindari rahasia hard-coding, seperti API kunci, ke dalam definisi mesin negara Anda. EventBridge Koneksi mendukung skema otorisasi DasarOAuth,, dan API Kunci.

Saat Anda membuat EventBridge koneksi, Anda memberikan detail otentikasi Anda. Anda juga dapat menyertakan parameter header, body, dan query yang diperlukan untuk otorisasi dengan fileAPI. Anda harus menyertakan koneksi ARN dalam HTTP Tugas apa pun yang memanggil pihak ketigaAPI.

Saat Anda membuat koneksi dan menambahkan parameter otorisasi, EventBridge buat rahasia AWS Secrets Manager. Dalam rahasia ini, EventBridge menyimpan parameter koneksi dan otorisasi dalam bentuk terenkripsi. Agar berhasil membuat atau memperbarui koneksi, Anda harus menggunakan Akun AWS yang memiliki izin untuk menggunakan Secrets Manager. Untuk informasi lebih lanjut tentang IAM izin yang dibutuhkan mesin status Anda untuk mengakses EventBridge koneksi, lihatIAMizin untuk menjalankan Tugas HTTP.

Gambar berikut menunjukkan bagaimana Step Functions menangani otentikasi untuk API panggilan pihak ketiga menggunakan EventBridge koneksi. Bagian EventBridge koneksi yang mengelola kredensyal penyedia pihak ketigaAPI. EventBridge Menciptakan sebuah rahasia di Secrets Manager untuk menyimpan parameter koneksi dan otorisasi dalam bentuk terenkripsi.

Diagram yang menunjukkan bagaimana Step Functions menggunakan EventBridge koneksi untuk panggilan ke HTTP titik akhir.

Penggabungan EventBridge koneksi dan data definisi HTTP Tugas

Saat Anda memanggil HTTP Tugas, Anda dapat menentukan data di EventBridge koneksi dan definisi HTTP Tugas Anda. Data ini mencakupHeaders,QueryParameters, dan RequestBody parameter. Sebelum memanggil pihak ketigaAPI, Step Functions menggabungkan badan permintaan dengan parameter badan koneksi dalam semua kasus kecuali jika badan permintaan Anda adalah string dan parameter badan koneksi tidak kosong. Dalam hal ini, HTTP Tugas gagal dengan States.Runtime kesalahan.

Jika ada kunci duplikat yang ditentukan dalam definisi HTTP Tugas dan EventBridge koneksi, Step Functions menimpa nilai-nilai dalam HTTP Tugas dengan nilai-nilai dalam koneksi.

Daftar berikut menjelaskan bagaimana Step Functions menggabungkan data sebelum memanggil pihak ketigaAPI:

  • Header - Step Functions menambahkan header apa pun yang Anda tentukan dalam koneksi ke header di Headers bidang Tugas. HTTP Jika ada konflik antara tombol header, Step Functions menggunakan nilai yang ditentukan dalam koneksi untuk header tersebut. Misalnya, jika Anda menentukan content-type header dalam definisi HTTP Tugas dan EventBridge koneksi, Step Functions menggunakan nilai content-type header yang ditentukan dalam koneksi.

  • Parameter kueri — Step Functions menambahkan parameter kueri apa pun yang Anda tentukan dalam koneksi ke parameter kueri di QueryParameters bidang HTTP Tugas. Jika ada konflik antara kunci parameter kueri, Step Functions menggunakan nilai yang ditentukan dalam koneksi untuk parameter kueri tersebut. Misalnya, jika Anda menentukan parameter maxItems kueri dalam definisi HTTP Tugas dan EventBridge koneksi, Step Functions menggunakan nilai parameter maxItems kueri yang ditentukan dalam koneksi.

  • Parameter tubuh

    • Step Functions menambahkan nilai badan permintaan apa pun yang ditentukan dalam koneksi ke badan permintaan di RequestBody bidang HTTP Tugas. Jika ada konflik antara kunci badan permintaan, Step Functions menggunakan nilai yang ditentukan dalam koneksi untuk badan permintaan. Misalnya, katakan bahwa Anda menentukan Mode RequestBody bidang dalam definisi HTTP Tugas dan EventBridge koneksi. Step Functions menggunakan nilai Mode bidang yang Anda tentukan dalam koneksi.

    • Jika Anda menentukan badan permintaan sebagai string, bukan JSON objek, dan EventBridge koneksi juga berisi badan permintaan, Step Functions tidak dapat menggabungkan badan permintaan yang ditentukan di kedua tempat ini. Itu gagal HTTP Tugas dengan States.Runtime kesalahan.

    Step Functions menerapkan semua transformasi dan membuat serial badan permintaan setelah menyelesaikan penggabungan badan permintaan.

Contoh berikut menetapkanHeaders,QueryParameters, dan RequestBody bidang di kedua HTTP Tugas dan EventBridge koneksi.

HTTPDefinisi tugas

{ "Comment": "Data merging example for HTTP Task and EventBridge connection", "StartAt": "ListCustomers", "States": { "ListCustomers": { "Type": "Task", "Resource": "arn:aws:states:::http:invoke", "Parameters": { "Authentication": { "ConnectionArn": "arn:aws:events:us-east-1:123456789012:connection/Example/81210c42-8af1-456b-9c4a-6ff02fc664ac" }, "ApiEndpoint": "https:/example.com/path", "Method": "GET", "Headers": { "Request-Id": "my_request_id", "Header-Param": "state_machine_header_param" }, "RequestBody": { "Job": "Software Engineer", "Company": "AnyCompany", "BodyParam": "state_machine_body_param" }, "QueryParameters": { "QueryParam": "state_machine_query_param" } } } } }

EventBridge koneksi

{ "AuthorizationType": "API_KEY", "AuthParameters": { "ApiKeyAuthParameters": { "ApiKeyName": "ApiKey", "ApiKeyValue": "key_value" }, "InvocationHttpParameters": { "BodyParameters": [ { "Key": "BodyParam", "Value": "connection_body_param" } ], "HeaderParameters": [ { "Key": "Header-Param", "Value": "connection_header_param" } ], "QueryStringParameters": [ { "Key": "QueryParam", "Value": "connection_query_param" } ] } } }

Dalam contoh ini, kunci duplikat ditentukan dalam HTTP Tugas dan EventBridge koneksi. Oleh karena itu, Step Functions menimpa nilai-nilai dalam HTTP Tugas dengan nilai-nilai dalam koneksi. Cuplikan kode berikut menunjukkan permintaan yang HTTP Step Functions mengirim ke pihak ketigaAPI.

POST /path?QueryParam=connection_query_param HTTP/1.1 Apikey: key_value Content-Length: 79 Content-Type: application/json; charset=UTF-8 Header-Param: connection_header_param Host: example.com Range: bytes=0-262144 Request-Id: my_request_id User-Agent: Amazon|StepFunctions|HttpInvoke|us-east-1 {"Job":"Software Engineer","Company":"AnyCompany","BodyParam":"connection_body_param"}

Menerapkan URL -encoding pada badan permintaan

Secara default, Step Functions mengirimkan badan permintaan sebagai JSON data ke API titik akhir. Jika API penyedia pihak ketiga Anda memerlukan badan form-urlencoded permintaan, Anda harus menentukan URL -encoding untuk badan permintaan. Step Functions kemudian secara otomatis URL -mengkodekan badan permintaan berdasarkan opsi URL -encoding yang Anda pilih.

Anda menentukan URL -encoding menggunakan bidang. Transform Bidang ini berisi RequestBodyEncoding bidang yang menentukan apakah Anda ingin menerapkan URL -encoding untuk badan permintaan Anda atau tidak. Saat Anda menentukan RequestBodyEncoding bidang, Step Functions mengonversi badan JSON permintaan Anda ke badan form-urlencoded permintaan sebelum memanggil pihak ketigaAPI. Anda juga harus menentukan content-type header sebagai application/x-www-form-urlencoded karena APIs itu menerima URL -encoded data mengharapkan header. content-type

Untuk menyandikan array di badan permintaan Anda, Step Functions menyediakan opsi pengkodean array berikut.

  • INDICES— Mengulangi kunci untuk setiap item dalam array dan menambahkan braket, [], ke kunci untuk menunjukkan bahwa itu adalah array. Braket ini berisi indeks elemen array. Menambahkan indeks membantu Anda menentukan urutan elemen array. Secara default, Step Functions menggunakan opsi pengkodean ini.

    Misalnya, jika badan permintaan Anda berisi array berikut.

    {"array": ["a","b","c","d"]}

    Step Functions mengkodekan array ini ke string berikut.

    array[0]=a&array[1]=b&array[2]=c&array[3]=d
  • REPEAT— Mengulangi kunci untuk setiap item dalam array.

    Misalnya, jika badan permintaan Anda berisi array berikut.

    {"array": ["a","b","c","d"]}

    Step Functions mengkodekan array ini ke string berikut.

    array=a&array=b&array=c&array=d
  • COMMAS— Mengkodekan semua nilai dalam kunci sebagai daftar nilai yang dibatasi koma.

    Misalnya, jika badan permintaan Anda berisi array berikut.

    {"array": ["a","b","c","d"]}

    Step Functions mengkodekan array ini ke string berikut.

    array=a,b,c,d
  • BRACKETS— Mengulangi kunci untuk setiap item dalam array dan menambahkan braket, [], ke kunci untuk menunjukkan bahwa itu adalah array.

    Misalnya, jika badan permintaan Anda berisi array berikut.

    {"array": ["a","b","c","d"]}

    Step Functions mengkodekan array ini ke string berikut.

    array[]=a&array[]=b&array[]=c&array[]=d

IAMizin untuk menjalankan Tugas HTTP

Peran eksekusi mesin status Anda harus memiliki states:InvokeHTTPEndpointevents:RetrieveConnectionCredentials,secretsmanager:GetSecretValue,, dan secretsmanager:DescribeSecret izin untuk HTTP Tugas memanggil pihak ketigaAPI. Contoh IAM kebijakan berikut memberikan hak istimewa paling sedikit yang diperlukan untuk peran mesin status Anda untuk memanggil Stripe. APIs IAMKebijakan ini juga memberikan izin ke peran mesin status untuk mengakses EventBridge koneksi tertentu, termasuk rahasia untuk koneksi ini yang disimpan di Secrets Manager.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Action": "states:InvokeHTTPEndpoint", "Resource": "arn:aws:states:us-east-2:123456789012:stateMachine:myStateMachine", "Condition": { "StringEquals": { "states:HTTPMethod": "GET" }, "StringLike": { "states:HTTPEndpoint": "https://api.stripe.com/*" } } }, { "Sid": "Statement2", "Effect": "Allow", "Action": [ "events:RetrieveConnectionCredentials", ], "Resource": "arn:aws:events:us-east-2:123456789012:connection/oauth_connection/aeabd89e-d39c-4181-9486-9fe03e6f286a" }, { "Sid": "Statement3", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret" ], "Resource": "arn:aws:secretsmanager:*:*:secret:events!connection/*" } ] }

HTTPContoh tugas

Definisi mesin status berikut menunjukkan HTTP Tugas yang mencakupHeaders,, QueryParametersTransform, dan RequestBody parameter. HTTPTugas memanggil StripeAPI, https://api.stripe.com/v1/ faktur, untuk menghasilkan faktur. HTTPTugas juga menentukan URL -encoding untuk badan permintaan menggunakan opsi encoding. INDICES

Pastikan bahwa Anda telah membuat EventBridge koneksi. Contoh berikut menunjukkan koneksi yang dibuat menggunakan jenis BASIC auth.

{ "Type": "BASIC", "AuthParameters": { "BasicAuthParameters": { "Password": "myPassword", "Username": "myUsername" }, } }

Ingatlah untuk mengganti italicized teks dengan informasi spesifik sumber daya Anda.

{ "Comment": "A state machine that uses HTTP Task", "StartAt": "CreateInvoiceAPI", "States": { "CreateInvoiceAPI": { "Type": "Task", "Resource": "arn:aws:states:::http:invoke", "Parameters": { "ApiEndpoint": "https://api.stripe.com/v1/invoices", "Method": "POST", "Authentication": { "ConnectionArn": ""arn:aws:events:us-east-2:123456789012:connection/Stripe/81210c42-8af1-456b-9c4a-6ff02fc664ac" }, "Headers": { "Content-Type": "application/x-www-form-urlencoded" }, "RequestBody": { "customer.$": "$.customer_id", "description": "Monthly subscription", "metadata": { "order_details": "monthly report data" } }, "Transform": { "RequestBodyEncoding": "URL_ENCODED", "RequestEncodingOptions": { "ArrayFormat": "INDICES" } } }, "Retry": [ { "ErrorEquals": [ "States.Http.StatusCode.429", "States.Http.StatusCode.503", "States.Http.StatusCode.504", "States.Http.StatusCode.502" ], "BackoffRate": 2, "IntervalSeconds": 1, "MaxAttempts": 3, "JitterStrategy": "FULL" } ], "Catch": [ { "ErrorEquals": [ "States.Http.StatusCode.404", "States.Http.StatusCode.400", "States.Http.StatusCode.401", "States.Http.StatusCode.409", "States.Http.StatusCode.500" ], "Comment": "Handle all non 200 ", "Next": "HandleInvoiceFailure" } ], "End": true } } }

Untuk menjalankan mesin status ini, berikan ID pelanggan sebagai input seperti yang ditunjukkan pada contoh berikut:

{ "customer_id": "1234567890" }

Contoh berikut menunjukkan HTTP permintaan bahwa Step Functions mengirim ke StripeAPI.

POST /v1/invoices HTTP/1.1 Authorization: Basic <base64 of username and password> Content-Type: application/x-www-form-urlencoded Host: api.stripe.com Range: bytes=0-262144 Transfer-Encoding: chunked User-Agent: Amazon|StepFunctions|HttpInvoke|us-east-1 description=Monthly%20subscription&metadata%5Border_details%5D=monthly%20report%20data&customer=1234567890

Menguji HTTP Tugas

Anda dapat menggunakan TestStateAPImelalui konsol,SDK, atau AWS CLI untuk menguji HTTP tugas. Prosedur berikut menjelaskan cara menggunakan TestState API dalam Step Functions konsol. Anda dapat menguji detail API permintaan, respons, dan autentikasi secara berulang hingga HTTP Tugas Anda berfungsi seperti yang diharapkan.

Uji status HTTP Tugas di Step Functions konsol
  1. Buka Konsol Step Functions.

  2. Pilih Buat mesin status untuk mulai membuat mesin status atau pilih mesin status yang ada yang berisi HTTP Tugas.

    Lihat Langkah 4 jika Anda menguji tugas di mesin status yang ada.

  3. Di Mode desain Workflow Studio, konfigurasikan HTTP Tugas secara visual. Atau pilih mode Kode untuk menyalin-menempelkan definisi mesin status dari lingkungan pengembangan lokal Anda.

  4. Dalam mode Desain, pilih Status uji di Panel Inspector panel Workflow Studio.

  5. Dalam kotak dialog Test state, lakukan hal berikut:

    1. Untuk peran Eksekusi, pilih peran eksekusi untuk menguji status. Jika Anda tidak memiliki peran dengan izin yang cukup untuk HTTP Tugas, lihat Peran untuk menguji HTTP Tugas di Workflow Studio untuk membuat peran.

    2. (Opsional) Berikan JSON masukan apa pun yang dibutuhkan status yang Anda pilih untuk pengujian.

    3. Untuk tingkat Inspeksi, pertahankan pilihan default INFO. Level ini menunjukkan status API panggilan dan output status. Ini berguna untuk memeriksa API respons dengan cepat.

    4. Pilih Mulai tes.

    5. Jika tes berhasil, output status muncul di sisi kanan kotak dialog status Uji. Jika tes gagal, kesalahan muncul.

      Di tab Detail negara pada kotak dialog, Anda dapat melihat definisi negara bagian dan tautan ke EventBridge koneksi.

    6. Ubah tingkat Inspeksi menjadi TRACE. Level ini menunjukkan HTTP permintaan dan respons mentah, dan berguna untuk memverifikasi header, parameter kueri, dan detail API spesifik lainnya.

    7. Pilih kotak centang Reveal Secrets. Dalam kombinasi dengan TRACE, pengaturan ini memungkinkan Anda melihat data sensitif yang EventBridge sisipan koneksi, seperti API kunci. Bagian IAM identitas pengguna yang Anda gunakan untuk mengakses konsol harus memiliki izin untuk melakukan states:RevealSecrets tindakan. Tanpa izin ini, Step Functions melempar kesalahan akses ditolak saat Anda memulai pengujian. Sebagai contoh dari sebuah IAM kebijakan yang menetapkan states:RevealSecrets izin, lihatIAM izin untuk menggunakan TestState API.

      Gambar berikut menunjukkan tes untuk HTTP Tugas yang berhasil. Tingkat Inspeksi untuk status ini diatur ke TRACE. Tab HTTPpermintaan & respons pada gambar berikut menunjukkan hasil API panggilan pihak ketiga.

      Output dari status yang dipilih yang berhasil tes untuk TRACElevel tersebut.
    8. Pilih Mulai tes.

    9. Jika tes berhasil, Anda dapat melihat HTTP detail Anda di bawah tab HTTPpermintaan & respons.

Tanggapan HTTP Tugas yang Tidak Didukung

HTTPTugas gagal dengan States.Runtime kesalahan jika salah satu kondisi berikut benar untuk respons yang dikembalikan:

  • Respons berisi header tipe kontenapplication/octet-stream,, image/*video/*, atau. audio/*

  • Respons tidak dapat dibaca sebagai string yang valid. Misalnya, data biner atau gambar.