Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Panggil HTTPS APIs dalam alur kerja Step Functions
Tugas HTTP adalah jenis Status alur kerja tugas status yang memungkinkan Anda memanggil API HTTPS dalam alur kerja Anda. API dapat bersifat publik, seperti aplikasi SaaS pihak ketiga seperti Stripe atau Salesforce. Anda juga dapat memanggil API pribadi, seperti aplikasi berbasis HTTP di Amazon Virtual Private Cloud.
Untuk otorisasi dan konektivitas jaringan, Tugas HTTP memerlukan EventBridge koneksi.
Untuk memanggil API HTTPS, gunakan status Tugas dengan arn:aws:states:::http:invoke
sumber daya. Kemudian, berikan detail konfigurasi titik akhir API, seperti URL API, metode yang ingin Anda gunakan, dan detail koneksi.
Jika Anda menggunakan Workflow Studio untuk membangun mesin status yang berisi Tugas HTTP, Workflow Studio akan secara otomatis menghasilkan peran eksekusi IAM kebijakan untuk Tugas HTTP. Untuk informasi selengkapnya, lihat Peran untuk menguji Tugas HTTP di Workflow Studio.
catatan
HTTP Task saat ini hanya mendukung nama domain publik dengan sertifikat tepercaya publik untuk titik akhir HTTPS saat menggunakan private. APIs HTTP Task tidak mendukung mutual TLS (mTLS).
Konektivitas untuk Tugas HTTP
Tugas HTTP memerlukan EventBridgekoneksi, yang mengelola kredensi otentikasi penyedia API dengan aman. Koneksi mendefinisikan metode otorisasi dan kredensi yang akan digunakan dalam menghubungkan ke API tertentu. Jika Anda terhubung ke API pribadi, seperti API pribadi di Amazon Virtual Private Cloud (Amazon VPC), Anda juga dapat menggunakan koneksi untuk menentukan konektivitas point-to-point jaringan yang aman. Menggunakan koneksi membantu Anda menghindari rahasia hard-coding, seperti kunci API, ke dalam definisi mesin status Anda. EventBridge Koneksi mendukung skema otorisasi Basic OAuth, dan API Key.
Saat 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 ARN koneksi dalam Tugas HTTP apa pun yang memanggil API HTTPS.
Saat Anda membuat koneksi, EventBridge buat 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 Secrets Manager 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, lihatIzin IAM untuk menjalankan Tugas HTTP.
Gambar berikut menunjukkan bagaimana Step Functions menangani otorisasi untuk panggilan API HTTPS menggunakan EventBridge koneksi. Bagian EventBridge koneksi mengelola kredensyal penyedia API HTTPS. EventBridge menciptakan rahasia di Secrets Manager untuk menyimpan parameter koneksi dan otorisasi dalam bentuk terenkripsi. Dalam kasus pribadi APIs, EventBridge juga menyimpan konfigurasi konektivitas jaringan.
Batas waktu untuk koneksi
Permintaan tugas HTTP akan habis waktu setelah 60 detik.

