Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Panggil Amazon EKS dengan Step Functions
Step Functions dapat mengontrol AWS layanan tertentu langsung dari Amazon States Language (ASL). Untuk mempelajari selengkapnya, lihat Bekerja dengan layanan yang lain dan Meneruskan parameter ke API layanan.
Bagaimana integrasi Amazon EKS yang Dioptimalkan berbeda dari integrasi Amazon EKS AWS SDK
-
Pola Jalankan Tugas (.sync) integrasi didukung.
-
Tidak ada pengoptimalan untuk pola Minta Tanggapan integrasi.
-
Pola Tunggu Panggilan Balik dengan Token Tugas integrasi tidak didukung.
Untuk informasi tentang cara mengonfigurasi IAM izin saat menggunakan Step Functions dengan AWS layanan lain, lihatKebijakan IAM untuk layanan terintegrasi.
Step Functions menyediakan dua tipe API integrasi layanan untuk mengintegrasikan dengan Amazon Elastic Kubernetes Service. Satu memungkinkan Anda menggunakan API Amazon EKS untuk membuat dan mengelola klaster Amazon EKS. Yang lain memungkinkan Anda berinteraksi dengan klaster Anda menggunakan API Kubernetes dan menjalankan tugas sebagai bagian dari alur kerja aplikasi Anda. Anda dapat menggunakan integrasi API Kubernetes dengan klaster Amazon EKS yang dibuat menggunakan Step Functions, dengan klaster Amazon EKS yang dibuat oleh alat eksctl atau konsol Amazon EKS
catatan
Integrasi EKS Step Functions hanya mendukung API Kubernetes dengan akses titik akhir publik. Secara default, titik akhir server API kluster EKS memiliki akses publik. Untuk informasi selengkapnya, lihat kontrol akses titik akhir klaster Amazon EKS di Panduan Pengguna Amazon EKS.
Step Functions tidak mengakhiri klaster Amazon EKS secara otomatis jika eksekusi dihentikan. Jika mesin status Anda berhenti sebelum klaster Amazon EKS Anda telah dihentikan, klaster Anda dapat terus berjalan tanpa batas, dan dapat menarik biaya tambahan. Untuk menghindari hal ini, pastikan bahwa setiap klaster Amazon EKS yang Anda buat diakhiri dengan benar. Untuk informasi selengkapnya, lihat:
-
Menghapus klaster dalam Panduan Pengguna Amazon EKS.
-
Jalankan Tugas (.sync) dalam Pola Integrasi Layanan.
catatan
Ada kuota untuk input maksimum atau ukuran data hasil untuk tugas di Step Functions. Ini membatasi Anda untuk 256 KB data sebagai string UTF-8 yang dikodekan ketika Anda mengirim ke, atau menerima data dari, layanan lain. Lihat Kuota yang berkaitan dengan eksekusi mesin status.
Integrasi API Kubernetes
Step Functions mendukung API Kubernetes berikut:
RunJob
Integrasi layanan eks:runJob
mengizinkan Anda untuk menjalankan tugas di klaster Amazon EKS Anda. Varian eks:runJob.sync
mengizinkan Anda menunggu tugas selesai, dan, opsional mengambil log.
Server API Kubernetes Anda harus memberikan izin ke IAM role yang digunakan oleh mesin status Anda. Untuk informasi selengkapnya, lihat Izin.
Untuk pola Jalankan Tugas (.sync
), status tugas ditentukan melalui polling. Step Functions awalnya menjajak pendapat dengan angka sekitar 1 jajak pendapat per menit. Angka ini akhirnya melambat menjadi sekitar 1 jajak pendapat setiap 5 menit. Jika Anda memerlukan polling yang lebih sering, atau memerlukan lebih banyak kontrol atas strategi polling, Anda dapat menggunakan integrasi eks:call
untuk mengueri status tugas.
Integrasi eks:runJob
khusus untuk Tugas Kubernetes batch/v1
. Untuk informasi selengkapnya, lihat Tugaseks:call
. Anda dapat menggunakan Step Functions untuk membangun loop polling, seperti yang ditunjukkan dalam proyek sampel Polling untuk Status Pekerjaan (Lambda,) AWS Batch.
Parameter yang didukung meliputi:
-
ClusterName
: Nama klaster Amazon EKS yang ingin Anda panggil.-
Type
:String
-
Wajib: ya
-
-
CertificateAuthority
: Data sertifikat yang dikodekan Base64 yang diperlukan untuk berkomunikasi dengan klaster Anda. Anda dapat memperoleh nilai ini dari konsol Amazon EKSatau dengan menggunakan Amazon EKS DescribeClusterAPI. -
Type
:String
-
Wajib: ya
-
-
Endpoint
: URL titik akhir untuk server API Kubernetes Anda. Anda dapat memperoleh nilai ini dari konsol Amazon EKSatau dengan menggunakan Amazon EKS DescribeClusterAPI. -
Type
:String
-
Wajib: ya
-
-
Namespace
: Namespace tempat menjalankan tugas. Jika tidak tersedia, namespacedefault
digunakan.-
Type
:String
-
Wajib: tidak
-
-
Job
: Ketentuan Tugas Kubernetes. Lihat Tugasdalam dokumentasi Kubernetes. -
Type
:JSON
atauString
-
Wajib: ya
-
-
LogOptions
: Satu set pilihan untuk mengontrol pengambilan opsional log. Hanya berlaku jika pola integrasi layanan Jalankan Tugas (.sync) digunakan untuk menunggu penyelesaian tugas.-
Type
:JSON
-
Wajib: tidak
-
Log termasuk dalam respons dalam kunci
logs
. Mungkin ada beberapa pod dalam tugas, masing-masing dengan beberapa kontainer.{ ... "logs": { "pods": { "pod1": { "containers": { "container1": { "log":
<log>
}, ... } }, ... } } -
Pengambilan log dilakukan dengan dasar upaya-terbaik. Jika ada kesalahan mengambil log, menggantikan bidang
log
akan ada bidangerror
dancause
.
-
-
LogOptions.RetrieveLogs
: Aktifkan pengambilan log setelah tugas selesai. Secara default, log tidak diambil.-
Type
:Boolean
-
Wajib: tidak
-
-
LogOptions.RawLogs
: JikaRawLogs
diatur ke BETUL, log akan dikembalikan sebagai string mentah tanpa mencoba untuk mengurainya ke JSON. Secara default, log dideserialisasikan ke JSON jika memungkinkan. Dalam beberapa kasus penguraian tersebut dapat memperkenalkan perubahan yang tidak diinginkan, seperti membatasi ketepatan angka yang mengandung banyak digit.-
Type
:Boolean
-
Wajib: tidak
-
-
LogOptions.LogParameters
: API Log Baca API Kubernetes API mendukung parameter kueri untuk mengontrol pengambilan log. Misalnya, Anda dapat menggunakantailLines
ataulimitBytes
untuk membatasi ukuran log yang diambil dan tetap berada dalam kuota ukuran data Step Functions. Untuk informasi selengkapnya, lihat bagian Log bacadari Referensi API Kubernetes. -
Type:
PetaString
keList of Strings
-
Wajib: tidak
-
Contoh:
"LogParameters": { "tailLines": [ "6" ] }
-
Contoh berikut mencakup status Task
yang menjalankan tugas, menunggunya selesai, kemudian mengambil log tugas:
{
"StartAt": "Run a job on EKS",
"States": {
"Run a job on EKS": {
"Type": "Task",
"Resource": "arn:aws:states:::eks:runJob.sync",
"Parameters": {
"ClusterName": "MyCluster",
"CertificateAuthority": "ANPAJ2UCCR6DPCEXAMPLE",
"Endpoint": "https://AKIAIOSFODNN7EXAMPLE.yl4.us-east-1.eks.amazonaws.com",
"LogOptions": {
"RetrieveLogs": true
},
"Job": {
"apiVersion": "batch/v1",
"kind": "Job",
"metadata": {
"name": "example-job"
},
"spec": {
"backoffLimit": 0,
"template": {
"metadata": {
"name": "example-job"
},
"spec": {
"containers": [
{
"name": "pi-2000",
"image": "perl",
"command": [ "perl" ],
"args": [
"-Mbignum=bpi",
"-wle",
"print bpi(2000)"
]
}
],
"restartPolicy": "Never"
}
}
}
}
},
"End": true
}
}
}
Call
Integrasi layanan eks:call
mengizinkan Anda untuk menggunakan API Kubernetes untuk membaca dan menulis objek sumber daya Kubernetes melalui titik akhir API Kubernetes.
Server API Kubernetes Anda harus memberikan izin ke IAM role yang digunakan oleh mesin status Anda. Untuk informasi selengkapnya, lihat Izin.
Untuk informasi selengkapnya tentang operasi yang tersedia, lihat Referensi API Kubernetes
Parameter yang didukung untuk Call
termasuk:
-
ClusterName
: Nama klaster Amazon EKS yang ingin Anda panggil.-
Type
: String -
Diperlukan: Ya
-
-
CertificateAuthority
: Data sertifikat yang dikodekan Base64 yang diperlukan untuk berkomunikasi dengan klaster Anda. Anda dapat memperoleh nilai ini dari konsol Amazon EKSatau dengan menggunakan Amazon EKS DescribeClusterAPI. -
Type
:String
-
Diperlukan: Ya
-
-
Endpoint
: URL titik akhir untuk server API Kubernetes Anda. Anda dapat menemukan nilai ini di konsol Amazon EKSatau dengan menggunakan DescribeCluster API Amazon EKS. -
Type
:String
-
Diperlukan: Ya
-
-
Method
: Metode HTTP permintaan Anda. Salah satu:GET
,POST
,PUT
,DELETE
,HEAD
, atauPATCH
.-
Type
:String
-
Diperlukan: Ya
-
-
Path
: Jalur HTTP dari operasi API REST Kubernetes.-
Type
:String
-
Diperlukan: Ya
-
-
QueryParameters
: Parameter kueri HTTP dari operasi API REST Kubernetes.-
Type:
PetaString
keList of Strings
-
Diperlukan: Tidak
-
Contoh:
"QueryParameters": { "labelSelector": [ "job-name=example-job" ] }
-
-
RequestBody
: Isi pesan HTTP operasi API REST Kubernetes.-
Type
:JSON
atauString
-
Diperlukan: Tidak
-
Berikut ini mencakup status Task
yang menggunakan eks:call
untuk mencantumkan pod milik tugas example-job
.
{
"StartAt": "Call EKS",
"States": {
"Call EKS": {
"Type": "Task",
"Resource": "arn:aws:states:::eks:call",
"Parameters": {
"ClusterName": "MyCluster",
"CertificateAuthority": "ANPAJ2UCCR6DPCEXAMPLE",
"Endpoint": "https://444455556666.yl4.us-east-1.eks.amazonaws.com",
"Method": "GET",
"Path": "/api/v1/namespaces/default/pods",
"QueryParameters": {
"labelSelector": [
"job-name=example-job"
]
}
},
"End": true
}
}
}
Berikut ini mencakup status Task
yang menggunakan eks:call
untuk menghapus tugas example-job
, dan menetapkan propagationPolicy
untuk memastikan pod tugas juga dihapus.
{
"StartAt": "Call EKS",
"States": {
"Call EKS": {
"Type": "Task",
"Resource": "arn:aws:states:::eks:call",
"Parameters": {
"ClusterName": "MyCluster",
"CertificateAuthority": "ANPAJ2UCCR6DPCEXAMPLE",
"Endpoint": "https://444455556666.yl4.us-east-1.eks.amazonaws.com",
"Method": "DELETE",
"Path": "/apis/batch/v1/namespaces/default/jobs/example-job",
"QueryParameters": {
"propagationPolicy": [
"Foreground"
]
}
},
"End": true
}
}
}
API Amazon EKS yang didukung
API Amazon EKS dan sintaksis yang didukung meliputi:
-
-
Ketika klaster Amazon EKS dibuat menggunakan integrasi layanan
eks:createCluster
, IAM role ditambahkan ke tabel otorisasi RBAC Kubernetes sebagai administrator (dengan izin system:masters) Awalnya, hanya entitas IAM yang dapat melakukan panggilan ke server API Kubernetes. Untuk informasi selengkapnya, lihat:-
Mengelola pengguna atau IAM role untuk klaster Anda di Panduan Pengguna Amazon EKS
-
Bagian Izin
Amazon EKS menggunakan peran tertaut layanan yang berisi izin yang diperlukan Amazon EKS untuk memanggil layanan lain atas nama Anda. Jika peran tertaut layanan ini belum ada di akun Anda, Anda harus menambahkan izin
iam:CreateServiceLinkedRole
untuk IAM role yang digunakan oleh Step Functions. Untuk informasi lebih lanjut, lihat Menggunakan Peran Terkait Layanan dalam Panduan Pengguna Amazon EKS.IAM role yang digunakan oleh Step Functions harus memiliki izin
iam:PassRole
untuk meneruskan IAM peran klaster ke Amazon EKS. Untuk informasi selengkapnya, lihat IAM role klaster Amazon EKS di Panduan Pengguna Amazon EKS. -
-
-
Anda harus menghapus profil Fargate atau grup simpul sebelum menghapus klaster.
-
-
Amazon EKS menggunakan peran tertaut layanan yang berisi izin yang diperlukan Amazon EKS untuk memanggil layanan lain atas nama Anda. Jika peran tertaut layanan ini belum ada di akun Anda, Anda harus menambahkan izin
iam:CreateServiceLinkedRole
untuk IAM role yang digunakan oleh Step Functions. Untuk informasi lebih lanjut, lihat Menggunakan Peran Tertaut Layanan dalam Panduan Pengguna Amazon EKS.Amazon EKS di Fargate mungkin tidak tersedia di semua wilayah. Untuk informasi tentang ketersediaan wilayah, lihat bagian di Fargate di Panduan Pengguna Amazon EKS.
IAM role yang digunakan oleh Step Functions harus memiliki izin
iam:PassRole
untuk meneruskan IAM role eksekusi pod ke Amazon EKS. Untuk informasi selengkapnya, lihat Peran eksekusi pod di Panduan Pengguna Amazon EKS.
-
-
Amazon EKS menggunakan peran tertaut layanan yang berisi izin yang diperlukan untuk memanggil layanan lain atas nama Anda. Jika peran tertaut layanan ini belum ada di akun Anda, Anda harus menambahkan izin
iam:CreateServiceLinkedRole
ke IAM role yang digunakan oleh Step Functions. Untuk informasi lebih lanjut, lihat Menggunakan Peran Tertaut Layanan dalam Panduan Pengguna Amazon EKS.IAM role yang digunakan oleh Step Functions harus memiliki izin
iam:PassRole
untuk meneruskan IAM role simpul ke Amazon EKS. Untuk informasi lebih lanjut, lihat Menggunakan Peran Tertaut Layanan dalam Panduan Pengguna Amazon EKS.
Berikut ini mencakup Task
yang membuat klaster Amazon EKS.
{
"StartAt": "CreateCluster.sync",
"States": {
"CreateCluster.sync": {
"Type": "Task",
"Resource": "arn:aws:states:::eks:createCluster.sync",
"Parameters": {
"Name": "MyCluster",
"ResourcesVpcConfig": {
"SubnetIds": [
"subnet-053e7c47012341234",
"subnet-027cfea4b12341234"
]
},
"RoleArn": "arn:aws:iam::123456789012:role/MyEKSClusterRole"
},
"End": true
}
}
}
Berikut ini mencakup status Task
yang menghapus klaster Amazon EKS.
{
"StartAt": "DeleteCluster.sync",
"States": {
"DeleteCluster.sync": {
"Type": "Task",
"Resource": "arn:aws:states:::eks:deleteCluster.sync",
"Parameters": {
"Name": "MyCluster"
},
"End": true
}
}
}
Berikut ini mencakup status Task
yang membuat profil Fargate.
{
"StartAt": "CreateFargateProfile.sync",
"States": {
"CreateFargateProfile.sync": {
"Type": "Task",
"Resource": "arn:aws:states:::eks:createFargateProfile.sync",
"Parameters": {
"ClusterName": "MyCluster",
"FargateProfileName": "MyFargateProfile",
"PodExecutionRoleArn": "arn:aws:iam::123456789012:role/MyFargatePodExecutionRole",
"Selectors": [{
"Namespace": "my-namespace",
"Labels": { "my-label": "my-value" }
}]
},
"End": true
}
}
}
Berikut ini mencakup status Task
yang menghapus profil Fargate.
{
"StartAt": "DeleteFargateProfile.sync",
"States": {
"DeleteFargateProfile.sync": {
"Type": "Task",
"Resource": "arn:aws:states:::eks:deleteFargateProfile.sync",
"Parameters": {
"ClusterName": "MyCluster",
"FargateProfileName": "MyFargateProfile"
},
"End": true
}
}
}
Berikut ini mencakup status Task
yang membuat grup simpul.
{
"StartAt": "CreateNodegroup.sync",
"States": {
"CreateNodegroup.sync": {
"Type": "Task",
"Resource": "arn:aws:states:::eks:createNodegroup.sync",
"Parameters": {
"ClusterName": "MyCluster",
"NodegroupName": "MyNodegroup",
"NodeRole": "arn:aws:iam::123456789012:role/MyNodeInstanceRole",
"Subnets": ["subnet-09fb51df01234", "subnet-027cfea4b1234"]
},
"End": true
}
}
}
Berikut ini mencakup status Task
yang menghapus grup simpul.
{
"StartAt": "DeleteNodegroup.sync",
"States": {
"DeleteNodegroup.sync": {
"Type": "Task",
"Resource": "arn:aws:states:::eks:deleteNodegroup.sync",
"Parameters": {
"ClusterName": "MyCluster",
"NodegroupName": "MyNodegroup"
},
"End": true
}
}
}
Izin
Ketika klaster Amazon EKS dibuat menggunakan integrasi layanan eks:createCluster
, IAM role ditambahkan ke tabel otorisasi RBAC Kubernetes sebagai administrator, dengan izin system:masters
. Awalnya, hanya entitas IAM yang dapat melakukan panggilan ke server API Kubernetes. Misalnya, Anda tidak akan dapat menggunakan kubectl untuk berinteraksi dengan server API Kubernetes Anda, kecuali jika Anda menggunakan peran yang sama dengan mesin status Step Functions Anda, atau jika Anda mengonfigurasi Kubernetes untuk memberikan izin ke entitas IAM tambahan. Untuk informasi selengkapnya, lihat Mengelola pengguna atau IAM role untuk klaster Anda di Panduan Pengguna Amazon EKS.
Anda dapat menambahkan izin untuk entitas IAM tambahan, seperti pengguna atau peran, dengan menambahkannya ke aws-auth
ConfigMap
dalam namespace kube-sistem. Jika Anda membuat klaster Anda dari Step Functions, gunakan integrasi layanan eks:call
.
Berikut ini mencakup Task
status yang membuat aws-auth
ConfigMap
dan memberikan system:masters
izin kepada pengguna arn:aws:iam::123456789012:user/my-user
dan peran IAM. arn:aws:iam::123456789012:role/my-role
{
"StartAt": "Add authorized user",
"States": {
"Add authorized user": {
"Type": "Task",
"Resource": "arn:aws:states:::eks:call",
"Parameters": {
"ClusterName": "MyCluster",
"CertificateAuthority": "LS0tLS1CRUd...UtLS0tLQo=",
"Endpoint": "https://444455556666.yl4.us-east-1.eks.amazonaws.com",
"Method": "POST",
"Path": "/api/v1/namespaces/kube-system/configmaps",
"RequestBody": {
"apiVersion": "v1",
"kind": "ConfigMap",
"metadata": {
"name": "aws-auth",
"namespace": "kube-system"
},
"data": {
"mapUsers": "[{ \"userarn\": \"arn:aws:iam::123456789012:user/my-user\", \"username\": \"my-user\", \"groups\": [ \"system:masters\" ] } ]",
"mapRoles": "[{ \"rolearn\": \"arn:aws:iam::123456789012:role/my-role\", \"username\": \"my-role\", \"groups\": [ \"system:masters\" ] } ]"
}
}
},
"End": true
}
}
catatan
Anda mungkin melihat ARN untuk IAM role yang ditampilkan dalam format yang mencakup jalur /layanan-peran/, seperti arn:aws:iam::123456789012:role/
. Token jalur peran layananini tidak boleh disertakan ketika mencantumkan peran dalam service-role
/my-roleaws-auth
.
Ketika klaster Anda pertama kali dibuat aws-auth
ConfigMap
tidak akan ada, tetapi akan ditambahkan secara otomatis jika Anda membuat profil Fargate. Anda dapat mengambil nilai aws-auth
saat ini, tambahkan izin tambahan, dan versi PUT
baru. Biasanya lebih mudah membuat aws-auth
sebelum profil Fargate.
Jika klaster Anda dibuat di luar Step Functions, Anda dapat mengonfigurasi kubectl untuk berkomunikasi dengan server API Kubernetes Anda. Kemudian, buat aws-auth
ConfigMap
baru menggunakan kubectl apply -f aws-auth.yaml
atau edit salah satu yang sudah ada menggunakan kubectl edit -n kube-system configmap/aws-auth
. Untuk informasi selengkapnya, lihat:
-
Buat kubeconfig untuk Amazon EKS di Panduan Pengguna Amazon EKS.
-
Mengelola pengguna atau IAM role untuk klaster Anda di Panduan Pengguna Amazon EKS.
Jika IAM role Anda tidak memiliki izin yang memadai di Kubernetes, eks:call
atau integrasi layanan eks:runJob
akan gagal dengan kesalahan berikut:
Error:
EKS.401
Cause:
{
"ResponseBody": {
"kind": "Status",
"apiVersion": "v1",
"metadata": {},
"status": "Failure",
"message": "Unauthorized",
"reason": "Unauthorized",
"code": 401
},
"StatusCode": 401,
"StatusText": "Unauthorized"
}