Panggil Amazon EKS dengan Step Functions - AWS Step Functions

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

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, atau metode serupa. Untuk informasi selengkapnya, lihat Membuat klaster Amazon EKS di Panduan Pengguna 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:

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 Tugas dalam dokumentasi Kubernetes. Jika Anda ingin mengelola sumber daya Kubernetes lainnya, termasuk sumber daya kustom, gunakan integrasi layanan eks: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 EKS atau 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 EKS atau dengan menggunakan Amazon EKS DescribeClusterAPI.

    • Type: String

    • Wajib: ya

  • Namespace: Namespace tempat menjalankan tugas. Jika tidak tersedia, namespace default digunakan.

    • Type: String

    • Wajib: tidak

  • Job: Ketentuan Tugas Kubernetes. Lihat Tugas dalam dokumentasi Kubernetes.

    • Type: JSON atau String

    • 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 bidang error dan cause.

  • LogOptions.RetrieveLogs: Aktifkan pengambilan log setelah tugas selesai. Secara default, log tidak diambil.

    • Type: Boolean

    • Wajib: tidak

  • LogOptions.RawLogs: Jika RawLogs 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 menggunakan tailLines atau limitBytes untuk membatasi ukuran log yang diambil dan tetap berada dalam kuota ukuran data Step Functions. Untuk informasi selengkapnya, lihat bagian Log baca dari Referensi API Kubernetes.

    • Type: Peta String ke List 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 EKS atau 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 EKS atau dengan menggunakan DescribeCluster API Amazon EKS.

    • Type: String

    • Diperlukan: Ya

  • Method: Metode HTTP permintaan Anda. Salah satu: GET, POST, PUT, DELETE, HEAD, atau PATCH.

    • 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: Peta String ke List of Strings

    • Diperlukan: Tidak

    • Contoh:

      "QueryParameters": { "labelSelector": [ "job-name=example-job" ] }
  • RequestBody: Isi pesan HTTP operasi API REST Kubernetes.

    • Type: JSON atau String

    • 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:

  • CreateCluster

    • Permintaan sintaks

    • Sintaks respons

      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:

      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.

  • DeleteCluster

  • CreateFargateProfile

    • Permintaan sintaks

    • Sintaks respons

      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.

  • DeleteFargateProfile

  • CreateNodegroup

    • Permintaan sintaks

    • Sintaks respons

      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.

  • DeleteNodegroup

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/service-role/my-role. Token jalur peran layananini tidak boleh disertakan ketika mencantumkan peran dalam aws-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:

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" }