View a markdown version of this page

Panggil API HTTPS di alur kerja Fungsi Langkah - AWS Step Functions

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

Panggil API HTTPS di alur kerja Fungsi Langkah

Tugas HTTP adalah jenis Status alur kerja tugas menyatakan bahwa Anda dapat menggunakan untuk memanggil API HTTPS di alur kerja Anda. API dapat bersifat publik, seperti aplikasi SaaS pihak ketiga seperti Stripe atau Salesforce. Anda juga dapat memanggil API pribadi, seperti HTTPS-based aplikasi di Amazon Virtual Private Cloud.

Untuk otorisasi dan konektivitas jaringan, Tugas HTTP memerlukan EventBridge koneksi.

Untuk memanggil API HTTPS, gunakan Tugas negara dengan arn:aws:states:::http:invoke sumber daya. Kemudian, berikan detail konfigurasi titik akhir API, seperti URL API, metode yang ingin Anda gunakan, dan hubungan rincian.

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

catatan

Tugas HTTP saat ini hanya mendukung nama domain publik dengan sertifikat tepercaya publik untuk titik akhir HTTPS saat menggunakan API pribadi. Tugas HTTP tidak mendukung TLS bersama (MTL).

Konektivitas untuk Tugas HTTP

Tugas HTTP membutuhkan EventBridge hubungan, yang mengelola kredentif otentikasi penyedia API dengan aman. SEBUAH hubungan mendefinisikan metode otorisasi dan kredenSIAL untuk digunakan dalam menghubungkan ke API tertentu. Jika Anda menghubungkan ke API pribadi, seperti API pribadi di Amazon Virtual Private Cloud (Amazon VPC), Anda juga dapat menggunakan koneksi untuk menentukan konektivitas jaringan point-to-point yang aman. Menggunakan koneksi akan membantu Anda menghindari rahasia hard-coding, seperti kunci API, masuk ke definisi mesin status Anda. Sebuah EventBridge koneksi mendukung skema otorisasi Basic, OAuth, dan API Key.

Ketika Anda membuat EventBridge koneksi, Anda memberikan otorisasi dan detail konektivitas jaringan Anda. Anda juga dapat menyertakan parameter header, body, dan query yang diperlukan untuk otorisasi dengan API. Anda harus menyertakan koneksi ARN dalam Tugas HTTP apa pun yang memanggil API HTTPS.

Ketika Anda membuat koneksi, EventBridge menciptakan sebuah rahasia di 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 Manajer Rahasia. Untuk informasi lebih lanjut tentang IAM izin yang dibutuhkan mesin status Anda untuk mengakses EventBridge koneksi, lihat Izin IAM untuk menjalankan Tugas HTTP.

Gambar berikut menunjukkan bagaimana Step Functions menangani otorisasi untuk panggilan API HTTPS menggunakan EventBridge koneksi. EventBridge koneksi mengelola kredenSIAL penyedia API HTTPS. EventBridge menciptakan sebuah rahasia di Secrets Manager untuk menyimpan parameter koneksi dan otorisasi dalam bentuk terenkripsi. Dalam kasus API pribadi, EventBridge juga menyimpan konfigurasi konektivitas jaringan.

Waktu habis untuk koneksi

Permintaan tugas HTTP akan habis waktu setelah 60 detik.

Fungsi Langkah menggunakan otorisasi dan konfigurasi jaringan di EventBridge koneksi untuk panggilan ke titik akhir HTTPS.

Definisi Tugas HTTP

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

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

Bidang Tugas HTTP

Tugas HTTP menyertakan bidang berikut dalam definisinya.

Resource (Wajib)

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

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

Berisi ApiEndpoint, Method, dan ConnectionArn bidang yang menyediakan informasi tentang API HTTPS yang ingin Anda panggil. Parameters juga berisi bidang opsional, seperti Headers dan QueryParameters.

Anda dapat menentukan kombinasi JSON statis dan JsonPath sintaks sebagai Parameters di Parameters bidang. Untuk informasi selengkapnya, lihat Meneruskan parameter ke API layanan di Step Functions.

Untuk menentukan EventBridge koneksi, gunakan salah satu Authentication atau InvocationConfig bidang.

