

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 명령 작업 참조
<a name="action-reference-Commands"></a>

명령 작업을 사용하면 가상 컴퓨팅 인스턴스에서 쉘 명령을 실행할 수 있습니다. 작업을 실행하면 작업 구성에 지정된 명령이 별도의 컨테이너에서 실행됩니다. 명령을 실행하는 컨테이너 내에서 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)
+ [입력 아티팩트](#action-reference-Commands-input)
+ [출력 아티팩트](#action-reference-Commands-output)
+ [환경 변수](#action-reference-Commands-envvars)
+ [서비스 역할 권한: Commands 작업](#edit-role-Commands)
+ [작업 선언(예)](#action-reference-Commands-example)
+ [다음 사항도 참조하세요.](#action-reference-Commands-links)

## 명령 작업에 대한 고려 사항
<a name="action-reference-Commands-considerations"></a>

명령 작업에는 다음 고려 사항이 적용됩니다.
+ 명령 작업은 CodeBuild 작업과 유사한 CodeBuild 리소스를 사용하는 동시에 빌드 프로젝트를 연결하거나 생성할 필요 없이 가상 컴퓨팅 인스턴스에서 쉘 환경 명령을 허용합니다.
**참고**  
명령 작업을 실행하면 AWS CodeBuild에서 별도의 요금이 발생합니다.
+ CodePipeline의 명령 작업은 CodeBuild 리소스를 사용하기 때문에 작업에서 실행되는 빌드는 CodeBuild에서 계정의 빌드 제한에 귀속됩니다. 명령 작업에서 실행되는 빌드는 해당 계정에 구성된 동시 빌드 제한에 포함됩니다.
+ CodeBuild 빌드를 기반으로 할 때 명령 작업을 사용한 빌드의 제한 시간은 55분입니다.
+ 컴퓨팅 인스턴스는 CodeBuild에서 격리된 빌드 환경을 사용합니다.
**참고**  
격리된 빌드 환경은 계정 수준에서 사용되므로 인스턴스를 다른 파이프라인 실행에 재사용할 수 있습니다.
+ 다중 라인 형식을 제외한 모든 형식이 지원됩니다. 명령을 입력할 때는 단일 줄 형식을 사용해야 합니다.
+ 명령 작업은 교차 계정 작업에 대해 지원됩니다. 교차 계정 명령 작업을 추가하려면 작업 선언의 대상 계정에서 `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
```

기존 서비스 역할을 사용하는 경우 명령 작업을 사용하려면 서비스 역할에 대해 다음 권한을 추가해야 합니다.
+ 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:*"
   ]
}
```

작업 세부 정보 대화 상자를 사용하여 콘솔에서 로그를 보려면 로그를 볼 수 있는 권한을 콘솔 역할에 추가해야 합니다. 자세한 내용은 [콘솔에서 컴퓨팅 로그를 보는 데 필요한 권한](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` 작업에 쉘 명령을 제공할 수 있습니다. 콘솔에서 명령은 별도의 줄에 입력됩니다. CLI에서 명령은 별도의 문자열로 입력됩니다.  
다중 라인 형식은 지원되지 않으며 오류 메시지가 표시됩니다. **명령** 필드에 명령을 입력하려면 단일 줄 형식을 사용해야 합니다.
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** 필드에서 해당 OS의 컴퓨팅 유형이 허용됩니다. 이 작업에 사용할 수 있는 CodeBuild 컴퓨팅 유형에 대한 자세한 내용은 CodeBuild 사용 설명서의 [빌드 환경 컴퓨팅 모드 및 유형](https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-compute-types.html) 참조를 참조하세요.  
지정하지 않으면 빌드 환경의 컴퓨팅 기본값은 다음과 같습니다.  
+ **컴퓨팅 유형: **BUILD\$1GENERAL1\$1SMALL
+ **환경 유형:** LINUX\$1CONTAINER

**ComputeType**  
필수 여부: 아니요  
EnvironmentType에 대한 선택에 따라 컴퓨팅 유형을 제공할 수 있습니다. 다음은 컴퓨팅에 사용할 수 있는 값이지만 사용 가능한 옵션은 OS에 따라 다를 수 있습니다.  
+ 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)를 참조하세요.  

![\[명령 작업이 있는 새 파이프라인에 대한 작업 편집 페이지\]](http://docs.aws.amazon.com/ko_kr/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` 유형을 사용할 때이 값은 AWS Secrets Manager에 이미 저장한 보안 암호의 이름이어야 합니다.

**Type**  
환경 변수 값의 사용 유형을 지정합니다. 이때 값은 `PLAINTEXT` 또는 `SECRETS_MANAGER`가 될 수 있습니다. 값이 `SECRETS_MANAGER`인 경우 `EnvironmentVariable` 값에 보안 암호 참조를 제공합니다. 지정하지 않으면 기본적으로 `PLAINTEXT`가 사용됩니다.  
민감한 값, 특히 AWS 자격 증명을 저장하기 위해 *일반 텍스트* 환경 변수를 사용하지 않는 것이 좋습니다. CodeBuild 콘솔 또는 AWS CLI를 사용하면 *plaintext* 환경 변수가 일반 텍스트로 표시됩니다. 중요한 값의 경우 대신 `SECRETS_MANAGER` 유형을 사용하는 것이 좋습니다.

**참고**  
환경 변수 구성에 대해 `name`, `value` 및 `type`을 입력할 때, 특히 환경 변수에 CodePipeline 출력 변수 구문이 포함된 경우 구성 값 필드에 1000자 제한을 초과하지 마십시오. 이 제한을 초과하면 확인 오류가 반환됩니다.

환경 변수를 보여주는 예제 작업 선언은 [구성 파라미터](#action-reference-Commands-config) 섹션을 참조하세요.

**참고**  
`SECRETS_MANAGER` 유형은 Commands 작업에서만 지원됩니다.
Commands 작업에서 참조된 보안 암호는 CodeBuild와 유사한 빌드 로그에서 수정됩니다. 그러나 파이프라인에 대한 **편집** 액세스 권한이 있는 파이프라인 사용자는 명령을 수정하여 이러한 보안 암호 값에 계속 액세스할 수 있습니다.
SecretsManager를 사용하려면 파이프라인 서비스 역할에 다음 권한을 추가해야 합니다.  

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

## 서비스 역할 권한: Commands 작업
<a name="edit-role-Commands"></a>

연결 지원의 경우 다음을 정책 설명에 추가합니다.

------
#### [ 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) - 이 자습서에서는 명령 작업이 포함된 샘플 파이프라인을 제공합니다.