

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

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

您可以使用 `EKSDeploy` 操作部署 Amazon EKS 服务。部署需要一个 CodePipeline 用于部署镜像的 Kubernetes 清单文件。

在创建管道之前，您必须事先创建 Amazon EKS 资源，并在映像存储库中存储映像。您可以选择为集群提供 VPC 信息。

**重要**  
此操作使用 CodePipeline 托管 CodeBuild 计算在构建环境中运行命令。运行 Commands 操作将在 AWS CodeBuild中产生单独的费用。

**注意**  
`EKS` 部署操作仅适用于 V2 类型管道。

EKS 操作支持公共和私有 EKS 集群。私有集群是 EKS 推荐的类型；但是，两种类型都支持。

跨账户操作支持 EKS 操作。要添加跨账户 EKS 操作，请在操作声明中添加目标账户中的 `actionRoleArn`。

**Topics**
+ [操作类型](#action-reference-EKS-type)
+ [配置参数](#action-reference-EKS-config)
+ [输入构件](#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 图表位置输入以逗号分隔的 Helm 值文件。

**Kubectl 下的选项**  
当选定部署工具为 **Kubectl** 时，以下是可用的选项。    
**ManifestFiles**  
必需：是（仅对于 **Kubectl** 类型是必需）  
清单文件名称，该文本文件描述服务的容器名称以及映像和标签。您可以使用此文件来参数化映像 URI 和其他信息。您可以使用环境变量来实现此目的。  
 您可以将此文件存储在管道的源存储库中。

**命名空间**  
必需：否  
要在 `kubectl` 或 `helm` 命令中使用的 Kubernetes 命名空间。

**子网**  
必需：否  
您的集群的 VPC 的子网。它们属于附加到您的集群的同一 VPC。您还可以提供尚未附加到您的集群的子网，并在此处进行指定。

**SecurityGroupIds**  
必需：否  
您的集群的 VPC 的安全组。它们属于附加到您的集群的同一 VPC。您还可以提供尚未附加到您的集群的安全组，并在此处进行指定。

## 输入构件
<a name="action-reference-EKS-input"></a>
+ **构件数：**`1`
+ **描述：**该操作会在管道的源文件存储库中查找 Kubernetes 清单文件或 Helm 图表。如果要使用存储在 S3 存储桶中的.tgz 格式的掌舵图，则可以通过将 S3 配置 Bucket/Key 为源操作来实现。例如，提供的对象密钥将是 `my-chart-0.1.0.tgz`。

## 输出构件
<a name="action-reference-EKS-output"></a>
+ **构件数：**`0`
+ **描述：**输出构件不适用于此操作类型。

## 环境变量
<a name="action-reference-EKS-env-variables"></a>

用于替换清单文件或 Helm 图表值文件中的映像存储库或映像标签等变量。

**Key**  
键值对环境变量对的键，例如 `$IMAGE_TAG`。

**值**  
键/值对的值，例如 `v1.0`。可以使用管道操作中的输出变量或管道变量来参数化该值。例如，pipeline 可以有一个 ECRBuildAndPublish 使用创建 ECR 映像的操作`${codepipeline.PipelineExecutionId}`，而 EKS 操作可以使用该图像`${codepipeline.PipelineExecutionId}`作为环境变量的值。

## 输出变量
<a name="action-reference-EKS-output-vars"></a>

**EKSCluster名称**  
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 集群角色不同。

  如果您使用的是现有的服务角色，要使用此操作，需要为服务角色添加以下权限。
  + 谢谢：DescribeCluster
+ **日志流操作：** CodePipeline 运行操作时，使用管道名称 CodePipeline 创建日志组，如下所示。这样就可以使用管道名称缩小日志资源的权限范围。

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

  如果您使用的是现有的服务角色，要使用此操作，需要为服务角色添加以下权限。
  + 日志：CreateLogGroup
  + 日志：CreateLogStream
  + 日志：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>

下列相关资源在您使用此操作的过程中会有所帮助。
+ 请参阅[教程：使用以下方法部署到 Amazon EKS CodePipeline](tutorials-eks-deploy.md)中的教程，了解如何创建 EKS 集群和 Kubernetes 清单文件以便向管道添加操作。