ApiEndpoint (Diperlukan)

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

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

Anda juga dapat menentukan jalur referensi menggunakan JsonPath sintaks untuk memilih node JSON yang berisi URL API HTTPS. Misalnya, Anda ingin memanggil salah satu API Stripe menggunakan ID pelanggan tertentu. Bayangkan Anda telah memberikan input status berikut.

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

Untuk mengambil detail ID pelanggan ini menggunakan API Stripe, 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 ApiEndpoint sebagai berikut.

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

Menentukan metode HTTP yang ingin Anda gunakan untuk memanggil API HTTPS. Anda dapat menentukan salah satu metode ini di Tugas HTTP Anda: GET, POST, PUT, DELETE, PATCH, OPTIONS, atau HEAD.

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

"Method": "GET"

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

Authentication (Bersyarat)

Kami sarankan menggunakan InvocationConfig lebih Authentication untuk panggilan API HTTPS publik dan pribadi.

yang ada Authentication referensi dipertahankan untuk kompatibilitas mundur. Di dalam bidang, Anda harus menentukan ConnectionArn bidang yang menentukan sumber daya koneksi Amazon EventBridge untuk terhubung ke ApiEndpoint.

InvocationConfig (Bersyarat)

Berisi konfigurasi otorisasi dan konektivitas jaringan untuk kedua-duanya panggilan API HTTPS publik dan pribadi.

Step Functions menangani koneksi untuk yang ditentukan ApiEndpoint menggunakan sumber daya koneksi Amazon EventBridge. Untuk informasi lebih lanjut, lihat Menghubungkan ke API pribadi di Amazon EventBridge Panduan Pengguna.

ConnectionArn (Diperlukan)

Menentukan EventBridge koneksi ARN.

Tugas HTTP membutuhkan EventBridge hubungan, yang mengelola kredenSIAL otorisasi penyedia API dengan aman. SEBUAH hubungan menentukan jenis otorisasi dan kredenSIAL yang akan digunakan untuk mengotorisasi API HTTPS. Untuk API pribadi, koneksi juga mendefinisikan konektivitas jaringan point-to-point yang aman. Menggunakan koneksi akan membantu Anda menghindari rahasia hard-coding, seperti kunci API, masuk ke definisi mesin status Anda. Dalam suatu koneksi, Anda juga dapat menentukan Headers, QueryParameters, dan RequestBody parameter.

Untuk informasi selengkapnya, lihat Konektivitas untuk Tugas HTTP.

Contoh berikut menunjukkan format InvocationConfig dalam Tugas HTTP:

"InvocationConfig": { "ConnectionArn": "arn:aws:events:region:account-id:connection/connection-id" }
Headers (Opsional)

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

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

Step Functions menambahkan header yang Anda tentukan di EventBridge koneksi ke header yang Anda tentukan dalam definisi Tugas HTTP. Jika kunci 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 bagaimana Step Functions melakukan penggabungan data, lihat Penggabungan EventBridge koneksi dan data definisi tugas HTTP.

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

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

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

Step Functions mengatur User-Agent, Range, dan Host tajuk. Step Functions menetapkan nilai Host header berdasarkan API yang Anda panggil. Berikut ini adalah contoh dari header ini.

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

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

  • A-IM

  • Accept-Charset

  • Accept-Datetime

  • Accept-Encoding

  • Otorisasi

  • Cache-Control

  • Koneksi

  • Content-Encoding

  • Content-MD5

  • Date

  • Harapkan

  • Diteruskan

  • Dari

  • Host

  • HTTP2-Settings

  • Max-Forwards

  • asal

  • Pragma

  • Proxy-Authenticate

  • Proxy-Authorization

  • Perujuk

  • Server

  • TE

  • Trailer

  • Transfer-Encoding

  • Peningkatan

  • Melalui

  • Peringatan

  • WWW-Authenticate

  • x-terajuk-*

  • x-amz-*

  • x-amzn-*

QueryParameters (Opsional)

Menyisipkan pasangan kunci-nilai di akhir URL API. Anda dapat menentukan parameter kueri sebagai string, array JSON, atau objek JSON. Step Functions otomatis URL-encodes parameter kueri saat memanggil API HTTPS.

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

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

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

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

