

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

# Amazon EC2 작업 참조
<a name="action-reference-EC2Deploy"></a>

Amazon EC2 `EC2` 작업을 사용하여 배포 플릿에 애플리케이션 코드를 배포합니다. 배포 플릿은 Amazon EC2 Linux 인스턴스 또는 Linux SSM 관리형 노드로 구성될 수 있습니다. 인스턴스에 SSM 에이전트가 설치되어 있어야 합니다.

**참고**  
이 작업은 Linux 인스턴스 유형만 지원합니다. 지원되는 최대 플릿 크기는 인스턴스 500개입니다.

작업은 지정된 최대값을 기반으로 인스턴스 수를 선택합니다. 이전 인스턴스에서 실패한 인스턴스가 먼저 선택됩니다. 이전에 작업이 실패한 경우와 같이 인스턴스가 이미 동일한 입력 아티팩트의 배포를 수신한 경우 작업은 특정 인스턴스에서 배포를 건너뜁니다.

**참고**  
이 작업은 V2 유형 파이프라인에서만 지원됩니다.

**Topics**
+ [작업 유형](#action-reference-EC2Deploy-type)
+ [구성 파라미터](#action-reference-EC2Deploy-parameters)
+ [입력 아티팩트](#action-reference-EC2Deploy-input)
+ [출력 아티팩트](#action-reference-EC2Deploy-output)
+ [EC2 배포 작업에 대한 서비스 역할 정책 권한](#action-reference-EC2Deploy-permissions-action)
+ [사양 파일 참조 배포](#action-reference-EC2Deploy-spec-reference)
+ [작업 선언](#action-reference-EC2Deploy-example)
+ [배포 사양 예제를 사용한 작업 선언](#action-reference-EC2Deploy-example-spec)
+ [다음 사항도 참조하세요.](#action-reference-EC2Deploy-links)

## 작업 유형
<a name="action-reference-EC2Deploy-type"></a>
+ 범주: `Deploy`
+ 소유자: `AWS`
+ 공급자: `EC2`
+ 버전: `1`

## 구성 파라미터
<a name="action-reference-EC2Deploy-parameters"></a>

**InstanceTagKey**  
필수 항목 여부: 예  
`Name`과 같이 Amazon EC2에서 생성한 인스턴스의 태그 키입니다.

**InstanceTagValue**  
필수 여부: 아니요  
`my-instances`와 같이 Amazon EC2에서 생성한 인스턴스의 태그 값입니다.  
이 값을 지정하지 않으면 **InstanceTagKey**가 있는 모든 인스턴스가 일치하게 됩니다.

**InstanceType**  
필수 항목 여부: 예  
Amazon EC2에서 생성된 인스턴스 또는 SSM 노드의 유형입니다. 유효 값은 `EC2` 및 `SSM_MANAGED_NODE`입니다.  
모든 인스턴스에 SSM 에이전트를 이미 생성, 태그 지정 및 설치했어야 합니다.  
인스턴스를 생성할 때 기존 EC2 인스턴스 역할을 생성하거나 사용합니다. `Access Denied` 오류를 방지하려면 인스턴스 역할에 S3 버킷 권한을 추가하여 인스턴스에 CodePipeline 아티팩트 버킷에 대한 권한을 부여해야 합니다. 파이프라인 리전의 아티팩트 버킷으로 범위가 지정된 `s3:GetObject` 권한으로 기본 역할을 생성하거나 기존 역할을 업데이트합니다.

**TargetDirectory**  
필수: 예(스크립트가 지정된 경우)  
Amazon EC2 인스턴스에서 스크립트를 실행하는 데 사용할 디렉터리입니다.

**DeploySpec**  
필수: 예(배포 사양이 지정된 경우)  
배포 설치 및 수명 주기 이벤트를 구성하는 데 사용할 파일입니다. 배포 사양 필드 설명 및 정보는 [사양 파일 참조 배포](#action-reference-EC2Deploy-spec-reference) 섹션을 참조하세요. 배포 사양 파일이 지정된 작업 구성을 보려면 [배포 사양 예제를 사용한 작업 선언](#action-reference-EC2Deploy-example-spec)의 예제를 참조하세요.

**MaxBatch**  
필수 여부: 아니요  
병렬로 배포할 수 있는 최대 인스턴스 수입니다.

**MaxError**  
필수 여부: 아니요  
배포 중에 허용되는 최대 인스턴스 오류 수입니다.

**TargetGroupNameList**  
필수 여부: 아니요  
배포를 위한 대상 그룹 이름 목록입니다. 대상 그룹을 이미 생성했어야 합니다.  
대상 그룹은 특정 요청을 처리하기 위한 인스턴스 세트를 제공합니다. 대상 그룹을 지정하면 배포 전에 대상 그룹에서 인스턴스가 제거되고 배포 후 대상 그룹에 다시 추가됩니다.

**PreScript**  
필수 여부: 아니요  
작업 배포 단계 전에 실행할 스크립트입니다.

**PostScript**  
필수 항목 여부: 예  
작업 배포 단계 후에 실행할 스크립트입니다.

다음 이미지는 **작업 구성 사용**이 선택된 작업에 대한 **편집** 페이지의 예를 보여줍니다.

![\[EC2Deploy 작업을 사용하여 작업 구성을 지정하는 새 파이프라인의 작업 편집 페이지\]](http://docs.aws.amazon.com/ko_kr/codepipeline/latest/userguide/images/ec2deploy-action.png)


다음 이미지는 **DeploySpec 파일 사용**이 선택된 작업에 대한 **편집** 페이지의 예를 보여줍니다.

![\[사양 파일을 사용하기 위한 EC2Deploy 작업 옵션이 있는 새 파이프라인의 작업 편집 페이지\]](http://docs.aws.amazon.com/ko_kr/codepipeline/latest/userguide/images/ec2deploy-action-spec.png)


## 입력 아티팩트
<a name="action-reference-EC2Deploy-input"></a>
+ **아티팩트 수:** `1`
+ **설명:** 배포 중에 스크립트 작업을 지원하기 위해 제공된 파일입니다.

## 출력 아티팩트
<a name="action-reference-EC2Deploy-output"></a>
+ **아티팩트 수:** `0` 
+ **설명:** 이 작업 유형에는 출력 아티팩트가 적용되지 않습니다.

## EC2 배포 작업에 대한 서비스 역할 정책 권한
<a name="action-reference-EC2Deploy-permissions-action"></a>

CodePipeline이 작업을 실행할 때 CodePipeline 서비스 역할에는 최소 권한으로 액세스할 수 있도록 범위가 적절하게 축소된 다음 최소 권한이 필요합니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "StatementWithAllResource",
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeInstances",
                "elasticloadbalancing:DescribeTargetGroupAttributes",
                "elasticloadbalancing:DescribeTargetGroups",
                "elasticloadbalancing:DescribeTargetHealth",
                "ssm:CancelCommand",
                "ssm:DescribeInstanceInformation",
                "ssm:ListCommandInvocations"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Sid": "StatementForLogs",
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": [
                "arn:aws:logs:us-east-1:111122223333:log-group:/aws/codepipeline/{{pipelineName}}:*"
            ]
        },
        {
            "Sid": "StatementForElasticloadbalancing",
            "Effect": "Allow",
            "Action": [
                "elasticloadbalancing:DeregisterTargets",
                "elasticloadbalancing:RegisterTargets"
            ],
            "Resource": [
                "arn:aws:elasticloadbalancing:us-east-1:111122223333:targetgroup/[[targetGroupName]]/*"
            ]
        },
        {
            "Sid": "StatementForSsmOnTaggedInstances",
            "Effect": "Allow",
            "Action": [
                "ssm:SendCommand"
            ],
            "Resource": [
                "arn:aws:ec2:us-east-1:111122223333:instance/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/{{tagKey}}": "{{tagValue}}"
                }
            }
        },
        {
            "Sid": "StatementForSsmApprovedDocuments",
            "Effect": "Allow",
            "Action": [
                "ssm:SendCommand"
            ],
            "Resource": [
                "arn:aws:ssm:us-east-1::document/AWS-RunPowerShellScript",
                "arn:aws:ssm:us-east-1::document/AWS-RunShellScript"
            ]
        }
    ]
}
```

------

### CloudWatch 로그의 파이프라인에 대한 로그 그룹
<a name="action-reference-EC2Deploy-logs"></a>

CodePipeline이 작업을 실행하면 CodePipeline은 다음과 같이 파이프라인 이름을 사용하여 로그 그룹을 생성합니다. 이렇게 하면 파이프라인 이름을 사용하여 리소스를 로깅할 수 있는 권한을 범위 아래로 지정할 수 있습니다.

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

로깅에 대한 다음 권한은 서비스 역할에 대한 위 업데이트에 포함됩니다.
+ logs:CreateLogGroup
+ logs:CreateLogStream
+ logs:PutLogEvents

작업 세부 정보 대화 상자를 사용하여 콘솔에서 로그를 보려면 로그를 볼 수 있는 권한을 콘솔 역할에 추가해야 합니다. 자세한 내용은 [콘솔에서 컴퓨팅 로그를 보는 데 필요한 권한](security-iam-permissions-console-logs.md)에서 콘솔 권한 정책 예제를 참조하세요.

### CloudWatch 로그에 대한 서비스 역할 정책 권한
<a name="w2aac56c13c21c11"></a>

CodePipeline이 작업을 실행하면 CodePipeline은 다음과 같이 파이프라인 이름을 사용하여 로그 그룹을 생성합니다. 이렇게 하면 파이프라인 이름을 사용하여 리소스를 로깅할 수 있는 권한을 범위 아래로 지정할 수 있습니다.

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

작업 세부 정보 대화 상자를 사용하여 콘솔에서 로그를 보려면 로그를 볼 수 있는 권한을 콘솔 역할에 추가해야 합니다. 자세한 내용은 [콘솔에서 컴퓨팅 로그를 보는 데 필요한 권한](security-iam-permissions-console-logs.md)에서 콘솔 권한 정책 예제를 참조하세요.

## 사양 파일 참조 배포
<a name="action-reference-EC2Deploy-spec-reference"></a>

CodePipeline에서 작업을 실행할 때 사양 파일을 지정하여 인스턴스에 대한 배포를 구성할 수 있습니다. 배포 사양 파일은 설치 대상과 배포 수명 주기 이벤트에 대한 응답으로 실행할 수명 주기 이벤트 후크를 지정합니다. 배포 사양 파일은 항상 YAML 형식입니다. 배포 사양 파일은 다음을 수행하는 데 사용됩니다.
+ 애플리케이션 개정의 소스 파일을 인스턴스의 대상으로 매핑합니다.
+ 배포된 파일에 대한 사용자 지정 권한을 지정합니다.
+ 배포 프로세스의 다양한 단계에서 각 인스턴스에 실행할 스크립트를 지정합니다.

배포 사양 파일은 AppSpec 파일과 함께 CodeDeploy에서 지원하는 특정 배포 구성 파라미터를 지원합니다. 기존 AppSpec 파일을 직접 사용할 수 있으며 지원되지 않는 파라미터는 무시됩니다. CodeDeploy의 AppSpec 파일에 대한 자세한 내용은 *[CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/reference-appspec-file.html) 사용 설명서*의 애플리케이션 사양 파일 참조 항목을 참조하세요.

파일 배포 파라미터는 다음과 같이 지정됩니다.
+ `files` - 배포 사양 파일은 배포 파일의 `source:` 및 `destination:`을 지정합니다.
+ `scripts` - 배포에 대해 스크립팅된 이벤트입니다. `BeforeDeploy` 및 `AfterDeploy`라는 두 가지 이벤트가 지원됩니다.
+ `hooks` - 이벤트의 수명 주기 후크입니다. `ApplicationStop`, `BeforeInstall`, `AfterInstall`, `ApplicationStart` 및 `ValidateService` 후크가 지원됩니다.
**참고**  
후크 파라미터는 CodeDeploy와의 AppSpec 호환성에 사용할 수 있으며 버전 0.0(AppSpec 형식)에서만 사용할 수 있습니다. 이 형식의 경우 CodePipeline은 이벤트에 대한 최선의 매핑을 수행합니다.

사양 파일에 올바른 YAML 간격을 사용해야 합니다. 그렇지 않으면 배포 사양 파일의 위치와 공백 수가 올바르지 않은 경우 오류가 발생합니다. 간격 지정에 대한 자세한 내용은 [YAML](http://www.yaml.org/) 사양을 참조하세요.

배포 사양 파일의 예는 다음과 같습니다.

```
version: 0.1
files:
  - source: /index.html
    destination: /var/www/html/
scripts:
  BeforeDeploy:
    - location: scripts/install_dependencies
      timeout: 300
      runas: myuser
  AfterDeploy:
    - location: scripts/start_server
      timeout: 300
      runas: myuser
```

배포 사양 파일이 지정된 작업 구성을 보려면 [배포 사양 예제를 사용한 작업 선언](#action-reference-EC2Deploy-example-spec)의 예제를 참조하세요.

## 작업 선언
<a name="action-reference-EC2Deploy-example"></a>

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

```
name: DeployEC2
actions:
- name: EC2
  actionTypeId:
    category: Deploy
    owner: AWS
    provider: EC2
    version: '1'
  runOrder: 1
  configuration:
    InstanceTagKey: Name
    InstanceTagValue: my-instances
    InstanceType: EC2
    PostScript: "test/script.sh",
    TargetDirectory: "/home/ec2-user/deploy"
  outputArtifacts: []
  inputArtifacts:
  - name: SourceArtifact
  region: us-east-1
```

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

```
{
    "name": "DeployEC2",
    "actions": [
        {
            "name": "EC2Deploy",
            "actionTypeId": {
                "category": "Deploy",
                "owner": "AWS",
                "provider": "EC2",
                "version": "1"
            },
            "runOrder": 1,
            "configuration": {
                "InstanceTagKey": "Name",
                "InstanceTagValue": "my-instances",
                "InstanceType": "EC2",
                "PostScript": "test/script.sh",
                "TargetDirectory": "/home/ec2-user/deploy"
            },
            "outputArtifacts": [],
            "inputArtifacts": [
                {
                    "name": "SourceArtifact"
                }
            ],
            "region": "us-east-1"
        }
    ]
},
```

------

## 배포 사양 예제를 사용한 작업 선언
<a name="action-reference-EC2Deploy-example-spec"></a>

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

```
name: DeployEC2
actions:
- name: EC2
  actionTypeId:
    category: Deploy
    owner: AWS
    provider: EC2
    version: '1'
  runOrder: 1
  configuration:
    DeploySpec: "deployspec.yaml"
    InstanceTagKey: Name
    InstanceTagValue: my-instances
    InstanceType: EC2
  outputArtifacts: []
  inputArtifacts:
  - name: SourceArtifact
  region: us-east-1
```

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

```
{
    "name": "DeployEC2",
    "actions": [
        {
            "name": "EC2Deploy",
            "actionTypeId": {
                "category": "Deploy",
                "owner": "AWS",
                "provider": "EC2",
                "version": "1"
            },
            "runOrder": 1,
            "configuration": {
                "DeploySpec": "deployspec.yaml",
                "InstanceTagKey": "Name",
                "InstanceTagValue": "my-instances",
                "InstanceType": "EC2"
            },
            "outputArtifacts": [],
            "inputArtifacts": [
                {
                    "name": "SourceArtifact"
                }
            ],
            "region": "us-east-1"
        }
    ]
},
```

------

## 다음 사항도 참조하세요.
<a name="action-reference-EC2Deploy-links"></a>

이 작업을 수행할 때 참조할 수 있는 관련 리소스는 다음과 같습니다.
+  [자습서: CodePipeline을 사용하여 Amazon EC2 인스턴스에 배포](tutorials-ec2-deploy.md) - 이 자습서에서는 EC2 작업을 사용한 파이프라인 생성과 함께 스크립트 파일을 배포할 EC2 인스턴스 생성을 안내합니다.
+ [오류 메시지와 함께 EC2 배포 작업이 실패함 `No such file`](troubleshooting.md#troubleshooting-ec2-deploy) - 이 주제에서는 EC2 작업에서 찾을 수 없는 파일 오류에 대한 문제 해결에 대해 설명합니다.