

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# `AWSSupport-SetupK8sApiProxyForEKS`
<a name="automation-awssupport-setupk8sapiproxyforeks"></a>

 **Deskripsi** 

Runbook ** AWSSupport-SetupK8sApiProxyForEKS ** otomatisasi menyediakan cara untuk membuat AWS Lambda fungsi yang bertindak sebagai proxy untuk membuat panggilan API bidang kontrol ke titik akhir cluster Amazon Elastic Kubernetes Service. Ini berfungsi sebagai blok bangunan untuk runbook yang memerlukan pembuatan panggilan API bidang kontrol untuk mengotomatiskan tugas dan memecahkan masalah dengan cluster Amazon EKS.

**penting**  
Semua sumber daya yang dibuat oleh otomatisasi ini ditandai sehingga dapat dengan mudah ditemukan. Tag yang digunakan adalah:  
 `AWSSupport-SetupK8sApiProxyForEKS`: benar 

**catatan**  
Otomatisasi adalah runbook pembantu dan tidak dapat dieksekusi sebagai runbook mandiri. Ini dipanggil sebagai otomatisasi anak untuk runbook yang memerlukan panggilan API bidang kontrol ke cluster Amazon EKS.
Pastikan untuk menjalankan `Cleanup` operasi setelah penggunaan untuk menghindari menimbulkan biaya yang tidak diinginkan.

**Jenis dokumen **

Otomatisasi

**Pemilik **

Amazon

**Platform **

Linux

**Parameter**
+ AutomationAssumeRole

  Tipe: String

  Deskripsi: (Opsional) Nama Sumber Daya Amazon (ARN) dari peran AWS Identity and Access Management (IAM) yang memungkinkan Otomasi Manajer Sistem untuk melakukan tindakan atas nama Anda. Jika tidak ada peran yang ditentukan, Sistem Manajer Otomasi menggunakan izin pengguna yang memulai runbook ini.
+ ClusterName

  Tipe: String

  Deskripsi: (Diperlukan) Nama cluster Layanan Amazon Elastic Kubernetes.
+ Operasi

  Tipe: String

  Deskripsi: (Diperlukan) Operasi untuk melakukan: menyediakan `Setup` fungsi Lambda di akun, `Cleanup` akan membatalkan penyediaan sumber daya yang dibuat sebagai bagian dari fase penyiapan.

  Nilai yang Diizinkan: `Setup` \| `Cleanup`

  Default: Pengaturan
+ LambdaRoleArn

  Tipe: String

  Deskripsi: (Opsional) ARN dari peran IAM yang memungkinkan AWS Lambda fungsi mengakses AWS layanan dan sumber daya yang diperlukan. Jika tidak ada peran yang ditentukan, Otomatisasi Manajer Sistem ini akan membuat satu peran IAM untuk Lambda di akun Anda dengan nama `Automation-K8sProxy-Role-<ExecutionId>` yang menyertakan kebijakan terkelola: `AWSLambdaBasicExecutionRole` dan. `AWSLambdaVPCAccessExecutionRole`

 **Bagaimana cara kerjanya? ** 

 Runbook melakukan langkah-langkah berikut: 
+ Memvalidasi bahwa otomatisasi berjalan sebagai eksekusi anak. Runbook tidak akan berfungsi saat dipanggil sebagai runbook mandiri karena tidak melakukan pekerjaan yang berarti dengan sendirinya.
+ Memeriksa CloudFormation tumpukan yang ada untuk fungsi Lambda proxy untuk cluster yang ditentukan.
  + Jika tumpukan ada, infrastruktur yang ada digunakan kembali alih-alih membuatnya kembali.
  + Penghitung referensi dipertahankan menggunakan tag untuk memastikan runbook tidak menghapus infrastruktur jika digunakan kembali oleh runbook lain untuk cluster yang sama.
+ Lakukan jenis operasi (`Setup`/`Cleanup`) yang ditentukan untuk pemanggilan:
  + **Pengaturan: ** Membuat atau menjelaskan sumber daya yang ada.

    **Pembersihan: ** Menghapus sumber daya yang disediakan, jika infrastruktur tidak digunakan oleh runbook lainnya.

 **Izin IAM yang Diperlukan ** 

