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.
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
Resourcebidang. Untuk Tugas HTTP, Anda menentukanResourcebidang sebagai berikut."Resource": "arn:aws:states:::http:invoke" Parameters(Wajib)-
Berisi
ApiEndpoint,Method, danConnectionArnbidang yang menyediakan informasi tentang API HTTPS yang ingin Anda panggil.Parametersjuga berisi bidang opsional, sepertiHeadersdanQueryParameters.Anda dapat menentukan kombinasi JSON statis dan JsonPath
sintaks sebagai ParametersdiParametersbidang. Untuk informasi selengkapnya, lihat Meneruskan parameter ke API layanan di Step Functions.Untuk menentukan EventBridge koneksi, gunakan salah satu
AuthenticationatauInvocationConfigbidang.ApiEndpoint(Diperlukan)-
Menentukan URL API HTTPS yang ingin Anda panggil. Untuk menambahkan parameter kueri ke URL, gunakan
QueryParametersbidang. 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
ApiEndpointseperti 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
ApiEndpointsebagai 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
Methodbidang sebagai berikut."Method": "GET"Anda juga dapat menggunakan jalur referensi untuk menentukan metode saat runtime. Misalnya,
"Method.$": "$.myHTTPMethod". Authentication(Bersyarat)-
Kami sarankan menggunakan
InvocationConfiglebihAuthenticationuntuk panggilan API HTTPS publik dan pribadi.yang ada
Authenticationreferensi dipertahankan untuk kompatibilitas mundur. Di dalam bidang, Anda harus menentukanConnectionArnbidang yang menentukan sumber daya koneksi Amazon EventBridge untuk terhubung keApiEndpoint. InvocationConfig(Bersyarat)-
Berisi konfigurasi otorisasi dan konektivitas jaringan untuk kedua-duanya panggilan API HTTPS publik dan pribadi.
Step Functions menangani koneksi untuk yang ditentukan
ApiEndpointmenggunakan 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, danRequestBodyparameter.Untuk informasi selengkapnya, lihat Konektivitas untuk Tugas HTTP.
Contoh berikut menunjukkan format
InvocationConfigdalam 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
Headersbidang dalam Tugas HTTP. Kami menyarankan Anda untuk tidak menyertakan detail otentikasi ke penyedia API Anda diHeadersbidang. 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, danHosttajuk. Step Functions menetapkan nilaiHostheader berdasarkan API yang Anda panggil. Berikut ini adalah contoh dari header ini.User-Agent: Amazon|StepFunctions|HttpInvoke|, Range: bytes=0-262144, Host: api.stripe.comregionAnda tidak dapat menggunakan header berikut dalam definisi Tugas HTTP Anda. Jika Anda menggunakan header ini, Tugas HTTP gagal dengan
States.Runtimekesalahan.-
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
QueryParameterssebagai input negara."QueryParameters": { "currency": "usd" }Saat runtime, Step Functions menambahkan
QueryParameterske URL API sebagai berikut.https://api.stripe.com/v1/customers/search?currency=usdAnda 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
RequestBodyEncodingdanRequestEncodingOptionsbidang. Secara default, Step Functions mengirimkan badan permintaan sebagai data JSON ke titik akhir API.Jika penyedia API Anda menerima
form-urlencodedmeminta badan, gunakanTransformbidang untuk menentukan URL-encoding untuk badan permintaan. Anda juga harus menentukancontent-typeheader sebagaiapplication/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:
NONEatauURL_ENCODED.-
NONE— Badan permintaan HTTP akan menjadi JSON serial dariRequestBodybidang. Ini adalah nilai default. -
URL_ENCODED— Badan permintaan HTTP akan menjadi URL-encoded bentuk data dariRequestBodybidang.
-
RequestEncodingOptions-
Menentukan opsi pengkodean yang akan digunakan untuk array di badan permintaan Anda jika Anda menyetel
RequestBodyEncodingkepadaURL_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
COMMASopsi 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 JsonPathsintaks. Misalnya, katakanlah Anda memberikan input status berikut: { "CardNumber": "1234567890", "ExpiryDate": "09/25" }Untuk menggunakan nilai-nilai ini
CardNumberdanExpiryDatedi 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-urlencodedbadan 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
Headersbidang Tugas HTTP. Jika ada konflik antara kunci header, Step Functions menggunakan nilai yang ditentukan dalam koneksi untuk header tersebut. Misalnya, jika Anda menentukancontent-typeheader di definisi Tugas HTTP dan EventBridge koneksi, Step Functions menggunakancontent-typenilai header ditentukan dalam koneksi. -
Parameter kueri -- Step Functions menambahkan parameter kueri yang Anda tentukan dalam koneksi ke parameter kueri di
QueryParametersbidang Tugas HTTP. Jika ada konflik antara kunci parameter query, Step Functions menggunakan nilai yang ditentukan dalam koneksi untuk parameter kueri tersebut. Misalnya, jika Anda menentukanmaxItemsparameter kueri dalam definisi Tugas HTTP dan EventBridge koneksi, Step Functions menggunakanmaxItemsnilai parameter kueri ditentukan dalam koneksi. -
Parameter tubuh
-
Step Functions menambahkan nilai badan permintaan apa pun yang ditentukan dalam koneksi ke badan permintaan di
RequestBodybidang 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 aModebidang diRequestBodydari definisi Tugas HTTP dan EventBridge koneksi. Step Functions menggunakanModenilai 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.Runtimekesalahan.
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:InvokeHTTPEndpointevents:RetrieveConnectionCredentialssecretsmanager:GetSecretValuesecretsmanager: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::stateMachine:123456789012myStateMachine", "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/123456789012oauth_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
-
Buka Konsol Step Functions
. -
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.
-
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.
-
Dalam mode Desain, pilih Status uji di Panel inspektur panel Workflow Studio.
-
Di Status uji kotak dialog, 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 menciptakan peran.
-
(Opsional) Berikan input JSON apa pun yang dibutuhkan negara pilihan Anda untuk pengujian.
-
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.
-
Pilih Mulai tes.
-
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.
-
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.
-
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:RevealSecretstindakan. Tanpa izin ini, Step Functions melempar kesalahan akses ditolak saat Anda memulai pengujian. Sebagai contoh dari IAM Kebijakan yang menetapkanstates:RevealSecretsizin, 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.
-
Pilih Mulai tes.
-
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/*, atauaudio/*. -
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.InvalidConnectionStateEvents.ConnectionResource.InvalidPrivateConnectionStateEvents.ConnectionResource.AccessDeniedEvents.ConnectionResource.ResourceNotFoundEvents.ConnectionResource.AuthInProgressEvents.ConnectionResource.ConcurrentModificationEvents.ConnectionResource.InternalError