

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

# 튜토리얼: CodeDeploy를 사용하여 온프레미스 인스턴스에 애플리케이션 배포(Windows Server, Ubuntu Server 또는 Red Hat Enterprise Linux)
<a name="tutorials-on-premises-instance"></a>

이 튜토리얼에서는 Windows Server, Ubuntu Server 또는 Red Hat Enterprise Linux(RHEL)를 실행하는 단일 온프레미스 인스턴스(Amazon EC2 온프레미스 인스턴스가 아닌 물리적 디바이스)에 샘플 애플리케이션 수정 버전을 배포하는 과정을 안내하여 CodeDeploy를 경험해 볼 수 있습니다. 온프레미스 인스턴스와 이러한 인스턴스가 CodeDeploy와 작동하는 방식에 대한 자세한 내용은 [CodeDeploy용 온프레미스 인스턴스 작업](instances-on-premises.md) 단원을 참조하세요.

찾는 항목이 보이지 않습니까?
+ Amazon Linux 또는 RHEL을 실행하는 Amazon EC2 인스턴스에 배포하려면 [튜토리얼: Amazon EC2 인스턴스(Amazon Linux 또는 Red Hat Enterprise Linux 및 Linux, macOS 또는 Unix)에 WordPress 배포](tutorials-wordpress.md) 단원을 참조하세요.
+ Windows Server를 실행하는 Amazon EC2 인스턴스에 배포하려면 [튜토리얼: CodeDeploy를 사용하여 "hello, world\$1" 애플리케이션 배포(Windows Server)](tutorials-windows.md) 단원을 참조하세요.

**Topics**
+ [사전 조건](tutorials-on-premises-instance-prerequisites.md)
+ [1단계: 온프레미스 인스턴스 구성](tutorials-on-premises-instance-1-configure-instance.md)
+ [2단계: 샘플 애플리케이션 수정 버전 만들기](tutorials-on-premises-instance-2-create-sample-revision.md)
+ [3단계: 애플리케이션 수정 버전을 번들링하여 Amazon S3에 업로드](tutorials-on-premises-instance-3-bundle-sample-revision.md)
+ [4단계: 애플리케이션 수정 버전 배포](tutorials-on-premises-instance-4-deploy-sample-revision.md)
+ [5단계: 배포 확인](tutorials-on-premises-instance-5-verify-deployment.md)
+ [6단계: 리소스 정리](tutorials-on-premises-instance-6-clean-up-resources.md)

# 사전 조건
<a name="tutorials-on-premises-instance-prerequisites"></a>

이 자습서를 시작하기 전에 사용자 구성, 설치 또는 업그레이드, 서비스 역할 AWS CLI생성 [CodeDeploy 시작하기](getting-started-codedeploy.md)등의 사전 조건을 완료해야 합니다. 사전 요구 사항에서 설명하는 것처럼 IAM 인스턴스 프로파일을 만들 필요는 없습니다. 온프레미스 인스턴스에서는 IAM 인스턴스 프로파일을 사용하지 않습니다.