`AutomationAssumeRole`Parameter memerlukan izin berikut yang diberikan tidak ` LambdaRoleArn` dilewatkan:
+  `cloudformation:CreateStack` 
+  `cloudformation:DescribeStacks` 
+  `cloudformation:DeleteStack` 
+  `cloudformation:UpdateStack` 
+  `ec2:CreateNetworkInterface` 
+  `ec2:DescribeNetworkInterfaces` 
+  `ec2:DescribeRouteTables` 
+  `ec2:DescribeSecurityGroups` 
+  `ec2:DescribeSubnets` 
+  `ec2:DescribeVpcs` 
+  `ec2:DeleteNetworkInterface` 
+  `eks:DescribeCluster` 
+  `lambda:CreateFunction` 
+  `lambda:DeleteFunction` 
+  `lambda:ListTags` 
+  `lambda:GetFunction` 
+  `lambda:ListTags` 
+  `lambda:TagResource` 
+  `lambda:UntagResource` 
+  `lambda:UpdateFunctionCode` 
+  `logs:CreateLogGroup` 
+  `logs:PutRetentionPolicy` 
+  `logs:TagResource` 
+  `logs:UntagResource` 
+  `logs:DescribeLogGroups` 
+  `logs:DescribeLogStreams` 
+  `logs:ListTagsForResource` 
+  `iam:CreateRole` 
+  `iam:AttachRolePolicy` 
+  `iam:DetachRolePolicy` 
+  `iam:PassRole` 
+  `iam:GetRole` 
+  `iam:DeleteRole` 
+  `iam:TagRole` 
+  `iam:UntagRole` 
+  `tag:GetResources` 
+  `tag:TagResources` 

Ketika `LambdaRoleArn` disediakan, otomatisasi tidak perlu membuat peran dan izin berikut dapat dikecualikan:
+  `iam:CreateRole` 
+  `iam:DeleteRole` 
+  `iam:TagRole` 
+  `iam:UntagRole` 
+  `iam:AttachRolePolicy` 
+  `iam:DetachRolePolicy` 

