

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

# 命令動作參考
命令動作參考

命令動作可讓您在虛擬運算執行個體中執行 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 運算在建置環境中執行命令。執行命令動作會產生個別費用 AWS CodeBuild。

**注意**  
Commands 動作僅適用於 V2 類型管道。

**Topics**
+ [

## 命令動作的考量事項
](#action-reference-Commands-considerations)
+ [

## 服務角色政策許可
](#action-reference-Commands-policy)
+ [

## 動作類型
](#action-reference-Commands-type)
+ [

## 組態參數
](#action-reference-Commands-config)
+ [

## Input artifacts (輸入成品)
](#action-reference-Commands-input)
+ [

## 輸出成品
](#action-reference-Commands-output)
+ [

## 環境變數
](#action-reference-Commands-envvars)
+ [

## 服務角色許可：命令動作
](#edit-role-Commands)
+ [

## 動作宣告 （範例）
](#action-reference-Commands-example)
+ [

## 另請參閱
](#action-reference-Commands-links)

## 命令動作的考量事項


下列考量適用於 Commands 動作。
+ 命令動作使用類似於 CodeBuild 動作的 CodeBuild 資源，同時允許虛擬運算執行個體中的 shell 環境命令，而不需要關聯或建立建置專案。
**注意**  
執行命令動作會在 中產生個別費用 AWS CodeBuild。
+ 由於 CodePipeline 中的命令動作使用 CodeBuild 資源，因此動作執行的組建將歸因於 CodeBuild 中您帳戶的組建限制。由 Commands 動作執行的組建將計入針對該帳戶設定的並行組建限制。
+ 根據 CodeBuild 組建，使用 Commands 動作的組建逾時為 55 分鐘。
+ 運算執行個體在 CodeBuild 中使用隔離的建置環境。
**注意**  
由於隔離的建置環境是在帳戶層級使用，因此執行個體可能會重複使用於另一個管道執行。
+ 除了多行格式之外，支援所有格式。輸入命令時，您必須使用單行格式。
+ 跨帳戶動作支援命令動作。若要新增跨帳戶命令動作，請在動作宣告中`actionRoleArn`從您的目標帳戶新增 。
+ 對於此動作，CodePipeline 將擔任管道服務角色，並使用該角色允許在執行時間存取資源。建議您設定服務角色，以便將許可範圍縮小至動作層級。
+ 新增至 CodePipeline 服務角色的許可詳述於 [將許可新增至 CodePipeline 服務角色](how-to-custom-role.md#how-to-update-role-new-services) 。
+ 在 主控台中檢視日誌所需的許可詳述於 [在 CodePipeline 主控台中檢視運算日誌所需的許可](security-iam-permissions-console-logs.md) 。
+ 與 CodePipeline 中的其他動作不同，您不要在動作組態中設定欄位，而是在動作組態之外設定動作組態欄位。

## 服務角色政策許可


當 CodePipeline 執行動作時，CodePipeline 會使用管道的名稱建立日誌群組，如下所示。這可讓您縮小使用管道名稱記錄資源的許可範圍。

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

如果您使用現有的服務角色，若要使用 命令動作，您需要為服務角色新增下列許可。
+ logs:CreateLogGroup
+ logs:CreateLogStream
+ logs: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:*"
   ]
}
```

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

## 動作類型

+ 類別：`Compute`
+ 擁有者：`AWS`
+ 提供者：`Commands`
+ 版本：`1`

## 組態參數


**命令**  
必要：是  
您可以為要執行`Commands`的動作提供 shell 命令。在 主控台中，命令會在不同的行上輸入。在 CLI 中，命令會以個別字串輸入。  
不支援多行格式，且會導致錯誤訊息。單行格式必須用於在命令欄位中輸入**命令**。
EnvironmentType 和 ComputeType 值符合 CodeBuild 中的值。我們支援可用類型的子集。如需詳細資訊，請參閱[建置環境運算類型](https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-compute-types.html)。

**EnvironmentType**  
必要：否  
支援 Commands 動作之建置環境的作業系統映像。以下是組建環境的有效值：  
+ 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\$1GENERAL1\$1SMALL
+ **環境類型：**LINUX\$1CONTAINER

**ComputeType**  
必要：否  
根據 EnvironmentType 的選擇，可以提供運算類型。以下是運算的可用值；不過，請注意，可用的選項可能因作業系統而有所不同。  
+ BUILD\$1GENERAL1\$1SMALL
+ BUILD\$1GENERAL1\$1MEDIUM
+ BUILD\$1GENERAL1\$1LARGE
有些運算類型與特定環境類型不相容。例如，WINDOWS\$1SERVER\$12022\$1CONTAINER 與 BUILD\$1GENERAL1\$1SMALL 不相容。使用不相容的組合會導致 動作失敗，並產生執行時間錯誤。

**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)。 *CodeBuild *  

![\[使用 Commands 動作編輯新管道的動作頁面\]](http://docs.aws.amazon.com/zh_tw/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
          }
```

## Input artifacts (輸入成品)

+ **成品數量：** `1 to 10`

## 輸出成品

+ **成品數量：** `0 to 1`

## 環境變數


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

**Value**  
鍵/值對的值，例如 `apiTokens:bedrockToken`。該值可以使用管道動作或管道變數的輸出變數進行參數化。  
使用 `SECRETS_MANAGER`類型時，此值必須是您已存放在 Secrets Manager 中的 AWS 秘密名稱。

**Type**  
指定環境變數值的使用類型。此值可以是 `PLAINTEXT` 或 `SECRETS_MANAGER`。如果值為 `SECRETS_MANAGER`，請在`EnvironmentVariable`值中提供 Secrets 參考。未指定時，則將預設為 `PLAINTEXT`。  
我們強烈建議不使用*純文字*環境變數來存放敏感值，尤其是 AWS 登入資料。當您使用 CodeBuild 主控台或 時 AWS CLI，*純文字*環境變數會以純文字顯示。對於敏感值，建議您改用 `SECRETS_MANAGER` 類型。

**注意**  
當您`type`為環境變數組態輸入 `name`、 `value`和 時，特別是在環境變數包含 CodePipeline 輸出變數語法時，請勿超過組態值欄位的 1000 個字元限制。如果超過此限制，系統就會傳回驗證錯誤。

如需顯示環境變數的動作宣告範例，請參閱 [組態參數](#action-reference-Commands-config)。

**注意**  
`SECRETS_MANAGER` 類型僅支援 Commands 動作。
命令動作中參考的秘密將在類似於 CodeBuild 的建置日誌中修訂。但是，具有管道**編輯**存取權的管道使用者仍然可以透過修改命令來存取這些秘密值。
若要使用 SecretsManager，您必須將下列許可新增至管道服務角色：  

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

## 服務角色許可：命令動作


對於 命令支援，請將下列內容新增至您的政策陳述式：

------
#### [ 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*"
            ]
        }
    ]
}
```

------

## 動作宣告 （範例）


------
#### [ 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"
}
```

------

## 另請參閱


以下相關資源可協助您使用此動作。
+ [教學課程：建立以運算 (V2 類型） 執行命令的管道](tutorials-commands.md) – 本教學課程提供具有 Commands 動作的範例管道。