온프레미스 인스턴스로 구성할 물리적 디바이스에서는 [CodeDeploy 에이전트에서 지원하는 운영 체제](codedeploy-agent.md#codedeploy-agent-supported-operating-systems)에 나열된 운영 체제 중 하나를 실행해야 합니다.

# 1단계: 온프레미스 인스턴스 구성
<a name="tutorials-on-premises-instance-1-configure-instance"></a>

온프레미스 인스턴스에 배포하기 전에 먼저, 온프레미스 인스턴스를 구성해야 합니다. [CodeDeploy용 온프레미스 인스턴스 작업](instances-on-premises.md)의 지침을 수행한 다음 이 페이지로 돌아오세요.

## CodeDeploy 에이전트 설치
<a name="tutorials-on-premises-instance-1-configure-instance-agent"></a>

온프레미스 인스턴스를 구성한 후 [CodeDeploy 에이전트 설치](https://docs.aws.amazon.com/codedeploy/latest/userguide/codedeploy-agent-operations-install.html)의 온프레미스 인스턴스 관련 단계를 수행하고 이 페이지로 돌아갑니다.

# 2단계: 샘플 애플리케이션 수정 버전 만들기
<a name="tutorials-on-premises-instance-2-create-sample-revision"></a>

이 단계에서는 온프레미스 인스턴스에 배포할 샘플 애플리케이션 수정을 만듭니다.

온프레미스 인스턴스에 어떤 소프트웨어 및 기능이 이미 설치되어 있는지 또는 조직의 정책에 따라 어떤 소프트웨어 및 기능을 설치할 수 있는지 파악하기 어렵기 때문에 여기서 제공되는 샘플 애플리케이션 수정 버전은 배치 스크립트(Windows Server용) 또는 셸 스크립트(Ubuntu Server 및 RHEL용)를 사용하여 온프레미스 인스턴스의 위치에 텍스트 파일을 씁니다. **Install**, **AfterInstall**, **ApplicationStart**, **ValidateService** 등 여러 CodeDeploy의 배포 수명 주기 이벤트 각각에 대해 하나의 파일이 작성됩니다. **BeforeInstall** 배포 수명 주기 이벤트 중 스크립트가 실행되어 이 샘플의 이전 배포 중 기록된 이전 파일을 제거하고 온프레미스 인스턴스에 새 파일을 기록할 위치를 만듭니다.

**참고**  
다음 중 하나에 해당하면 샘플 애플리케이션 수정을 배포하지 못할 수 있습니다.  
온프레미스 인스턴스에서 CodeDeploy 에이전트를 시작한 사용자에게 스크립트를 실행할 권한이 없는 경우
사용자에게 스크립트에 나열된 위치에 폴더를 만들거나 삭제할 권한이 없는 경우
사용자에게 스크립트에 나열된 위치에 텍스트 파일을 만들 권한이 없는 경우

**참고**  
Windows Server 인스턴스를 구성했는데 다른 샘플을 배포하고자 하는 경우 [튜토리얼: CodeDeploy를 사용하여 "hello, world\$1" 애플리케이션 배포(Windows Server)](tutorials-windows.md) 튜토리얼의 [2단계: Windows Server Amazon EC2 인스턴스에 배포하도록 원본 콘텐츠 구성](tutorials-windows-configure-content.md)에 나와 있는 샘플을 사용할 수 있습니다.  
RHEL 인스턴스를 구성했는데 다른 샘플을 배포하고자 하는 경우 [튜토리얼: Amazon EC2 인스턴스(Amazon Linux 또는 Red Hat Enterprise Linux 및 Linux, macOS 또는 Unix)에 WordPress 배포](tutorials-wordpress.md) 튜토리얼의 [2단계: Amazon Linux 또는 Red Hat Enterprise Linux Amazon EC2 인스턴스에 배포할 원본 콘텐츠 구성](tutorials-wordpress-configure-content.md)에 나와 있는 샘플을 사용할 수 있습니다.  
현재, Ubuntu Server에 사용할 수 있는 대체 샘플은 없습니다.

1. 개발 머신에 샘플 애플리케이션 수정의 파일을 저장할 `CodeDeployDemo-OnPrem`이라는 하위 디렉터리(하위 폴더)를 만든 다음 이 폴더로 이동합니다. 예를 들어 Windows Server에서는 `c:\temp` 폴더, Ubuntu Server 및 RHEL에서는 `/tmp` 폴더를 루트 폴더로 사용한다고 가정합니다. 다른 폴더를 사용하는 경우 이 자습서 전체에서 해당 폴더로 바꾸십시오.

   Windows의 경우:

   ```
   mkdir c:\temp\CodeDeployDemo-OnPrem
   cd c:\temp\CodeDeployDemo-OnPrem
   ```

   Linux, macOS, Unix의 경우:

   ```
   mkdir /tmp/CodeDeployDemo-OnPrem
   cd /tmp/CodeDeployDemo-OnPrem
   ```

1. `CodeDeployDemo-OnPrem` 하위 폴더의 루트에서 텍스트 편집기를 사용하여 `appspec.yml`이라는 파일과 `install.txt`라는 파일을 만듭니다.

   Windows Server의 경우 `appspec.yml`:

   ```
   version: 0.0
   os: windows
   files:
     - source: .\install.txt
       destination: c:\temp\CodeDeployExample
   hooks:
     BeforeInstall:
       - location: .\scripts\before-install.bat
         timeout: 900
     AfterInstall:
       - location: .\scripts\after-install.bat     
         timeout: 900
     ApplicationStart:
       - location: .\scripts\application-start.bat  
         timeout: 900
     ValidateService:
       - location: .\scripts\validate-service.bat    
         timeout: 900
   ```

   Ubuntu Server and RHEL의 경우 `appspec.yml`:

   ```
   version: 0.0
   os: linux
   files:
     - source: ./install.txt
       destination: /tmp/CodeDeployExample
   hooks:
     BeforeInstall:
       - location: ./scripts/before-install.sh
         timeout: 900
     AfterInstall:
       - location: ./scripts/after-install.sh
         timeout: 900
     ApplicationStart:
       - location: ./scripts/application-start.sh
         timeout: 900
     ValidateService:
       - location: ./scripts/validate-service.sh
         timeout: 900
   ```

   AppSpec 파일에 대한 자세한 내용은 [CodeDeploy에 대한 개정에 애플리케이션 사양 파일 추가](application-revisions-appspec-file.md) 및 [CodeDeploy AppSpec 파일 참조](reference-appspec-file.md)를 참조하세요.

   `install.txt`:

   ```
   The Install deployment lifecycle event successfully completed.
   ```

1. `CodeDeployDemo-OnPrem` 하위 폴더의 루트 아래에 `scripts` 하위 폴더를 만든 후 해당 하위 폴더로 이동합니다.

   Windows의 경우:

   ```
   mkdir c:\temp\CodeDeployDemo-OnPrem\scripts
   cd c:\temp\CodeDeployDemo-OnPrem\scripts
   ```

   Linux, macOS, Unix의 경우:

   ```
   mkdir -p /tmp/CodeDeployDemo-OnPrem/scripts
   cd /tmp/CodeDeployDemo-OnPrem/scripts
   ```

1. `scripts` 하위 폴더의 루트에서 텍스트 편집기를 사용하여 Windows Server의 경우 `before-install.bat`, `after-install.bat`, `application-start.bat`, `validate-service.bat`(이)라는 파일 4개를 작성하거나 Ubuntu Server 및 RHEL의 경우 `before-install.sh`, `after-install.sh`, `application-start.sh`, `validate-service.sh`(이)라는 파일 4개를 작성합니다.

   Windows Server의 경우: 

   `before-install.bat`:

   ```
   set FOLDER=%HOMEDRIVE%\temp\CodeDeployExample
   
   if exist %FOLDER% (
     rd /s /q "%FOLDER%"
   )
   
   mkdir %FOLDER%
   ```

   `after-install.bat`:

   ```
   cd %HOMEDRIVE%\temp\CodeDeployExample
   
   echo The AfterInstall deployment lifecycle event successfully completed. > after-install.txt
   ```

   `application-start.bat`:

   ```
   cd %HOMEDRIVE%\temp\CodeDeployExample
   
   echo The ApplicationStart deployment lifecycle event successfully completed. > application-start.txt
   ```

   `validate-service.bat`:

   ```
   cd %HOMEDRIVE%\temp\CodeDeployExample
   
   echo The ValidateService deployment lifecycle event successfully completed. > validate-service.txt
   ```

   Ubuntu Server and RHEL의 경우 :

   `before-install.sh`:

   ```
   #!/bin/bash
   export FOLDER=/tmp/CodeDeployExample
   
   if [ -d $FOLDER ]
   then
    rm -rf $FOLDER
   fi
   
   mkdir -p $FOLDER
   ```

   `after-install.sh`:

   ```
   #!/bin/bash
   cd /tmp/CodeDeployExample
   
   echo "The AfterInstall deployment lifecycle event successfully completed." > after-install.txt
   ```

   `application-start.sh`:

   ```
   #!/bin/bash
   cd /tmp/CodeDeployExample
   
   echo "The ApplicationStart deployment lifecycle event successfully completed." > application-start.txt
   ```

   `validate-service.sh`:

   ```
   #!/bin/bash
   cd /tmp/CodeDeployExample
   
   echo "The ValidateService deployment lifecycle event successfully completed." > validate-service.txt
   
   unset FOLDER
   ```

1. Ubuntu Server 및 RHEL에서만 네 개의 셸 스크립트에 실행 권한이 있는지 확인하세요.

   ```
   chmod +x ./scripts/*
   ```

# 3단계: 애플리케이션 수정 버전을 번들링하여 Amazon S3에 업로드
<a name="tutorials-on-premises-instance-3-bundle-sample-revision"></a>

애플리케이션 수정 버전을 배포하려면 파일을 번들링한 다음 파일 번들을 Amazon S3 버킷에 업로드해야 합니다. [CodeDeploy를 사용하여 애플리케이션 생성](applications-create.md) 및 [Amazon S3에 CodeDeploy의 개정 푸시(EC2 온프레미스 배포 전용)](application-revisions-push.md)의 지침을 따르십시오. 애플리케이션과 배포 그룹에 어떤 이름이든 지정할 수 있지만 애플리케이션 이름으로 `CodeDeploy-OnPrem-App`을, 배포 그룹 이름으로 `CodeDeploy-OnPrem-DG`를 지정하는 것이 좋습니다. 이러한 지침을 완료한 후 이 페이지로 돌아옵니다.

**참고**  
또는 GitHub 리포지토리에 파일 번들을 업로드하고 GitHub 리포지토리에서 배포할 수 있습니다. 자세한 내용은 [GitHub와 CodeDeploy 통합](integrations-partners-github.md) 단원을 참조하십시오.

# 4단계: 애플리케이션 수정 버전 배포
<a name="tutorials-on-premises-instance-4-deploy-sample-revision"></a>

Amazon S3 버킷에 애플리케이션 수정 버전을 업로드한 후 온프레미스 인스턴스에 배포해 보십시오. [CodeDeploy에서 배포 만들기](deployments-create.md)의 지침을 수행한 다음 이 페이지로 돌아오세요.

# 5단계: 배포 확인
<a name="tutorials-on-premises-instance-5-verify-deployment"></a>

배포가 성공적인지 확인하려면 [CodeDeploy 배포 세부 정보 보기](deployments-view-details.md)의 지침을 수행해고 이 페이지로 돌아옵니다.

배포에 성공한 경우 `c:\temp\CodeDeployExample` 폴더(Windows Server의 경우) 또는 `/tmp/CodeDeployExample` (Ubuntu Server 및 RHEL의 경우)에서 텍스트 파일 네 개를 찾을 수 있습니다.

배포에 실패한 경우에는 [CodeDeploy에서 인스턴스 정보 보기](instances-view-details.md) 및 [인스턴스 문제 해결](troubleshooting-ec2-instances.md)의 문제 해결 단계를 수행하세요. 필요한 부분을 수정하고, 애플리케이션 수정을 다시 번들링하여 업로드한 다음 다시 배포해 보십시오.

# 6단계: 리소스 정리
<a name="tutorials-on-premises-instance-6-clean-up-resources"></a>

이 튜토리얼에서 만든 리소스에 대해 비용이 청구되지 않도록 하려면 더 이상 사용할 필요가 없는 경우 Amazon S3 버킷을 삭제합니다. 또한 CodeDeploy 및 온프레미스 인스턴스의 애플리케이션 및 배포 그룹 레코드 등과 같은 관련 리소스를 정리할 수도 있습니다.

 AWS CLI 또는 CodeDeploy 및 Amazon S3 콘솔과의 조합을 사용하여 리소스를 정리 AWS CLI 할 수 있습니다.

## 리소스 정리(CLI)
<a name="tutorials-on-premises-instance-6-clean-up-resources-cli"></a>

**Amazon S3 버킷을 삭제하려면**
+ 버킷(예: `amzn-s3-demo-bucket`)에 대한 `--recursive` 스위치와 함께 [rm](https://docs.aws.amazon.com/cli/latest/reference/s3/rm.html) 명령을 호출합니다. 버킷을 비롯해 버킷에 있는 모든 객체가 삭제됩니다.

  ```
  aws s3 rm s3://your-bucket-name --recursive --region region
  ```

**CodeDeploy에서 배포 그룹 레코드와 애플리케이션을 삭제하려면**
+ 애플리케이션(예: `CodeDeploy-OnPrem-App`)에 대해 [delete-application](https://docs.aws.amazon.com/cli/latest/reference/deploy/delete-application.html) 명령을 호출합니다. 배포 그룹 및 배포에 대한 레코드가 삭제됩니다.

  ```
  aws deploy delete-application --application-name your-application-name
  ```<a name="tutorials-on-premises-instance-6-clean-up-resources-deregister-cli"></a>

**온프레미스 인스턴스의 등록을 취소하고 IAM 사용자를 삭제하려면**
+ 온프레미스 인스턴스 및 리전에 대해 [deregister](https://docs.aws.amazon.com/cli/latest/reference/deploy/deregister.html) 명령을 호출합니다.

  ```
  aws deploy deregister --instance-name your-instance-name --delete-iam-user --region your-region
  ```
**참고**  
이 온프레미스 인스턴스와 연결된 IAM 사용자를 삭제하지 않으려는 경우 `--no-delete-iam-user` 옵션을 대신 사용합니다.

**CodeDeploy 에이전트를 제거하고 온프레미스 인스턴스에서 구성 파일을 삭제하려면**
+ 온프레미스 인스턴스에서 [uninstall](https://docs.aws.amazon.com/cli/latest/reference/deploy/uninstall.html) 명령을 호출합니다.

  ```
  aws deploy uninstall
  ```

이제 자습서에 사용된 리소스를 정리하는 모든 단계를 완료했습니다.

## 리소스 정리(콘솔)
<a name="tutorials-on-premises-instance-6-clean-up-resources-console"></a>

**Amazon S3 버킷을 삭제하려면**

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) Amazon S3 콘솔을 엽니다.

1. 삭제하려는 버킷(예: `amzn-s3-demo-bucket`) 옆의 아이콘을 선택하고 버킷은 선택하지 않습니다.

1. **작업**을 선택한 후 **삭제**를 선택합니다.

1. 버킷을 삭제할 것인지 묻는 메시지가 나타나면 [**OK**]를 선택합니다.

**CodeDeploy에서 배포 그룹 레코드와 애플리케이션을 삭제하려면**

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/codedeploy](https://console.aws.amazon.com/codedeploy) CodeDeploy 콘솔을 엽니다.
**참고**  
[CodeDeploy 시작하기](getting-started-codedeploy.md)에서 설정한 사용자와 동일한 사용자로 로그인합니다.

1. 탐색 창에서 **애플리케이션**을 선택합니다.

1. 삭제할 애플리케이션 이름(예: `CodeDeploy-OnPrem-App`)을 선택한 후 **애플리케이션 삭제**를 선택합니다.

1. 메시지가 표시되면 삭제를 확인할 애플리케이션의 이름을 입력한 후 **삭제**를 선택합니다.

 AWS CodeDeploy 콘솔을 사용하여 온프레미스 인스턴스의 등록을 취소하거나 CodeDeploy 에이전트를 제거할 수 없습니다. [온프레미스 인스턴스의 등록을 취소하고 IAM 사용자를 삭제하려면](#tutorials-on-premises-instance-6-clean-up-resources-deregister-cli)의 지침을 따르세요.