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 dengan 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 untuk 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 selengkapnya tentang IAM izin yang dibutuhkan mesin status Anda untuk mengakses EventBridge sambungan, lihatIzin IAM untuk menjalankan Tugas HTTP.
Gambar berikut menunjukkan cara Step Functions menangani otorisasi untuk panggilan API HTTPS menggunakan EventBridge koneksi. EventBridgeKoneksi mengelola kredensyal penyedia API HTTPS. EventBridgemembuat rahasia Secrets Manager untuk menyimpan koneksi dan parameter 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:region
:account-id
: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 API HTTPS 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 node 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
bidangnya 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 Functionsmendukung otentikasi untuk yang ditentukanApiEndpoint
menggunakan sumber daya koneksi dari. Amazon EventBridgeConnectionArn
(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:
account-id
: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 Functionsmendukung koneksi untuk yang ditentukan
ApiEndpoint
menggunakan sumber daya koneksi dariAmazon 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:
region
:account-id
: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 dalam 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 Anda.Step Functionsmenambahkan header yang Anda tentukan dalam EventBridge koneksi ke header yang Anda tentukan dalam definisi Tugas HTTP. Jika tombol header yang sama hadir dalam definisi dan koneksi, Step Functions gunakan nilai yang sesuai yang ditentukan dalam EventBridge koneksi untuk header tersebut. Untuk informasi selengkapnya tentang cara Step Functions melakukan penggabungan data, lihatMenggabungkan 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 Functionsmenetapkan
User-Agent
,Range
, danHost
header. Step Functionsmenetapkan nilaiHost
header berdasarkan API yang Anda panggil. Berikut ini adalah contoh dari header ini.User-Agent: Amazon|StepFunctions|HttpInvoke|
, Range: bytes=0-262144, Host: api.stripe.comregion
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
-
Terima-Charset
-
Terima-Datetime
-
Terima-Pengenkodean
-
Otorisasi
-
Cache-Control
-
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 Functionssecara 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 dalam EventBridge koneksi Anda, Step Functions tambahkan parameter kueri ini ke parameter kueri yang Anda tentukan dalam definisi Tugas HTTP. Jika kunci parameter kueri yang sama ada dalam definisi dan koneksi, Step Functions gunakan nilai yang sesuai yang ditentukan dalam EventBridge koneksi untuk header tersebut. Untuk informasi selengkapnya tentang cara Step Functions melakukan penggabungan data, lihatMenggabungkan 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 Functionskemudian 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 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 Functionsmendukung opsi pengkodean array berikut. Untuk informasi selengkapnya tentang opsi ini dan contohnya, lihatMenerapkan pengkodean URL pada badan permintaan.
-
INDICES
— Mengkodekan array menggunakan nilai indeks elemen array. Secara default, Step Functions gunakan 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.
Menggabungkan EventBridge koneksi dan data definisi Tugas HTTP
Saat Anda menjalankan Tugas HTTP, Anda dapat menentukan data dalam 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 timpa nilai dalam Tugas HTTP dengan nilai-nilai dalam koneksi.
Daftar berikut menjelaskan cara 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 gunakan nilai yang ditentukan dalam koneksi untuk header tersebut. Misalnya, jika Anda menentukancontent-type
header dalam definisi HTTP Task 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 gunakan nilai yang ditentukan dalam koneksi untuk parameter kueri tersebut. Misalnya, jika Anda menentukan parametermaxItems
kueri dalam definisi HTTP Task dan EventBridge koneksi, Step Functions menggunakan nilai parametermaxItems
kueri yang ditentukan dalam koneksi. -
Parameter tubuh
-
Step Functionsmenambahkan 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 gunakan nilai yang ditentukan dalam koneksi untuk badan permintaan. Misalnya, katakan bahwa Anda menentukanMode
bidang dalamRequestBody
definisi HTTP Task dan EventBridge koneksi. Step Functionsmenggunakan nilaiMode
bidang yang Anda tentukan dalam koneksi. -
Jika Anda menentukan badan permintaan sebagai string alih-alih objek JSON, dan EventBridge koneksi juga berisi badan permintaan, tidak Step Functions dapat menggabungkan badan permintaan yang ditentukan di kedua tempat ini. Gagal Tugas HTTP dengan
States.Runtime
kesalahan.
Step Functionsmenerapkan 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:
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"
} } } } }
EventBridgekoneksi
{ "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 dikirim 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|region
{"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 Functionskemudian 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 berikan 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 gunakan opsi pengkodean ini.Misalnya, jika badan permintaan Anda berisi array berikut.
{"array": ["a","b","c","d"]}
Step Functionsmengkodekan 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 Functionsmengkodekan 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 Functionsmengkodekan 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 Functionsmengkodekan 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:
:stateMachine:
account-id
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::connection/
account-id
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 Anda telah membuat 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:
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 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|region
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 permintaan API, respons, dan detail otentikasi 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-tempel 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 status dan tautan ke EventBridgekoneksi Anda.
-
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 Reveal Secrets. Dalam kombinasi dengan TRACE, pengaturan ini memungkinkan Anda melihat data sensitif yang disisipkan EventBridge koneksi, seperti kunci API. Identitas IAM 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. Untuk contoh IAM kebijakan yang menetapkanstates:RevealSecrets
izin, lihatIAMizin 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 HTTP Task 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