Anda juga dapat menggunakan jalur referensi untuk menentukan parameter query 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 Tugas HTTP. 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 bagaimana Step Functions melakukan penggabungan data, lihat Penggabungan EventBridge koneksi dan data definisi tugas HTTP.

Transform (Opsional)

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

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

RequestBodyEncoding

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

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

  • URL_ENCODED — Badan permintaan HTTP akan menjadi URL-encoded bentuk data dari RequestBody bidang.

RequestEncodingOptions

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

Step Functions mendukung opsi pengkodean array berikut. Untuk informasi selengkapnya tentang opsi ini dan contohnya, lihat Menerapkan URL-encoding sesuai permintaan badan.

  • 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 dipisahkan koma.

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

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

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

Menerima data JSON yang Anda berikan dalam input status. Dalam RequestBody, Anda dapat menentukan kombinasi JSON statis dan JsonPath sintaks. Misalnya, katakanlah Anda memberikan input status berikut:

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

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

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

Jika API HTTPS yang ingin Anda panggil membutuhkan form-urlencoded badan permintaan, Anda harus menentukan URL-encoding untuk data badan permintaan Anda. Untuk informasi selengkapnya, lihat Menerapkan URL-encoding sesuai permintaan badan.

Penggabungan EventBridge koneksi dan data definisi tugas HTTP

Saat Anda memanggil Tugas HTTP, Anda dapat menentukan data di EventBridge koneksi dan definisi Tugas HTTP Anda. Data ini meliputi Headers, QueryParameters, dan RequestBody parameter. Sebelum memanggil API HTTPS, 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, Tugas HTTP gagal dengan States.Runtime kesalahan.

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

Daftar berikut menjelaskan bagaimana Step Functions menggabungkan data sebelum memanggil API HTTPS:

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

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

  • Parameter tubuh

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

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

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

Contoh berikut menetapkan Headers, QueryParameters, dan RequestBody bidang di Tugas HTTP dan EventBridge koneksi.

Definisi Tugas HTTP