Definisi Tugas HTTP
Definisi ASL mewakili Tugas HTTP dengan http:invoke
sumber daya. Definisi HTTP Task berikut memanggil Stripe API 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:us-east-2
:123456789012
:connection/Stripe/81210c42-8af1-456b-9c4a-6ff02fc664ac"
},
"Method": "GET"
},
"End": true
}
Bidang Tugas HTTP
Tugas HTTP mencakup bidang-bidang berikut dalam definisinya.
Resource
(Wajib)-
Untuk menentukan jenis tugas, berikan ARN di lapangan.
Resource
Untuk Tugas HTTP, Anda menentukanResource
bidang sebagai berikut."Resource": "arn:aws:states:::http:invoke"
Parameters
(Wajib)-
Berisi
ApiEndpoint
,Method
, danConnectionArn
bidang yang menyediakan informasi tentang HTTPS API yang ingin Anda panggil.Parameters
juga berisi bidang opsional, sepertiHeaders
danQueryParameters
.Anda dapat menentukan kombinasi JSON statis dan JsonPath
sintaks seperti Parameters
di lapangan.Parameters
Untuk informasi selengkapnya, lihat Meneruskan parameter ke API layanan di Step Functions.Untuk menentukan EventBridge koneksi, gunakan
InvocationConfig
bidangAuthentication
atau.ApiEndpoint
(Diperlukan)-
Menentukan URL dari HTTPS API yang ingin Anda panggil. Untuk menambahkan parameter kueri ke URL, 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 JsonPath
sintaks untuk memilih simpul JSON yang berisi URL API HTTPS. 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 detail ID pelanggan ini menggunakan Stripe API, 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 metode HTTP yang ingin Anda gunakan untuk memanggil API HTTPS. Anda dapat menentukan salah satu metode ini dalam 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)-
Anda harus menentukan salah satu
Authentication
atauInvocationConfig
.Berisi
ConnectionArn
bidang yang menentukan cara mengautentikasi panggilan API HTTPS publik. Step Functions mendukung otentikasi untuk yang ditentukanApiEndpoint
menggunakan sumber daya koneksi Amazon EventBridge.ConnectionArn
(Diperlukan)-
Menentukan EventBridge koneksi ARN.
Tugas HTTP memerlukan EventBridge koneksi, yang mengelola kredenal otorisasi penyedia API dengan aman. Koneksi menentukan jenis otorisasi dan kredensi yang akan digunakan untuk mengotorisasi API HTTPS. Menggunakan koneksi membantu Anda menghindari rahasia hard-coding, seperti kunci API, ke dalam definisi mesin status Anda. Dalam koneksi, Anda juga dapat menentukan
Headers
,QueryParameters
, danRequestBody
parameter.Untuk informasi selengkapnya, lihat Konektivitas untuk Tugas HTTP.
Contoh berikut menunjukkan bagaimana Anda dapat menentukan
Authentication
bidang dalam definisi Tugas HTTP Anda."Authentication": { "ConnectionArn": "arn:aws:events:us-east-2:
123456789012
:connection/Stripe/81210c42-8af1-456b-9c4a-6ff02fc664ac" } InvocationConfig
(Bersyarat)-
Anda harus menentukan salah satu
Authentication
atauInvocationConfig
.Berisi otorisasi dan konfigurasi konektivitas jaringan untuk panggilan API HTTPS pribadi. Step Functions mendukung koneksi untuk yang ditentukan
ApiEndpoint
menggunakan sumber daya koneksi Amazon EventBridge. Untuk informasi selengkapnya, lihat Menyambung ke pribadi APIs di Panduan EventBridge Pengguna Amazon.ConnectionArn
(Diperlukan)-
Menentukan EventBridge koneksi ARN.
Tugas HTTP memerlukan EventBridge koneksi, yang mengelola kredenal otorisasi penyedia API dengan aman. Koneksi menentukan jenis otorisasi dan kredensi yang akan digunakan untuk mengotorisasi API HTTPS. Untuk pribadi APIs, koneksi juga mendefinisikan konektivitas point-to-point jaringan yang aman. Menggunakan koneksi membantu Anda menghindari rahasia hard-coding, seperti kunci API, ke dalam definisi mesin status Anda. Dalam koneksi, Anda juga dapat menentukan
Headers
,QueryParameters
, danRequestBody
parameter.Untuk informasi selengkapnya, lihat Konektivitas untuk Tugas HTTP.
Contoh berikut menunjukkan bagaimana Anda dapat menentukan
InvocationConfig
bidang dalam definisi Tugas HTTP Anda."InvocationConfig": { "ConnectionArn": "arn:aws:events:
us-east-2
:123456789012
:connection/connection-id
" } Headers
(Opsional)-
Menyediakan konteks dan metadata tambahan ke titik akhir API. Anda dapat menentukan header sebagai string atau array JSON.
Anda dapat menentukan header di EventBridge koneksi dan
Headers
bidang dalam Tugas HTTP. Kami menyarankan agar Anda tidak menyertakan detail otentikasi ke penyedia API Anda diHeaders
bidang ini. 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 Tugas HTTP. 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 Tugas HTTP.
Contoh berikut menentukan header yang akan disertakan dalam panggilan HTTPS API:
content-type
."Headers": { "content-type": "application/json" }
Anda juga dapat menggunakan jalur referensi untuk menentukan header saat runtime. Misalnya,
"Headers.$": "$.myHTTPHeaders"
.Step Functions menetapkan
User-Agent
,Range
, danHost
header. Step Functions menetapkan nilaiHost
header berdasarkan API yang Anda panggil. Berikut ini adalah contoh dari header ini.User-Agent: Amazon|StepFunctions|HttpInvoke|
us-east-1
, Range: bytes=0-262144, Host: api.stripe.comAnda tidak dapat menggunakan header berikut dalam definisi Tugas HTTP Anda. Jika Anda menggunakan header ini, Tugas HTTP 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 nilai kunci di akhir URL API. Anda dapat menentukan parameter kueri sebagai string, array JSON, atau objek JSON. Step Functions secara otomatis URL-menyandikan parameter kueri saat memanggil API HTTPS.
Misalnya, katakan bahwa Anda ingin memanggil 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 URL API 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 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 caranya Step Functions melakukan penggabungan data, lihatPenggabungan EventBridge koneksi dan data definisi Tugas HTTP.
Transform
(Opsional)-
Berisi
RequestBodyEncoding
danRequestEncodingOptions
bidang. Secara default, Step Functions mengirimkan badan permintaan sebagai data JSON ke titik akhir API.Jika penyedia API Anda menerima badan
form-urlencoded
permintaan, gunakanTransform
bidang untuk menentukan pengkodean URL untuk badan permintaan. Anda juga harus menentukancontent-type
header sebagaiapplication/x-www-form-urlencoded
. Step Functions kemudian secara otomatis URL-menyandikan badan permintaan Anda.RequestBodyEncoding
-
Menentukan URL-encoding dari badan permintaan Anda. Anda dapat menentukan satu nilai ini:
NONE
atauURL_ENCODED
.-
NONE
— Badan permintaan HTTP akan menjadi JSON serialisasi lapangan.RequestBody
Ini adalah nilai default. -
URL_ENCODED
— Badan permintaan HTTP akan menjadi data formulir yang dikodekan URL 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 pengkodean URL 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 data JSON yang Anda berikan dalam input status. Di
RequestBody
, Anda dapat menentukan kombinasi JSON statis dan JsonPathsintaks. Misalnya, katakan bahwa Anda memberikan masukan status berikut: { "CardNumber": "1234567890", "ExpiryDate": "09/25" }
Untuk menggunakan nilai-nilai ini dari
CardNumber
danExpiryDate
dalam 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 HTTPS API yang ingin Anda panggil memerlukan badan
form-urlencoded
permintaan, Anda harus menentukan pengkodean URL untuk data badan permintaan Anda. Untuk informasi selengkapnya, lihat Menerapkan pengkodean URL pada badan permintaan.
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 mencakupHeaders
,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 menimpa 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 tombol header, Step Functions menggunakan nilai yang ditentukan dalam koneksi untuk header tersebut. Misalnya, jika Anda menentukancontent-type
header dalam definisi Tugas HTTP dan EventBridge koneksi, Step Functions menggunakan nilaicontent-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 Tugas HTTP. Jika ada konflik antara kunci parameter kueri, Step Functions menggunakan nilai yang ditentukan dalam koneksi untuk parameter kueri tersebut. Misalnya, jika Anda menentukan parametermaxItems
kueri dalam definisi Tugas HTTP dan EventBridge koneksi, Step Functions menggunakan nilai parametermaxItems
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 Tugas HTTP. Jika ada konflik antara kunci badan permintaan, Step Functions menggunakan nilai yang ditentukan dalam koneksi untuk badan permintaan. Misalnya, katakan bahwa Anda menentukanMode
bidang dalamRequestBody
definisi HTTP Task dan EventBridge koneksi. Step Functions menggunakan nilaiMode
bidang yang Anda tentukan dalam koneksi. -
Jika Anda menentukan badan permintaan sebagai string, bukan objek JSON, dan EventBridge koneksi juga berisi badan permintaan, Step Functions tidak dapat menggabungkan badan permintaan yang ditentukan di kedua tempat 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 menetapkanHeaders
,QueryParameters
, dan RequestBody
bidang di kedua 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: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 Tugas HTTP dan EventBridge koneksi. Oleh karena itu, Step Functions menimpa nilai-nilai dalam Tugas HTTP dengan nilai-nilai dalam koneksi. Cuplikan kode berikut menunjukkan permintaan HTTP yang Step Functions mengirim ke HTTPS API.
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 pengkodean URL pada badan permintaan
Secara default, Step Functions mengirimkan badan permintaan sebagai data JSON ke titik akhir API. Jika penyedia API HTTPS Anda memerlukan badan form-urlencoded
permintaan, Anda harus menentukan pengkodean URL untuk badan permintaan. Step Functions kemudian secara otomatis URL-menyandikan badan permintaan berdasarkan opsi pengkodean URL yang Anda pilih.
Anda menentukan pengkodean URL menggunakan bidang. Transform
Bidang ini berisi RequestBodyEncoding
bidang yang menentukan apakah Anda ingin menerapkan pengkodean URL untuk badan permintaan Anda atau tidak. Saat Anda menentukan RequestBodyEncoding
bidang, Step Functions mengonversi badan permintaan JSON Anda menjadi badan form-urlencoded
permintaan sebelum memanggil HTTPS API. Anda juga harus menentukan content-type
header application/x-www-form-urlencoded
karena menerima data APIs yang dikodekan URL 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
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 Stripe. APIs Kebijakan IAM 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/*" } ] }
Contoh Tugas HTTP
Definisi mesin status berikut menunjukkan Tugas HTTP yang mencakupHeaders
,, QueryParameters
Transform
, dan RequestBody
parameter. Tugas HTTP memanggil Stripe API, https://api.stripe.com/v1/ faktur, untuk menghasilkan faktur. Tugas HTTP juga menentukan URL-encoding untuk badan permintaan menggunakan opsi encoding. INDICES
Pastikan bahwa Anda telah membuat sebuah EventBridge koneksi. Contoh berikut menunjukkan koneksi yang dibuat menggunakan jenis 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:
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 permintaan HTTP yang Step Functions mengirim ke Stripe API.
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 Tugas HTTP
Anda dapat menggunakan TestStateAPI melalui konsol, SDK, atau AWS CLI untuk menguji Tugas HTTP. Prosedur berikut menjelaskan cara menggunakan TestState API di Step Functions konsol. Anda dapat menguji detail permintaan, respons, dan autentikasi API secara berulang hingga Tugas HTTP berfungsi seperti yang diharapkan.
Uji status Tugas HTTP di Step Functions konsol
-
Buka Konsol Step Functions
. -
Pilih Buat mesin status untuk mulai membuat mesin status atau pilih mesin status yang ada yang berisi Tugas HTTP.
Lihat Langkah 4 jika Anda menguji tugas di mesin status yang ada.
-
Di Mode desain Workflow Studio, konfigurasikan Tugas HTTP secara visual. Atau pilih mode Kode untuk menyalin-menempelkan definisi mesin status dari lingkungan pengembangan lokal Anda.
-
Dalam mode Desain, pilih Status uji di Panel Inspector panel Workflow Studio.
-
Dalam kotak dialog Test state, lakukan hal berikut:
-
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 membuat peran.
-
(Opsional) Berikan masukan JSON apa pun yang dibutuhkan status yang Anda pilih untuk pengujian.
-
Untuk tingkat Inspeksi, pertahankan pilihan default INFO. Level ini menunjukkan status panggilan API dan output status. Ini berguna untuk memeriksa respons API dengan cepat.
-
Pilih Mulai tes.
-
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.
-
Ubah level Inspeksi menjadi TRACE. Level ini menunjukkan permintaan dan respons HTTP mentah, dan berguna untuk memverifikasi header, parameter kueri, dan detail spesifik API lainnya.
-
Pilih kotak centang Mengungkapkan rahasia. Dalam kombinasi dengan TRACE, pengaturan ini memungkinkan Anda melihat data sensitif yang EventBridge sisipan koneksi, seperti kunci API. 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 menetapkanstates:RevealSecrets
izin, lihatIAM izin untuk menggunakan API TestState .Gambar berikut menunjukkan tes untuk Tugas HTTP yang berhasil. Tingkat Inspeksi untuk status ini diatur ke TRACE. Tab permintaan & respons HTTP pada gambar berikut menunjukkan hasil panggilan HTTPS API.
-
Pilih Mulai tes.
-
Jika pengujian berhasil, Anda dapat melihat detail HTTP Anda di bawah tab permintaan & respons HTTP.
-
Respons 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
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 menyambung ke API yang ditentukan selama eksekusi alur kerja, Step Functions memunculkan kesalahan dalam alur kerja Anda. Kesalahan koneksi diawali denganEvents.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