

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

# Commands 操作参考
<a name="action-reference-Commands"></a>

通过 Commands 操作，您可以在虚拟计算实例中运行 Shell 命令。运行操作时，操作配置中指定的命令会在单独的容器中运行。所有被指定为 CodeBuild 操作输入工件的工件都可以在运行命令的容器中找到。此操作允许您指定命令，而无需先创建 CodeBuild 项目。有关更多信息，请参阅《*AWS CodePipeline API 参考*》中的[ActionDeclaration](https://docs.aws.amazon.com/codepipeline/latest/APIReference/API_ActionDeclaration.html)和[OutputArtifact](https://docs.aws.amazon.com/codepipeline/latest/APIReference/API_OutputArtifact.html)。

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

**注意**  
Commands 操作仅适用于 V2 类型管道。

**Topics**
+ [Commands 操作的注意事项](#action-reference-Commands-considerations)
+ [服务角色策略权限](#action-reference-Commands-policy)
+ [操作类型](#action-reference-Commands-type)
+ [配置参数](#action-reference-Commands-config)
+ [输入构件](#action-reference-Commands-input)
+ [输出构件](#action-reference-Commands-output)
+ [环境变量](#action-reference-Commands-envvars)
+ [服务角色权限：Commands 操作](#edit-role-Commands)
+ [操作声明（示例）](#action-reference-Commands-example)
+ [另请参阅](#action-reference-Commands-links)

## Commands 操作的注意事项
<a name="action-reference-Commands-considerations"></a>

Commands 操作的注意事项如下。
+ 命令操作使用与 CodeBuild 操作相似的 CodeBuild 资源，同时允许在虚拟计算实例中使用外壳环境命令，而无需关联或创建构建项目。
**注意**  
运行 Commands 操作将在 AWS CodeBuild中产生单独的费用。
+ 由于中的 Commands 操作会占 CodePipeline 用 CodeBuild 资源，因此该操作运行的生成将归因于中账户的生成限制 CodeBuild。Commands 操作运行的构建将计入为该账户配置的并发构建限制。
+ 根据构建，使用 “命令” 操作的 CodeBuild 构建的超时时间为 55 分钟。
+ 计算实例在中使用隔离的构建环境 CodeBuild。
**注意**  
由于隔离构建环境是在账户级别使用的，因此一个实例可能会被重复用于另一个管道的执行。
+ 支持除多行格式外的所有格式。输入命令时必须使用单行格式。
+ 跨账户操作支持 Commands 操作。要添加跨账户 Commands 操作，请在操作声明中添加目标账户中的 `actionRoleArn`。
+ 对于此操作， CodePipeline 将担任管道服务角色并使用该角色允许在运行时访问资源。建议配置服务角色，以便将权限范围缩小到操作级别。
+ 中详细介绍了添加到 CodePipeline 服务角色的权限[为 CodePipeline 服务角色添加权限](how-to-custom-role.md#how-to-update-role-new-services)。
+ 在控制台中查看日志所需的权限详见[在控制台中查看计算日志所需的权限](security-iam-permissions-console-logs.md)。
+ 与中的其他操作不同 CodePipeline，您无需在操作配置中设置字段；而是在操作配置之外设置操作配置字段。

## 服务角色策略权限
<a name="action-reference-Commands-policy"></a>

 CodePipeline 运行操作时，使用管道名称 CodePipeline 创建日志组，如下所示。这样就可以使用管道名称缩小日志资源的权限范围。

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

如果您使用的是现有的服务角色，要使用 Commands 操作，需要为服务角色添加以下权限。
+ 日志：CreateLogGroup
+ 日志：CreateLogStream
+ 日志：PutLogEvents

在服务角色策略声明中，将权限范围缩小到管道级别，如下例所示。

```
{
    "Effect": "Allow",
    "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
    ],
    "Resource": [
        "arn:aws:logs:*:YOUR_AWS_ACCOUNT_ID:log-group:/aws/codepipeline/YOUR_PIPELINE_NAME",
        "arn:aws:logs:*:YOUR_AWS_ACCOUNT_ID:log-group:/aws/codepipeline/YOUR_PIPELINE_NAME:*"
   ]
}
```

要在控制台中使用操作详细信息对话框页面查看日志，必须在控制台角色中添加查看日志的权限。有关更多信息，请参阅[在控制台中查看计算日志所需的权限](security-iam-permissions-console-logs.md)中的控制台权限策略示例。

## 操作类型
<a name="action-reference-Commands-type"></a>
+ 类别：`Compute`
+ 拥有者：`AWS`
+ 提供方：`Commands`
+ 版本：`1`

## 配置参数
<a name="action-reference-Commands-config"></a>

**命令**  
是否必需：是  
您可以为要运行的 `Commands` 操作提供 Shell 命令。在控制台中，命令分行输入。在 CLI 中，命令以单独字符串的形式输入。  
不支持多行格式，这会导致出现错误消息。在 **Commands** 字段中输入命令时必须使用单行格式。
 EnvironmentType 和的 ComputeType 值与中的值相匹配 CodeBuild。我们支持一部分可用类型。有关更多信息，请参阅[构建环境计算类型](https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-compute-types.html)。

**EnvironmentType**  
必需：否  
支持 Commands 操作的构建环境的 OS 映像。以下是构建环境的有效值：  
+ LINUX\$1CONTAINER
+ WINDOWS\$1SERVER\$12022\$1CONTAINER
然后，选择**EnvironmentType**将允许在**ComputeType**字段中显示该操作系统的计算类型。有关可用于此操作的 CodeBuild 计算类型的更多信息，请参阅 CodeBuild 用户指南中的[构建环境计算模式和类型](https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-compute-types.html)参考。  
如果未指定，则构建环境的计算默认设置如下所示：  
+ **计算类型：**BUILD\$1 \$1S GENERAL1 MALL
+ **环境类型：**LINUX\$1CONTAINER

**ComputeType**  
必需：否  
根据对的选择 EnvironmentType，可以提供计算类型。以下是计算的可用值；但请注意，可用选项可能因 OS 而异。  
+ BUILD\$1 \$1 GENERAL1 小型
+ BUILD\$1 \$1 GENERAL1 中型
+ 构建 \$1 \$1 GENERAL1 LARGE
某些计算类型与某些环境类型不兼容。例如，WINDOWS\$1SERVER\$12022\$1CONTAINER 与 BUILD\$1 \$1SMALL 不兼容。GENERAL1使用不兼容的组合会导致操作失败并产生运行时错误。

**outputVariables**  
必需：否  
指定要导出的环境变量名称。有关 CodeBuild 环境变量的参考，请参阅《*CodeBuild 用户指南》*[中的构建环境中的环境变量](https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-env-vars.html)。

**文件**  
必需：否  
您可以提供想要导出的文件，作为操作的输出构件。  
支持的文件格式与 CodeBuild 文件模式的支持格式相同。例如，输入 `**/` 表示所有文件。有关更多信息，请参阅《*CodeBuild 用户指南》 CodeBuild*中的[构建规范参考](https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html#build-spec.artifacts.files)。  

![\[使用 Commands 操作的新管道的编辑操作页面\]](http://docs.aws.amazon.com/zh_cn/codepipeline/latest/userguide/images/commands-edit-screen.png)


**VpcId**  
必需：否  
您的资源的 VPC ID。

**子网**  
必需：否  
VPC 的子网。当您的命令需要连接到 VPC 中的资源时，需要配置此字段。

**SecurityGroupIds**  
必需：否  
VPC 的安全组。当您的命令需要连接到 VPC 中的资源时，需要配置此字段。

以下是该操作的 JSON 示例，其中显示了环境和计算类型的配置字段，以及示例环境变量。

```
 {
            "name": "Commands1",
            "actionTypeId": {
              "category": "Compute",
              "owner": "AWS",
              "provider": "Commands",
              "version": "1"
            },
            "inputArtifacts": [
              {
                "name": "SourceArtifact"
              }
            ],
            "commands": [
              "ls",
              "echo hello",
              "echo $BEDROCK_TOKEN",
            ],
            "configuration": {
              "EnvironmentType": "LINUX_CONTAINER",
              "ComputeType": "BUILD_GENERAL1_MEDIUM"
            },
            "environmentVariables": [
              {
                "name": "BEDROCK_TOKEN",
                "value": "apiTokens:bedrockToken",
                "type": "SECRETS_MANAGER"
              }
            ],
            "runOrder": 1
          }
```

## 输入构件
<a name="action-reference-Commands-input"></a>
+ **构件数：**`1 to 10`

## 输出构件
<a name="action-reference-Commands-output"></a>
+ **构件数：**`0 to 1`

## 环境变量
<a name="action-reference-Commands-envvars"></a>

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

**值**  
键/值对的值，例如 `apiTokens:bedrockToken`。可以使用管道操作中的输出变量或管道变量来参数化该值。  
使用`SECRETS_MANAGER`类型时，此值必须是您已经存储在 Secrets Manager 中的 AWS 密钥的名称。

**Type**  
指定环境变量值的使用类型。该值可以是 `PLAINTEXT` 或 `SECRETS_MANAGER`。如果值为 `SECRETS_MANAGER`，则在 `EnvironmentVariable` 值中提供密钥参考。如果未指定，则此值默认为 `PLAINTEXT`。  
我们强烈不鼓励使用*纯文本*环境变量来存储敏感值，尤其是证书。 AWS 使用 CodeBuild 控制台或时 AWS CLI，*纯文本*环境变量将以纯文本形式显示。对于敏感值，我们建议您改用 `SECRETS_MANAGER` 类型。

**注意**  
`type`为环境变量配置输入`name``value`、和时，尤其是在环境变量包含 CodePipeline 输出变量语法的情况下，请不要超过配置值字段的 1000 个字符限制。如果超过此限制，将会返回验证错误。

有关显示环境变量的操作声明示例，请参阅[配置参数](#action-reference-Commands-config)。

**注意**  
只有 Commands 操作支持 `SECRETS_MANAGER` 类型。
Commands 操作中引用的密钥将在构建日志中进行编辑，类似于。 CodeBuild但是，对管道拥有**编辑**权限的管道用户仍然可能通过修改命令来访问这些密钥值。
要使用 SecretsManager，必须向您的管道服务角色添加以下权限：  

  ```
  {
              "Effect": "Allow",
              "Action": [
                  "secretsmanager:GetSecretValue"
              ],
              "Resource": [
                  "SECRET_ARN"
              ]
          }
  ```

## 服务角色权限：Commands 操作
<a name="edit-role-Commands"></a>

对于 Commands 支持，将以下内容添加到策略语句中：

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": [
                "arn:aws:iam::*:role/Service*",
                "arn:aws:iam::*:role/Service*"
            ]
        }
    ]
}
```

------

## 操作声明（示例）
<a name="action-reference-Commands-example"></a>

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

```
name: Commands_action
actionTypeId:
  category: Compute
  owner: AWS
  provider: Commands
  version: '1'
runOrder: 1
configuration: {}
commands:
- ls
- echo hello
- 'echo pipeline Execution Id is #{codepipeline.PipelineExecutionId}'
outputArtifacts:
- name: BuildArtifact
  files:
  - **/
inputArtifacts:
- name: SourceArtifact
outputVariables:
- AWS_DEFAULT_REGION
region: us-east-1
namespace: compute
```

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

```
{
    "name": "Commands_action",
    "actionTypeId": {
        "category": "Compute",
        "owner": "AWS",
        "provider": "Commands",
        "version": "1"
    },
    "runOrder": 1,
    "configuration": {},
    "commands": [
        "ls",
        "echo hello",
        "echo pipeline Execution Id is #{codepipeline.PipelineExecutionId}"
    ],
    "outputArtifacts": [
        {
            "name": "BuildArtifact",
            "files": [
                "**/"
            ]
        }
    ],
    "inputArtifacts": [
        {
            "name": "SourceArtifact"
        }
    ],
    "outputVariables": [
        "AWS_DEFAULT_REGION"
    ],
    "region": "us-east-1",
    "namespace": "compute"
}
```

------

## 另请参阅
<a name="action-reference-Commands-links"></a>

下列相关资源在您使用此操作的过程中会有所帮助。
+ [教程：创建使用计算运行命令的管道（V2 类型）](tutorials-commands.md) – 本教程提供了一个使用 Commands 操作的管道示例。