{ "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:region:account-id: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 hubungan

{ "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 Tugas HTTP dan EventBridge koneksi. Oleh karena itu, Step Functions mengganti nilai-nilai dalam Tugas HTTP dengan nilai-nilai dalam koneksi. Cuplikan kode berikut menunjukkan permintaan HTTP yang Step Functions mengirim ke API HTTPS.

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|region {"Job":"Software Engineer","Company":"AnyCompany","BodyParam":"connection_body_param"}

Menerapkan URL-encoding sesuai permintaan badan

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

Anda tentukan URL-encoding menggunakan Transform bidang. Bidang ini berisi RequestBodyEncoding bidang yang menentukan apakah Anda ingin mendaftar atau tidak URL-encoding untuk badan permintaan Anda. Ketika Anda menentukan RequestBodyEncoding lapangan, Step Functions mengonversi badan permintaan JSON Anda menjadi form-urlencoded isi permintaan sebelum memanggil HTTPS API. Anda juga harus menentukan content-type header sebagai application/x-www-form-urlencoded karena API yang menerima URL-encoded Data mengharapkan content-type tajuk.

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

  • INDICES — Mengulangi kunci untuk setiap item dalam array dan menambahkan tanda kurung, [], ke kunci untuk menunjukkan bahwa itu adalah array. Tanda kurung ini berisi indeks elemen array. Penambahan indeks akan 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 dipisahkan 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 tanda kurung, [], 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

Izin IAM untuk menjalankan Tugas HTTP

Peran eksekusi mesin status Anda harus memiliki izin berikut untuk Tugas HTTP untuk memanggil API HTTPS:

  • states:InvokeHTTPEndpoint

  • events:RetrieveConnectionCredentials

  • secretsmanager:GetSecretValue

  • secretsmanager:DescribeSecret

Contoh kebijakan IAM berikut memberikan hak istimewa paling sedikit yang diperlukan untuk peran mesin status Anda untuk memanggil API Stripe. Kebijakan IAM ini juga memberikan izin ke peran mesin status untuk mengakses suatu hal tertentu EventBridge koneksi, 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/*" } ] }
penting

Anda bisa lingkup states:InvokeHTTPEndpoint izin ke mesin status tertentu dengan menentukan mesin status ARN dalam pernyataan kebijakan Resource bidang, tetapi lebih lanjut mencakupi izin menggunakan aws:ResourceTag/${TagKey} kunci kondisi tidak didukung saat ini.

Contoh Tugas HTTP

Definisi mesin status berikut menunjukkan Tugas HTTP yang mencakup Headers, QueryParameters, Transform, dan RequestBody parameter. Tugas HTTP memanggil API Stripe, https://api.stripe.com/v1/invoices, untuk menghasilkan faktur. Tugas HTTP juga menentukan URL-encoding untuk badan permintaan menggunakan INDICES opsi pengkodean.

Pastikan bahwa Anda telah membuat EventBridge koneksi. Contoh berikut menunjukkan koneksi yang dibuat menggunakan tipe autentikasi BASIC.

{ "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:region:account-id: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 permintaan HTTP yang Step Functions mengirim ke API Stripe.

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|region description=Monthly%20subscription&metadata%5Border_details%5D=monthly%20report%20data&customer=1234567890

Menguji Tugas HTTP

Anda dapat menggunakan TestState API melalui konsol, SDK, atau AWS CLI kepada uji Tugas HTTP. Prosedur berikut menjelaskan cara menggunakan TestState API di Step Functions konsol. Anda dapat menguji permintaan API, respons, dan detail otentikasi secara berulang hingga Tugas HTTP Anda berfungsi seperti yang diharapkan.

Menguji status Tugas HTTP di Fungsi Langkah konsol
  1. Buka Konsol Step Functions.

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

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

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

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

  5. Di Status uji kotak dialog, lakukan hal berikut:

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

    2. (Opsional) Berikan input JSON apa pun yang dibutuhkan negara pilihan Anda untuk pengujian.

    3. Untuk Tingkat inspeksi, pertahankan pilihan default dari INFO. Level ini menunjukkan status panggilan API dan output status. Ini berguna untuk memeriksa respon API dengan cepat.

    4. Pilih Mulai tes.

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

      Di dalam Rincian negara tab kotak dialog, Anda dapat melihat definisi status dan tautan ke EventBridge hubungan.

    6. Ubah Tingkat inspeksi kepada JEJAK. Level ini menunjukkan permintaan dan respons HTTP mentah, dan berguna untuk memverifikasi header, parameter kueri, dan lainnya API-specific rincian.

    7. Pilih Mengungkapkan rahasia kotak centang. Dalam kombinasi dengan JEJAK, pengaturan ini memungkinkan Anda melihat data sensitif yang EventBridge sisipan koneksi, seperti kunci API. Yang 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 IAM Kebijakan yang menetapkan states:RevealSecrets izin, lihat IAM izin untuk menggunakan API TestState.

      Gambar berikut menunjukkan tes untuk Tugas HTTP yang berhasil. Yang Tingkat inspeksi Untuk keadaan ini diatur untuk JEJAK. Permintaan & tanggapan HTTP tab pada gambar berikut menunjukkan hasil panggilan API HTTPS.

      Output dari status yang dipilih yang berhasil pengujian untuk JEJAK tingkat.
    8. Pilih Mulai tes.

    9. Jika pengujian berhasil, Anda dapat melihat detail HTTP Anda di bawah Permintaan & tanggapan HTTP tab.

Tanggapan Tugas HTTP yang tidak didukung

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

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

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

Kesalahan koneksi

Jika EventBridge mengalami masalah saat menghubungkan ke API yang ditentukan selama eksekusi alur kerja, Fungsi Langkah memunculkan kesalahan dalam alur kerja Anda. Kesalahan koneksi diawali dengan Events.ConnectionResource..

Kesalahan ini meliputi:

  • Events.ConnectionResource.InvalidConnectionState

  • Events.ConnectionResource.InvalidPrivateConnectionState

  • Events.ConnectionResource.AccessDenied

  • Events.ConnectionResource.ResourceNotFound

  • Events.ConnectionResource.AuthInProgress

  • Events.ConnectionResource.ConcurrentModification

  • Events.ConnectionResource.InternalError