Di bawah ini adalah contoh kebijakan yang menunjukkan izin yang diperlukan untuk ` AutomationAssumeRole` saat tidak `LambdaRoleArn` dilewati:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "tag:GetResources",
                "tag:TagResources",
                "ec2:CreateNetworkInterface",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DescribeRouteTables",
                "ec2:DescribeSecurityGroups",
                "ec2:DescribeSubnets",
                "ec2:DescribeVpcs",
                "ec2:DeleteNetworkInterface",
                "eks:DescribeCluster",
                "iam:GetRole",
                "cloudformation:DescribeStacks",
                "logs:DescribeLogGroups",
                "logs:DescribeLogStreams",
                "lambda:GetFunction",
                "lambda:ListTags",
                "logs:ListTagsForResource"
            ],
            "Resource": "*",
            "Effect": "Allow",
            "Sid": "AllowActionsWithoutConditions"
        },
        {
            "Condition": {
                "StringEquals": {
                    "aws:RequestTag/AWSSupport-SetupK8sApiProxyForEKS": "true"
                }
            },
            "Action": "iam:CreateRole",
            "Resource": [
                "arn:aws:iam::{{111122223333}}:role/Automation-K8sProxy*"
            ],
            "Effect": "Allow",
            "Sid": "AllowCreateRoleWithRequiredTag"
        },
        {
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/AWSSupport-SetupK8sApiProxyForEKS": "true"
                }
            },
            "Action": [
                "iam:DeleteRole",
                "iam:TagRole",
                "iam:UntagRole"
            ],
            "Resource": [
                "arn:aws:iam::{{111122223333}}:role/Automation-K8sProxy*"
            ],
            "Effect": "Allow",
            "Sid": "IAMActions"
        },
        {
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/AWSSupport-SetupK8sApiProxyForEKS": "true"
                },
                "StringLike": {
                    "iam:PolicyARN": [
                        "arn:aws:iam::{{111122223333}}:policy/service-role/AWSLambdaBasicExecutionRole",
                        "arn:aws:iam::{{111122223333}}:policy/service-role/AWSLambdaVPCAccessExecutionRole"
                    ]
                }
            },
            "Action": [
                "iam:AttachRolePolicy",
                "iam:DetachRolePolicy"
            ],
            "Resource": [
                "arn:aws:iam::{{111122223333}}:role/Automation-K8sProxy*"
            ],
            "Effect": "Allow",
            "Sid": "AttachRolePolicy"
        },
        {
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/AWSSupport-SetupK8sApiProxyForEKS": "true"
                }
            },
            "Action": [
                "lambda:CreateFunction",
                "lambda:DeleteFunction",
                "lambda:TagResource",
                "lambda:UntagResource",
                "lambda:UpdateFunctionCode"
            ],
            "Resource": "arn:aws:lambda:{{us-east-1}}:{{111122223333}}:function:Automation-K8sProxy*",
            "Effect": "Allow",
            "Sid": "LambdaActions"
        },
        {
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/AWSSupport-SetupK8sApiProxyForEKS": "true"
                }
            },
            "Action": [
                "cloudformation:CreateStack",
                "cloudformation:DeleteStack",
                "cloudformation:UpdateStack"
            ],
            "Resource": "arn:aws:cloudformation:{{us-east-1}}:{{111122223333}}:stack/AWSSupport-SetupK8sApiProxyForEKS*",
            "Effect": "Allow",
            "Sid": "CloudFormationActions"
        },
        {
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/AWSSupport-SetupK8sApiProxyForEKS": "true"
                }
            },
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents",
                "logs:PutRetentionPolicy",
                "logs:TagResource",
                "logs:UntagResource"
            ],
            "Resource": [
                "arn:aws:logs:{{us-east-1}}:{{111122223333}}:log-group:/aws/lambda/Automation-K8sProxy*",
                "arn:aws:logs:{{us-east-1}}:{{111122223333}}:log-group:/aws/lambda/Automation-K8sProxy*:*"
            ],
            "Effect": "Allow",
            "Sid": "LogsActions"
        },
        {
            "Condition": {
                "StringLikeIfExists": {
                    "iam:PassedToService": "lambda.amazonaws.com"
                }
            },
            "Action": [
                "iam:PassRole"
            ],
            "Resource": [
                "arn:aws:iam::{{111122223333}}:role/Automation-K8sProxy-Role*"
            ],
            "Effect": "Allow",
            "Sid": "PassRoleToLambda"
        }
    ]
}
```

------

 Jika `LambdaRoleArn` dilewati, pastikan bahwa itu memiliki [ AWSLambdaBasicExecutionRole ](https://console.aws.amazon.com/iam/home?region=us-east-1#/policies/details/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2Fservice-role%2FAWSLambdaBasicExecutionRole) kebijakan yang melekat padanya untuk cluster publik dan juga, [ AWSLambdaVPCAccessExecutionRole ](https://console.aws.amazon.com/iam/home?region=us-east-1#/policies/details/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2Fservice-role%2FAWSLambdaVPCAccessExecutionRole) untuk cluster pribadi. 

 **Sumber Daya yang Dibuat ** 

Sumber daya berikut dibuat selama `Setup` operasi:

1. AWS Lambda fungsi

1. Peran IAM: Peran eksekusi Lambda, jika tidak disediakan.

1. CloudWatch Grup Log (Lambda Logs)

 *Fungsi lambda dan peran eksekusi dipertahankan sampai `Cleanup` operasi dijalankan. Grup log lambda akan disimpan selama 30 hari atau sampai dihapus secara manual. * 

 **Instruksi ** 

Runbook adalah utilitas pembantu yang dirancang untuk dieksekusi dari dalam runbook lain sebagai otomatisasi anak. Ini memfasilitasi pembuatan infrastruktur yang memungkinkan runbook induk membuat panggilan API pesawat kontrol Amazon EKS K8s. Untuk menggunakan runbook, Anda dapat mengikuti langkah-langkah di bawah ini dari konteks otomatisasi induk.

1. **Fase Pen ** yiapan: Memanggil otomatisasi menggunakan operasi ` aws:executeAutomation` tindakan dari runbook yang ingin membuat panggilan API bidang kontrol Amazon EKS K8s dengan operasi disetel ke. `Setup`

   Contoh parameter input:

   ```
      {
        "AutomationAssumeRole": "<role-arn>",
        "ClusterName": "<eks-cluster-name>",
        "Operation": "Setup"
      }
   ```

   Output dari `aws:executeAutomation` langkah akan berisi ARN dari fungsi proxy Lambda.

1. **Menggunakan Proxy Lambda**: Memanggil fungsi Lambda di dalam `aws:executeScript` tindakan menggunakan `boto3`'s ` Lambda.Client.invoke(...)` dengan daftar jalur panggilan API dan token pembawa. Fungsi Lambda akan melakukan `GET` panggilan HTTP ke jalur yang ditentukan dengan meneruskan token pembawa sebagai bagian dari header otorisasi.

   Contoh peristiwa panggil Lambda:

   ```
      {
          "ApiCalls": ["/api/v1/pods/", ...],
          "BearerToken": "..."
      }
   ```
**catatan**  
Token pembawa harus dibuat sebagai bagian dari skrip otomatisasi induk. Anda perlu memastikan kepala sekolah yang menjalankan runbook induk memiliki izin baca-saja ke cluster Amazon EKS yang ditentukan.

1. **Fase Pembersihan**: Memanggil otomatisasi menggunakan operasi ` aws:executeAutomation` tindakan dari runbook yang ingin membuat panggilan API bidang kontrol Amazon EKS K8s dengan operasi disetel ke. `Cleanup`

   Contoh parameter input:

   ```
      {
        "AutomationAssumeRole": "<role-arn>",
        "ClusterName": "<eks-cluster-name>",
        "Operation": "Cleanup"
      }
   ```

 **Langkah Otomatisasi ** 

1.  **ValidateExecution** 
   + Memverifikasi bahwa otomatisasi tidak berjalan sebagai eksekusi mandiri.

1.  **CheckForExistingStack** 
   + Memeriksa apakah CloudFormation tumpukan sudah disediakan untuk nama cluster yang ditentukan.
   + Mengembalikan status keberadaan tumpukan dan apakah aman untuk dihapus.

1.  **BranchOnIsStackExists** 
   + Langkah keputusan yang bercabang berdasarkan keberadaan tumpukan.
   + Rute untuk memperbarui nama tumpukan yang ada atau melanjutkan dengan percabangan operasi.

1.  **UpdateStackName** 
   + Memperbarui `StackName` variabel dengan nama tumpukan yang ada.
   + Hanya dieksekusi jika tumpukan sudah ada.

1.  **BranchOnOperation** 
   + Merutekan otomatisasi berdasarkan `Operation` parameter (`Setup`/`Cleanup`).
   + Untuk`Setup`: Rute untuk membuat tumpukan baru atau menjelaskan sumber daya yang ada.
   + Untuk`Cleanup`: Lanjutkan ke penghapusan tumpukan jika aman untuk dihapus.

1.  **GetClusterNetworkConfig** 
   + Menjelaskan cluster Amazon EKS untuk mendapatkan konfigurasi VPC.
   + Mengambil titik akhir, ID VPC, ID subnet, ID grup keamanan, dan data CA.

1.  **ProvisionResources** 
   + Membuat CloudFormation tumpukan dengan sumber daya yang dibutuhkan.
   + Penyediaan fungsi Lambda dengan konfigurasi jaringan yang diperlukan.
   + Menandai semua sumber daya untuk pelacakan dan manajemen.

1.  **DescribeStackResources** 
   + Mengambil informasi tentang created/existing tumpukan.
   + Mendapat ARN dari fungsi Lambda yang disediakan.

1.  **BranchOnIsLambdaDeploymentRequired** 
   + Menentukan apakah penerapan kode Lambda diperlukan.
   + Hanya melanjutkan ke penerapan untuk tumpukan yang baru dibuat.

1.  **DeployLambdaFunctionCode** 
   + Menyebarkan kode fungsi Lambda menggunakan paket penerapan.
   + Memperbarui fungsi dengan implementasi proxy.

1.  **AssertLambdaAvailable** 
   + Memverifikasi bahwa pembaruan kode fungsi Lambda berhasil.
   + Menunggu fungsi dalam `Successful` keadaan.

1.  **PerformStackCleanup** 
   + Menghapus CloudFormation tumpukan dan sumber daya terkait.
   + Dieksekusi selama `Cleanup` operasi atau pada kegagalan ` Setup` operasi.

 **Keluaran ** 

*LambdaFunctionArn*: ARN dari fungsi proxy Lambda

**Referensi **

Otomatisasi Systems Manager
+ [Jalankan otomatisasi ](https://docs.aws.amazon.com/systems-manager/latest/userguide/automation-working-executing.html)
+ [Menyiapkan Otomatisasi ](https://docs.aws.amazon.com/systems-manager/latest/userguide/automation-setup.html)
+ [Mendukung Alur Kerja Otomasi ](https://aws.amazon.com/premiumsupport/technology/saw/)