

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Amazon Elastic Kubernetes Service `EKS` 部署動作參考
<a name="action-reference-EKS"></a>

您可以使用 `EKSDeploy`動作來部署 Amazon EKS 服務。部署需要 CodePipeline 用來部署映像的 Kubernetes 資訊清單檔案。

建立管道之前，您必須已建立 Amazon EKS 資源，並將映像存放在映像儲存庫中。或者，您可以為叢集提供 VPC 資訊。

**重要**  
此動作使用 CodePipeline 受管 CodeBuild 運算在建置環境中執行命令。執行命令動作會產生個別費用 AWS CodeBuild。

**注意**  
部署動作僅適用於 V2 `EKS` 類型管道。

EKS 動作同時支援公有和私有 EKS 叢集。私有叢集是 EKS 建議的類型；不過，支援這兩種類型。

跨帳戶動作支援 EKS 動作。若要新增跨帳戶 EKS 動作，請在動作宣告中`actionRoleArn`從您的目標帳戶新增 。

**Topics**
+ [動作類型](#action-reference-EKS-type)
+ [組態參數](#action-reference-EKS-config)
+ [Input artifacts (輸入成品)](#action-reference-EKS-input)
+ [輸出成品](#action-reference-EKS-output)
+ [環境變數](#action-reference-EKS-env-variables)
+ [輸出變數](#action-reference-EKS-output-vars)
+ [服務角色政策許可](#action-reference-EKS-service-role)
+ [動作宣告](#action-reference-EKS-example)
+ [另請參閱](#action-reference-EKS-links)

## 動作類型
<a name="action-reference-EKS-type"></a>
+ 類別：`Deploy`
+ 擁有者：`AWS`
+ 提供者：`EKS`
+ 版本：`1`

## 組態參數
<a name="action-reference-EKS-config"></a>

**ClusterName**  
必要：是  
Amazon EKS 中的 Amazon EKS 叢集。

**Helm 下方的選項**  
當 **Helm** 是選取的部署工具時，以下是可用的選項。    
**HelmReleaseName **  
必要：是 （僅適用於 **Helm** 類型）  
部署的版本名稱。  
**HelmChartLocation **  
必要：是 （僅適用於 **Helm** 類型）  
部署的圖表位置。  
**HelmValuesFiles **  
必要：否 （僅適用於 **Helm** 類型為選用）  
若要覆寫 helm 值檔案，請在 helm Chart 位置中輸入逗號分隔 helm 值檔案。

**Kubectl 下的選項**  
以下是當 **Kubectl** 是選取的部署工具時可用的選項。    
**ManifestFiles**  
必要：是 （僅適用於 **Kubectl** 類型）  
資訊清單檔案的名稱、描述服務容器名稱的文字檔案，以及映像和標籤。您可以使用此檔案來參數化映像 URI 和其他資訊。您可以將環境變數用於此目的。  
 您可以將此檔案存放在管道的來源儲存庫中。

**命名空間**  
必要：否  
要在 `kubectl`或 `helm`命令中使用的 kubernetes namepsace。

**子網路**  
必要：否  
叢集 VPC 的子網路。這些是連接到叢集的相同 VPC 的一部分。您也可以提供尚未連接到叢集的子網路，並在此處指定它們。

**SecurityGroupIds**  
必要：否  
叢集 VPC 的安全群組。這些是連接到叢集的相同 VPC 的一部分。您也可以提供尚未連接到叢集的安全群組，並在此處指定。

## Input artifacts (輸入成品)
<a name="action-reference-EKS-input"></a>
+ **成品數量：** `1`
+ **描述：** 動作會在管道的來源檔案儲存庫中尋找 Kubernetes 資訊清單檔案或 Helm Chart。如果您想要使用存放在 S3 儲存貯體中的 .tgz 格式的 Helm Chart，您可以透過將 S3 儲存貯體/金鑰設定為來源動作來執行此操作。例如，提供的物件金鑰為 `my-chart-0.1.0.tgz`。

## 輸出成品
<a name="action-reference-EKS-output"></a>
+ **成品數量：** `0`
+ **描述：**輸出成品不適用於此動作類型。

## 環境變數
<a name="action-reference-EKS-env-variables"></a>

用於取代資訊清單檔案或 Helm Chart 值檔案中的影像儲存庫或影像標籤等變數。

**金錀**  
鍵值環境變數對中的索引鍵，例如 `$IMAGE_TAG`。

**Value**  
鍵/值對的值，例如 `v1.0`。該值可以使用管道動作或管道變數的輸出變數進行參數化。例如，管道可以有一個使用 建立 ECR 映像的 ECRBuildAndPublish 動作`${codepipeline.PipelineExecutionId}`，而 EKS 動作可以使用 `${codepipeline.PipelineExecutionId}`作為環境變數的值。

## 輸出變數
<a name="action-reference-EKS-output-vars"></a>

**EKSClusterName**  
Amazon EKS 中的 Amazon EKS 叢集。

## 服務角色政策許可
<a name="action-reference-EKS-service-role"></a>

若要執行此動作，管道的服務角色政策中必須具備下列許可。
+ **EC2 動作：**當 CodePipeline 執行動作時，需要 EC2 執行個體許可。請注意，這與建立 EKS 叢集時所需的 EC2 執行個體角色不同。

  如果您使用的是現有的服務角色，若要使用此動作，您將需要為服務角色新增下列許可。
  + ec2:CreateNetworkInterface
  + ec2:DescribeDhcpOptions
  + ec2:DescribeNetworkInterfaces
  + ec2:DeleteNetworkInterface
  + ec2：DescribeSubnets
  + ec2：DescribeSecurityGroups
  + ec2：DescribeVpcs
+ **EKS 動作：**當 CodePipeline 執行動作時，需要 EKS 叢集許可。請注意，這與建立 EKS 叢集時所需的 IAM EKS 叢集角色不同。

  如果您使用的是現有的服務角色，若要使用此動作，您將需要為服務角色新增下列許可。
  + eks:DescribeCluster
+ **日誌串流動作：**CodePipeline 執行動作時，CodePipeline 會使用管道的名稱建立日誌群組，如下所示。這可讓您縮小使用管道名稱記錄資源的許可範圍。

  ```
  /aws/codepipeline/MyPipelineName
  ```

  如果您使用的是現有的服務角色，若要使用此動作，您將需要為服務角色新增下列許可。
  + logs:CreateLogGroup
  + logs:CreateLogStream
  + logs:PutLogEvents

在服務角色政策陳述式中，將許可範圍縮小至資源層級，如下列範例所示。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "eks:DescribeCluster"
            ],
            "Resource": "arn:aws:eks:*:111122223333:cluster/YOUR_CLUSTER_NAME"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:CreateNetworkInterface",
                "ec2:CreateNetworkInterfacePermission",
                "ec2:DescribeDhcpOptions",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DeleteNetworkInterface",
                "ec2:DescribeSubnets",
                "ec2:DescribeSecurityGroups",
                "ec2:DescribeVpcs",
                "ec2:DescribeRouteTables"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogStream",
                "logs:CreateLogGroup",
                "logs:PutLogEvents"
            ],
            "Resource": [
                "arn:aws:logs:*:111122223333:log-group:/aws/codepipeline/YOUR_PIPELINE_NAME",
                "arn:aws:logs:*:111122223333:log-group:/aws/codepipeline/YOUR_PIPELINE_NAME:*"
            ]
        }
    ]
}
```

------

若要使用動作詳細資訊對話方塊頁面在主控台中檢視日誌，必須將檢視日誌的許可新增至主控台角色。如需詳細資訊，請參閱 中的主控台許可政策範例[在主控台中檢視運算日誌所需的許可](security-iam-permissions-console-logs.md)。

### 新增 服務角色做為叢集的存取項目
<a name="action-reference-EKS-service-role-access"></a>

在管道的服務角色政策中提供許可後，您可以透過新增 CodePipeline 服務角色做為叢集的存取項目來設定叢集許可。

您也可以使用具有更新許可的動作角色。如需詳細資訊，請參閱 中的教學課程範例[步驟 4：建立 CodePipeline 服務角色的存取項目](tutorials-eks-deploy.md#tutorials-eks-deploy-access-entry)。

## 動作宣告
<a name="action-reference-EKS-example"></a>

------
#### [ YAML ]

```
Name: DeployEKS
ActionTypeId:
  Category: Deploy
  Owner: AWS
  Provider: EKS
  Version: '1'
RunOrder: 2
Configuration:
  ClusterName: my-eks-cluster
  ManifestFiles: ManifestFile.json
OutputArtifacts: []
InputArtifacts:
  - Name: SourceArtifact
```

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

```
{
    "Name": "DeployECS",
    "ActionTypeId": {
        "Category": "Deploy",
        "Owner": "AWS",
        "Provider": "EKS",
        "Version": "1"
    },
    "RunOrder": 2,
    "Configuration": {
        "ClusterName": "my-eks-cluster",
        "ManifestFiles": "ManifestFile.json"
    },
    "OutputArtifacts": [],
    "InputArtifacts": [
        {
            "Name": "SourceArtifact"
        }
    ]
},
```

------

## 另請參閱
<a name="action-reference-EKS-links"></a>

以下相關資源可協助您使用此動作。
+ 如需示範如何建立 EKS 叢集和 Kubernetes 資訊清單檔案，以將 動作新增至管道的教學[教學課程：使用 CodePipeline 部署至 Amazon EKS](tutorials-eks-deploy.md)課程，請參閱 。