

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

# 튜토리얼: CodeDeploy를 사용하여 "hello, world\$1" 애플리케이션 배포(Windows Server)
<a name="tutorials-windows"></a>

이 튜토리얼에서는 IIS(인터넷 정보 서비스)를 웹 서버로 실행하는 단일 Windows Server Amazon EC2 인스턴스에 단일 웹 페이지를 배포합니다. 이 웹 페이지는 간단한 “Hello, World\$1” 메시지를 표시합니다.

찾는 항목이 보이지 않습니까?
+ Amazon Linux 또는 Red Hat Enterprise Linux(RHEL) Amazon EC2 인스턴스에 배포하는 방법을 연습하려면 [튜토리얼: Amazon EC2 인스턴스(Amazon Linux 또는 Red Hat Enterprise Linux 및 Linux, macOS 또는 Unix)에 WordPress 배포](tutorials-wordpress.md) 단원을 참조하세요.
+ 온-프레미스 인스턴스에 배포하는 방법을 연습하려면 [튜토리얼: CodeDeploy를 사용하여 온프레미스 인스턴스에 애플리케이션 배포(Windows Server, Ubuntu Server 또는 Red Hat Enterprise Linux)](tutorials-on-premises-instance.md) 단원을 참조하세요.

이 튜토리얼의 단계는 Windows 관점에서 제공됩니다. Linux, macOS 또는 Unix를 실행하는 로컬 컴퓨터에서 이러한 단계를 대부분 완료할 수 있지만 `c:\temp`와(과) 같은 Windows 기반 디렉터리 경로를 포함하는 경로를 조정해야 합니다. 또한 Amazon EC2 인스턴스에 연결하려면 RDP(원격 데스크톱 프로토콜)를 통해 Windows Server를 실행하는 Amazon EC2 인스턴스에 연결할 수 있는 클라이언트 애플리케이션이 필요합니다. Windows에는 기본적으로 RDP 연결 클라이언트 애플리케이션이 포함되어 있습니다.

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

**Topics**
+ [1단계: Windows Server Amazon EC2 인스턴스 시작](tutorials-windows-launch-instance.md)
+ [2단계: Windows Server Amazon EC2 인스턴스에 배포하도록 원본 콘텐츠 구성](tutorials-windows-configure-content.md)
+ [3단계: "hello, world\$1" 애플리케이션을 Amazon S3에 업로드](tutorials-windows-upload-application.md)
+ [4단계: Hello World 애플리케이션 배포](tutorials-windows-deploy-application.md)
+ [5 단계: "hello, world\$1" 애플리케이션 업데이트 및 재배포](tutorials-windows-update-and-redeploy-application.md)
+ [6단계: "hello, world\$1" 애플리케이션 및 관련 리소스 정리](tutorials-windows-clean-up.md)

# 1단계: Windows Server Amazon EC2 인스턴스 시작
<a name="tutorials-windows-launch-instance"></a>

Hello, World 애플리케이션을 CodeDeploy로 배포하려면 Windows Server를 실행하는 Amazon EC2 인스턴스가 필요합니다.

[CodeDeploy를 위한 Amazon EC2 인스턴스 생성](instances-ec2-create.md)의 지침을 따르세요. Amazon EC2 인스턴스 태그를 인스턴스에 할당할 준비가 되면 태그 키 **Name**와(과) 태그 값 **CodeDeployDemo**을(를) 지정해야 합니다. 태그 키 또는 태그 값을 다르게 지정한 경우 [4단계: Hello World 애플리케이션 배포](tutorials-windows-deploy-application.md)의 지침을 따르면 예기치 않은 결과가 발생할 수 있습니다.

Amazon EC2 인스턴스를 시작한 후에는 이 페이지로 돌아와 계속해서 다음 섹션으로 진행합니다. 다음 단계로 [CodeDeploy를 사용하여 애플리케이션 생성](applications-create.md) 단원을 진행하지 마십시오.

## Amazon EC2 인스턴스에 연결
<a name="tutorials-windows-launch-instance-connect"></a>

Amazon EC2 인스턴스 시작 후 다음 지침에 따라 해당 인스턴스에 연결하는 연습을 합니다.

**참고**  
다음 지침에서는 Windows와 Windows Desktop Connection 클라이언트 애플리케이션을 실행한다고 가정합니다. 자세한 내용은 [RDP를 사용하여 Windows 인스턴스에 연결](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/connecting_to_windows_instance.html) 단원을 참조하세요. 다른 운영 체제 또는 기타 RDP 연결 클라이언트 애플리케이션의 경우 다음 지침을 조정해야 할 수 있습니다.

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

1. 탐색 창의 **인스턴스**에서 **인스턴스**를 선택합니다.

1. 목록에서 Windows Server 인스턴스를 찾아서 선택하세요.

1. **연결**을 선택합니다.

1. **암호 가져오기**를 선택한 다음 **파일 선택**을 선택합니다.

1. Windows Server Amazon EC2 인스턴스와 연결된 Amazon EC2 인스턴스 키 페어 파일을 찾아서 선택한 후 **열기**를 선택하세요.

1. **암호 해독**을 선택합니다. 표시되는 암호를 기록해 둡니다. 10단계에서 이 이름이 필요합니다.

1. [**Download Remote Desktop File**]을 선택한 후 파일을 엽니다.

1. 원격 연결 게시자를 식별할 수 없더라도 연결하라는 메시지가 표시되면 계속 진행합니다.

1. 7단계 메모해 둔 암호를 입력한 다음, 계속 진행합니다. (RDP 연결 클라이언트 애플리케이션에 사용자 이름을 입력하라는 메시지가 표시되면 **Administrator**를 입력하세요.)

1. 원격 컴퓨터의 자격 증명을 확인할 수 없더라도 연결하라는 메시지가 표시되면 계속 진행합니다.

1. 연결된 후에는 Windows Server를 실행하는 Amazon EC2 인스턴스의 데스크톱이 표시됩니다.

1. 이제 Amazon EC2 인스턴스와의 연결을 해제할 수 있습니다.
**주의**  
인스턴스를 중지하거나 종료하지 마십시오. 인스턴스를 중지하거나 종료할 경우 CodeDeploy가 인스턴스에 배포할 수 없습니다.

## Windows Server Amazon EC2 인스턴스에 HTTP 트래픽을 허용하는 인바운드 규칙 추가
<a name="tutorials-windows-launch-instance-add-inbound-rule"></a>

다음 단계에서는 브라우저의 Windows Server Amazon EC2 인스턴스에서 배포된 웹페이지를 볼 수 있도록 Amazon EC2 인스턴스에 열린 HTTP 포트가 있는지 확인합니다.

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

1. **인스턴스**를 선택한 후 인스턴스를 선택합니다.

1. **설명** 탭의 **보안 그룹**에서 **인바운드 규칙 보기**를 선택합니다.

   보안 그룹에 다음과 같은 규칙 목록이 있어야 합니다.

   ```
   Security Groups associated with i-1234567890abcdef0
    Ports     Protocol     Source     launch-wizard-N
    22        tcp          0.0.0.0/0          ✔
   ```

1.  **보안 그룹**에서 Amazon EC2 인스턴스를 위한 보안 그룹을 선택합니다. 이름은 **launch-wizard-*N***이 될 수 있습니다. 이름의 ***N***은 인스턴스가 생성될 때 보안 그룹에 할당된 번호입니다.

    **인바운드** 탭을 선택합니다. 인스턴스의 보안 그룹이 올바르게 구성되어 있으면 다음 값이 있는 규칙이 표시되어야 합니다.
   + **유형**: HTTP
   + **프로토콜**: TCP
   + **포트 범위**: 80
   + **소스**: 0.0.0.0/0

1.  이러한 값이 있는 규칙이 없는 경우 [보안 그룹에 규칙 추가](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html#adding-security-group-rule)의 절차를 사용하여 해당 값을 새 보안 규칙에 추가하세요.

# 2단계: Windows Server Amazon EC2 인스턴스에 배포하도록 원본 콘텐츠 구성
<a name="tutorials-windows-configure-content"></a>

이제 Amazon EC2 인스턴스에 배포할 수 있도록 애플리케이션의 소스 콘텐츠를 구성해야 합니다. 이 튜토리얼에서는 Windows Server를 실행하는 Amazon EC2 인스턴스에 단일 웹 페이지를 배포합니다. 이 인스턴스는 IIS(인터넷 정보 서비스)를 웹 서버로 실행합니다. 이 웹 페이지는 간단한 “Hello, World\$1” 메시지를 표시합니다.

**Topics**
+ [웹 페이지 만들기](#tutorials-windows-configure-content-download-code)
+ [애플리케이션을 실행하는 스크립트 만들기](#tutorials-windows-configure-content-create-scripts)
+ [애플리케이션 사양 파일 추가](#tutorials-windows-configure-content-add-appspec-file)

## 웹 페이지 만들기
<a name="tutorials-windows-configure-content-download-code"></a>

1. `c:\temp` 폴더에 `HelloWorldApp`(이)라는 하위 디렉터리(하위 폴더)를 만든 다음 다음 해당 폴더로 전환합니다.

   ```
   mkdir c:\temp\HelloWorldApp
   cd c:\temp\HelloWorldApp
   ```
**참고**  
`c:\temp` 또는 `HelloWorldApp`(이)라는 하위 폴더의 위치를 사용할 필요가 없습니다. 다른 위치 또는 하위 폴더를 사용하는 경우 이 자습서 전체에서 이를 사용해야 합니다.

1. 텍스트 편집기를 사용하여 폴더 내에 파일을 생성합니다. 파일 이름을 `index.html`으로 지정합니다.

   ```
   notepad index.html
   ```

1. 파일에 다음 코드를 추가하고 파일을 저장합니다.

   ```
   <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
   <html>
   <head>
     <title>Hello, World!</title>
     <style>
       body {
         color: #ffffff;
         background-color: #0188cc;
         font-family: Arial, sans-serif;  
         font-size:14px;
       }
     </style>
   </head>
   <body>
     <div align="center"><h1>Hello, World!</h1></div>
     <div align="center"><h2>You have successfully deployed an application using CodeDeploy</h2></div>
     <div align="center">
       <p>What to do next? Take a look through the <a href="https://aws.amazon.com/codedeploy">CodeDeploy Documentation</a>.</p>
     </div>
   </body>
   </html>
   ```

## 애플리케이션을 실행하는 스크립트 만들기
<a name="tutorials-windows-configure-content-create-scripts"></a>

다음으로 CodeDeploy가 대상 Amazon EC2 인스턴스에 웹 서버를 설정하는 데 사용할 스크립트를 생성합니다.

1. 동일한 하위 폴더에서 `index.html` 파일이 저장되면 텍스트 편집기를 사용하여 다른 파일을 생성합니다. 파일 이름을 `before-install.bat`으로 지정합니다.

   ```
   notepad before-install.bat
   ```

1. 파일에 다음 배치 스크립트 코드를 추가하고 파일을 저장합니다.

   ```
   REM Install Internet Information Server (IIS).
   c:\Windows\Sysnative\WindowsPowerShell\v1.0\powershell.exe -Command Import-Module -Name ServerManager
   c:\Windows\Sysnative\WindowsPowerShell\v1.0\powershell.exe -Command Install-WindowsFeature Web-Server
   ```

## 애플리케이션 사양 파일 추가
<a name="tutorials-windows-configure-content-add-appspec-file"></a>

그런 다음 웹 페이지 및 배치 스크립트 파일 외에 애플리케이션 사양 파일(AppSpec file)을 추가합니다. AppSpec 파일은 CodeDeploy에서 다음을 위해 사용하는 [YAML](http://www.yaml.org) 형식 파일입니다.
+ 애플리케이션 수정 버전의 소스 파일을 인스턴스의 대상으로 매핑합니다.
+ 배포 중에 인스턴스에서 실행할 스크립트를 지정합니다.

AppSpec 파일의 이름은 `appspec.yml`이어야 합니다. 애플리케이션 소스 코드의 루트 폴더에 있어야 합니다.

1. 동일한 하위 폴더에서 `index.html` 및 `before-install.bat` 파일이 저장되면 텍스트 편집기를 사용하여 다른 파일을 생성합니다. 파일 이름을 `appspec.yml`으로 지정합니다.

   ```
   notepad appspec.yml
   ```

1. 파일에 다음 YAML 코드를 추가하고 파일을 저장합니다.

   ```
   version: 0.0
   os: windows
   files:
     - source: \index.html
       destination: c:\inetpub\wwwroot
   hooks:
     BeforeInstall:
       - location: \before-install.bat
         timeout: 900
   ```

CodeDeploy는 이 AppSpec 파일을 사용하여 `index.html` 파일을 애플리케이션 소스 코드의 루트 폴더에서 대상 Amazon EC2 인스턴스의 `c:\inetpub\wwwroot` 폴더로 복사합니다. 배포하는 동안 CodeDeploy는 **BeforeInstall** 배포 수명 주기 이벤트 중에 `before-install.bat` 배치 스크립트를 대상 Amazon EC2 인스턴스에서 실행합니다. 이 스크립트를 실행하는 데 900초(15분) 이상 걸리면 CodeDeploy는 배포를 중지하고 Amazon EC2 인스턴스에 대한 배포를 실패로 표시합니다.

이러한 설정에 대한 자세한 정보는 [CodeDeploy AppSpec 파일 참조](reference-appspec-file.md) 단원을 참조하세요.

**중요**  
이 파일에 있는 각 항목 사이의 공백 위치와 개수는 중요합니다. 공백이 올바르지 않으면 CodeDeploy는 디버깅하기 어려운 오류를 발생시킵니다. 자세한 내용은 [AppSpec 파일 간격](reference-appspec-file.md#reference-appspec-file-spacing) 단원을 참조하십시오.

# 3단계: "hello, world\$1" 애플리케이션을 Amazon S3에 업로드
<a name="tutorials-windows-upload-application"></a>

이제 CodeDeploy가 배포할 수 있는 위치에 소스 콘텐츠를 준비하고 업로드합니다. 다음 지침은 Amazon S3 버킷을 프로비저닝하고, 버킷에 대한 애플리케이션 수정 버전 파일을 준비하고, 수정 버전의 파일을 번들로 묶은 다음, 버전을 버킷에 푸시하는 방법을 보여 줍니다.

**참고**  
이 튜토리얼에서 다루지 않지만 CodeDeploy를 사용하여 애플리케이션을 GitHub 리포지토리에서 인스턴스로 배포할 수 있습니다. 자세한 내용은 [GitHub와 CodeDeploy 통합](integrations-partners-github.md) 단원을 참조하세요.

**Topics**
+ [Amazon S3 버킷 프로비저닝](#tutorials-windows-upload-application-create-s3-bucket)
+ [버킷에 대한 애플리케이션 파일 준비](#tutorials-windows-upload-application-prepare-application-files)
+ [애플리케이션의 파일을 단일 아카이브 파일로 묶고 아카이브 파일을 푸시합니다.](#tutorials-windows-upload-application-bundle-and-push-archive)

## Amazon S3 버킷 프로비저닝
<a name="tutorials-windows-upload-application-create-s3-bucket"></a>

스토리지 컨테이너 또는 Amazon S3의 *버킷*을 만듭니다(또는 기존 버킷 사용). 버킷에 수정 버전을 업로드할 수 있는지, 배포에 사용된 Amazon EC2 인스턴스가 버킷에서 수정 버전을 다운로드할 수 있는지 확인합니다.

 AWS CLI, Amazon S3 콘솔 또는 Amazon S3 APIs를 사용하여 Amazon S3 버킷을 생성할 수 있습니다. 버킷을 생성한 후에는 버킷과 CodeDeploy 사용자에게 액세스 권한을 부여해야 합니다.

**참고**  
버킷 이름은 모든 AWS 계정의 Amazon S3에서 고유해야 합니다. **amzn-s3-demo-bucket**을(를) 사용할 수 없는 경우, 다른 버킷 이름(예: **amzn-s3-demo-bucket** 뒤에 대시와 이니셜 또는 다른 고유 식별자가 옴)을 사용하세요. 그런 다음 이 자습서 전체에서 버킷 이름을 **amzn-s3-demo-bucket**(으)로 대체해야 합니다.  
Amazon S3 버킷은 대상 Amazon EC2 인스턴스가 시작되는 리전과 동일한 AWS 리전에서 생성되어야 합니다. 예를 들어 버킷을 미국 동부(버지니아) 리전에 생성한 경우 대상 Amazon EC2 인스턴스를 미국 동부(버지니아 북부) 리전에서 시작해야 합니다.

**Topics**
+ [Amazon S3 버킷을 생성하려면(CLI)](#tutorials-windows-upload-application-create-s3-bucket-cli)
+ [Amazon S3 버킷을 생성하려면(콘솔)](#tutorials-windows-upload-application-create-s3-bucket-console)
+ [Amazon S3 버킷 및 AWS 계정에 권한 부여](#tutorials-windows-upload-application-create-s3-bucket-grant-permission)

### Amazon S3 버킷을 생성하려면(CLI)
<a name="tutorials-windows-upload-application-create-s3-bucket-cli"></a>

**mb** 명령을 호출하여 이름이 **amzn-s3-demo-bucket**인 Amazon S3 버킷을 생성합니다.

```
aws s3 mb s3://amzn-s3-demo-bucket --region region
```

### Amazon S3 버킷을 생성하려면(콘솔)
<a name="tutorials-windows-upload-application-create-s3-bucket-console"></a>

1. [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)에서 S3 콘솔을 엽니다.

1. Amazon S3; 콘솔에서 **버킷 생성**을 선택합니다.

1. **버킷 이름** 상자에서 버킷의 이름을 입력합니다.

1. **리전** 목록에서 대상 리전을 선택한 후 **생성**을 선택합니다.

### Amazon S3 버킷 및 AWS 계정에 권한 부여
<a name="tutorials-windows-upload-application-create-s3-bucket-grant-permission"></a>

또한 Amazon S3 버킷으로 업로드할 수 있는 권한이 있어야 합니다. Amazon S3 버킷 정책을 통해 이러한 권한을 지정할 수 있습니다. 예를 들어 다음 Amazon S3 버킷 정책에서 와일드카드 문자(\$1)를 사용하면 AWS 계정이 라는 Amazon S3 버킷의 모든 디렉터리에 파일을 `111122223333` 업로드할 수 있습니다`amzn-s3-demo-bucket`.

```
{
    "Statement": [
        {
            "Action": [
                "s3:PutObject"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
            "Principal": {
                "AWS": [
                    "111122223333"
                ]
            }
        }
    ]
}
```

 AWS 계정 ID를 보려면 [AWS 계정 ID 찾기를 참조하세요](https://docs.aws.amazon.com/IAM/latest/UserGuide/console_account-alias.html#FindingYourAWSId).

이제 Amazon S3 버킷이 참여하는 각 Amazon EC2 인스턴스에서 다운로드 요청을 허용하는지 확인하는 것이 좋습니다. Amazon S3 버킷 정책을 통해 이를 지정할 수 있습니다. 예를 들어, 다음 Amazon S3 버킷 정책에서 와일드카드 문자(\$1)를 사용하면 `arn:aws:iam::444455556666:role/CodeDeployDemo` ARN이 포함된 IAM 인스턴스 프로파일이 연결된 Amazon EC2 인스턴스가 이름이 `amzn-s3-demo-bucket`인 Amazon S3 버킷의 디렉터리에서 파일을 다운로드할 수 있습니다.

```
{
    "Statement": [
        {
            "Action": [
                "s3:Get*",
                "s3:List*"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::444455556666:role/CodeDeployDemo"
                ]
            }
        }
    ]
}
```

Amazon S3 버킷 정책 생성 및 연결에 대한 자세한 내용은 [버킷 정책 예제](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html)를 참조하세요.

[1단계: 설정](getting-started-setting-up.md)에서 만든 CodeDeploy 관리 사용자에게도 Amazon S3 버킷으로 개정 버전을 업로드할 수 있는 권한이 있어야 합니다. 이를 지정하는 한 가지 방법은 사용자의 권한 세트나 IAM 역할(사용자에게 수임을 허용한 역할)에 추가하는 IAM 정책을 사용하는 것입니다. 다음 IAM 정책은 사용자가 `amzn-s3-demo-bucket`이라는 Amazon S3 버킷의 어디에나 개정 버전을 업로드할 수 있도록 허용합니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	   
  "Statement":[
    {
      "Effect":"Allow",
      "Action":["s3:PutObject"],
      "Resource":"arn:aws:s3:::amzn-s3-demo-bucket/*"
    }
  ]
}
```

------

IAM 정책을 생성하는 방법에 대한 자세한 내용은 **IAM 사용 설명서의 [IAM 정책 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)을 참조하세요. 권한 세트에 정책을 추가하는 방법에 대한 자세한 내용은 **AWS IAM Identity Center 사용 설명서의 [Create a permission set](https://docs.aws.amazon.com/singlesignon/latest/userguide/howtocreatepermissionset.html)(권한 세트 생성)를 참조하세요.

## 버킷에 대한 애플리케이션 파일 준비
<a name="tutorials-windows-upload-application-prepare-application-files"></a>

웹 페이지, AppSpec 파일 및 스크립트가 개발 컴퓨터에서 다음과 같이 구성되어 있는지 확인하세요.

```
c:\
  |-- temp\
        |--HelloWorldApp\
             |-- appspec.yml
             |-- before-install.bat
             |-- index.html
```

## 애플리케이션의 파일을 단일 아카이브 파일로 묶고 아카이브 파일을 푸시합니다.
<a name="tutorials-windows-upload-application-bundle-and-push-archive"></a>

파일을 아카이브 파일(애플리케이션 *수정 버전*이라고도 함)로 번들링합니다.

**참고**  
객체를 버킷에 저장하거나 애플리케이션 수정 버전을 버킷으로 전송한 경우 요금이 부과될 수 있습니다. 자세한 내용은 [Amazon S3 요금](https://aws.amazon.com/s3/pricing/)을 참조하세요.

1. 개발 컴퓨터에서 파일이 저장된 폴더로 전환하세요.

   ```
   cd c:\temp\HelloWorldApp
   ```
**참고**  
이 폴더로 전환하지 않으면 현재 폴더에서 파일 번들링이 시작됩니다. 예를 들어 현재 폴더가 `c:\temp\HelloWorldApp` 대신 `c:\temp`이면 `c:\temp` 폴더의 파일 및 하위 폴더로 번들링이 시작되어 `HelloWorldApp` 하위 폴더보다 더 많은 폴더를 포함할 수 있습니다.

1. **create-application** 명령을 호출하여 CodeDeploy에서 이름이 **HelloWorld\$1App**인 새 애플리케이션을 등록합니다.

   ```
   aws deploy create-application --application-name HelloWorld_App
   ```

1. CodeDeploy [push](https://docs.aws.amazon.com/cli/latest/reference/deploy/push.html) 명령을 호출하여 파일을 묶고, 수정 버전을 Amazon S3로 업로드하고, 업로드된 수정 버전에 대한 정보를 CodeDeploy에 등록할 수 있습니다. 이 모든 작업을 한 번에 수행할 수 있습니다.

   ```
   aws deploy push --application-name HelloWorld_App --s3-location s3://amzn-s3-demo-bucket/HelloWorld_App.zip --ignore-hidden-files
   ```

   이 명령은 현재 디렉터리의 파일(숨겨진 파일 제외)을 단일 아카이브 파일(이름: `HelloWorld_App.zip`)로 번들링하고 수정 버전을 **amzn-s3-demo-bucket** 버킷에 업로드하고 업로드된 수정 버전에 대한 정보를 CodeDeploy에 등록합니다.

# 4단계: Hello World 애플리케이션 배포
<a name="tutorials-windows-deploy-application"></a>

이제 Amazon S3에 업로드한 샘플 Hello, World 애플리케이션 수정 버전을 배포합니다. AWS CLI 또는 CodeDeploy 콘솔을 사용하여 수정 버전을 배포하고 배포 진행 상황을 모니터링합니다. 애플리케이션 수정 배포에 성공한 후에는 결과를 확인합니다.

**Topics**
+ [CodeDeploy로 애플리케이션 수정 버전 배포](#tutorials-windows-deploy-application-create-deployment)
+ [배포 모니터링 및 문제 해결](#tutorials-windows-deploy-application-monitor)
+ [배포 확인](#tutorials-windows-deploy-application-verify)

## CodeDeploy로 애플리케이션 수정 버전 배포
<a name="tutorials-windows-deploy-application-create-deployment"></a>

 CLI 또는 콘솔을 사용하여 애플리케이션을 배포할 수 있습니다.

**Topics**
+ [애플리케이션 수정을 배포하려면(CLI)](#tutorials-windows-deploy-application-create-deployment-cli)
+ [애플리케이션 수정을 배포하려면(콘솔)](#tutorials-windows-deploy-application-create-deployment-console)

### 애플리케이션 수정을 배포하려면(CLI)
<a name="tutorials-windows-deploy-application-create-deployment-cli"></a>

1. 먼저 배포에는 배포 그룹이 필요합니다. 그러나 배포 그룹을 만들기 전에 서비스 역할 ARN이 필요합니다. 서비스 역할은 서비스에 사용자를 대신할 수 있는 권한을 부여하는 IAM 역할입니다. 이 경우에 서비스 역할은 CodeDeploy에 Amazon EC2 인스턴스에 액세스하여 Amazon EC2 인스턴스 태그를 확장할(읽을) 수 있는 권한을 부여합니다.

   [서비스 역할 생성(CLI)](getting-started-create-service-role.md#getting-started-create-service-role-cli)의 지침에 따라 앞에서 서비스 역할을 생성했습니다. 서비스 역할의 ARN을 확인하려면 [서비스 역할 ARN 확인(CLI)](getting-started-create-service-role.md#getting-started-get-service-role-cli) 단원을 참조하세요.

1. 이제 ARN이 있으므로 해당 서비스 역할 ARN으로 **create-deployment-group** 명령을 호출하고, **CodeDeployDemo**(이)라는 Amazon EC2 인스턴스 태그와 **CodeDeployDefault.OneAtATime**(이)라는 배포 구성을 사용하여 **HelloWorld\$1App**(이)라는 애플리케이션과 연결된 **HelloWorld\$1DepGroup**(이)라는 배포 그룹을 만듭니다.

   ```
   aws deploy create-deployment-group --application-name HelloWorld_App --deployment-group-name HelloWorld_DepGroup --deployment-config-name CodeDeployDefault.OneAtATime --ec2-tag-filters Key=Name,Value=CodeDeployDemo,Type=KEY_AND_VALUE --service-role-arn serviceRoleARN
   ```
**참고**  
[create-deployment-group](https://docs.aws.amazon.com/cli/latest/reference/deploy/create-deployment-group.html) 명령은 배포 및 인스턴스의 지정된 이벤트에 대해 주제의 구독자에게 Amazon SNS 알림을 전송하게 하는 트리거를 생성합니다. 또한 해당 명령은 Amazon CloudWatch 경보 모니터링 임계값에 도달한 경우 자동으로 배포를 롤백하고 배포를 중지하도록 경보를 설정하는 옵션을 지원합니다. 이 작업에 대한 명령은 이 자습서에 포함되지 않습니다.

1. 배포를 만들기 전에 배포 그룹의 인스턴스에 CodeDeploy 에이전트가 설치되어 있어야 합니다. AWS Systems Manager 를 사용하여 명령줄에서 다음 명령으로 에이전트를 설치할 수 있습니다.

   ```
   aws ssm create-association --name AWS-ConfigureAWSPackage --targets Key=tag:Name,Values=CodeDeployDemo --parameters action=Install,name=AWSCodeDeployAgent --schedule-expression "cron(0 2 ? * SUN *)" 
   ```

   이 명령은 Systems Manager 상태 관리자에 연결을 생성하여 CodeDeploy 에이전트를 설치하고 매주 일요일 오전 2시에 업데이트를 시도합니다. CodeDeploy 에이전트에 대한 자세한 내용은 [CodeDeploy 에이전트 작업](https://docs.aws.amazon.com/codedeploy/latest/userguide/codedeploy-agent.html)을 참조하세요. Systems Manager에 대한 자세한 내용은 [AWS Systems Manager란 무엇입니까](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html)를 참조하세요.

1. 이제 **create-deployment** 명령을 호출하고 **HelloWorld\$1App**이라는 버킷에 있는 **CodeDeployDefault.OneAtATime**이라는 애플리케이션 수정을 사용하여 **HelloWorld\$1DepGroup**이라는 애플리케이션, **HelloWorld\$1App.zip**이라는 배포 구성 및 **amzn-s3-demo-bucket**이라는 배포 그룹과 연결된 배포를 만듭니다.

   ```
   aws deploy create-deployment --application-name HelloWorld_App --deployment-config-name CodeDeployDefault.OneAtATime --deployment-group-name HelloWorld_DepGroup --s3-location bucket=amzn-s3-demo-bucket,bundleType=zip,key=HelloWorld_App.zip
   ```

### 애플리케이션 수정을 배포하려면(콘솔)
<a name="tutorials-windows-deploy-application-create-deployment-console"></a>

1. CodeDeploy 콘솔을 사용하여 애플리케이션 수정을 배포하기 전에 서비스 역할 ARN이 필요합니다. 서비스 역할은 서비스에 사용자를 대신할 수 있는 권한을 부여하는 IAM 역할입니다. 이 경우에 서비스 역할은 CodeDeploy에 Amazon EC2 인스턴스에 액세스하여 Amazon EC2 인스턴스 태그를 확장할(읽을) 수 있는 권한을 부여합니다.

   [서비스 역할 생성(콘솔)](getting-started-create-service-role.md#getting-started-create-service-role-console)의 지침에 따라 앞에서 서비스 역할을 생성했습니다. 서비스 역할의 ARN을 확인하려면 [서비스 역할 ARN 확인(콘솔)](getting-started-create-service-role.md#getting-started-get-service-role-console) 단원을 참조하세요.

1. 이제 ARN이 있으므로 CodeDeploy 콘솔을 사용하여 애플리케이션 수정을 배포할 수 있습니다.

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

1. 탐색 창에서 **배포**를 확장하고 **애플리케이션**을 선택합니다.

1. **HelloWorld\$1App**을 선택합니다.

1. **배포 그룹** 탭에서 **Create deployment group(배포 그룹 생성)**을 선택합니다.

1. **Deployment group name(배포 그룹 이름)**에 **HelloWorld\$1DepGroup**을 입력합니다.

1. **서비스 역할**에서 서비스 역할의 이름을 선택합니다.

1. **배포 유형**에서 **In-place(현재 위치)**를 선택합니다.

1. **환경 구성**에서 **Amazon EC2 인스턴스**를 선택합니다.

1. 를 **사용한 에이전트 구성 AWS Systems Manager**에서 기본값을 유지합니다.

1. **키**에 **Name**을(를) 입력합니다.

1. **값**에 **CodeDeployDemo**을(를) 입력합니다.

1. **배포 구성**에서 **CodeDeployDefault.OneAtATime**을 선택합니다.

1. **로드 밸런서**에서 **Enable load balancing(로드 밸런싱 활성화)**을 선택 해제합니다.

1. [**Create deployment group**]을 선택합니다.

1. **배포 만들기**를 선택합니다.

1. **배포 그룹**에서 **HelloWorld\$1DepGroup**을 선택합니다.

1. **수정 유형**에서 **애플리케이션을 Amazon S3에 저장**을 선택한 후 **수정 버전 위치**에 이전에 Amazon S3에 업로드한 샘플 Hello, World 애플리케이션 수정 버전의 위치를 입력합니다. 위치를 가져오려면:

   1. [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)에서 S3 콘솔을 엽니다.

   1. 버킷 목록에서 **amzn-s3-demo-bucket**(또는 애플리케이션 수정 버전을 업로드한 버킷 이름)을 선택합니다.

   1. 객체 목록에서 [**HelloWorld\$1App.zip**]을 선택합니다.

   1. **개요** 탭에서 **경로 복사**를 선택합니다.

   1. CodeDeploy 콘솔로 돌아가서 **수정 위치**에 **링크** 필드 값을 붙여 넣습니다.

1. **수정 파일 형식**으로 **.zip**을 선택합니다.

1. (선택 사항) **배포 설명**에 설명을 입력합니다.

1. **배포 만들기**를 선택합니다. 새로 만든 배포에 대한 정보가 [**Deployments**] 페이지에 표시됩니다.

## 배포 모니터링 및 문제 해결
<a name="tutorials-windows-deploy-application-monitor"></a>

 AWS CLI 또는 콘솔을 사용하여 배포를 모니터링하고 문제를 해결합니다.

**Topics**
+ [배포를 모니터링하고 문제를 해결하려면(CLI)](#tutorials-windows-deploy-application-monitor-cli)
+ [배포를 모니터링하고 문제를 해결하려면(콘솔)](#tutorials-windows-deploy-application-monitor-console)

### 배포를 모니터링하고 문제를 해결하려면(CLI)
<a name="tutorials-windows-deploy-application-monitor-cli"></a>

1. **HelloWorld\$1App**이라는 애플리케이션 및 **HelloWorld\$1DepGroup**이라는 배포 그룹에 대해 **list-deployments** 명령을 호출하여 배포 ID를 가져옵니다.

   ```
   aws deploy list-deployments --application-name HelloWorld_App --deployment-group-name HelloWorld_DepGroup --query "deployments" --output text
   ```

1. 배포 ID로 **get-deployment** 명령을 호출합니다.

   ```
   aws deploy get-deployment --deployment-id deploymentID --query "deploymentInfo.status" --output text
   ```

1. 이 명령으로 배포의 전체 상태가 반환됩니다. 성공하면 `Succeeded` 값이 반환됩니다.

   전체 상태가 `Failed`이면 [list-deployment-instances](https://docs.aws.amazon.com/cli/latest/reference/deploy/list-deployment-instances.html) 및 [get-deployment-instance](https://docs.aws.amazon.com/cli/latest/reference/deploy/get-deployment-instance.html)와 같은 명령을 호출하여 문제를 해결할 수 있습니다. 문제 해결 옵션을 더 보려면 [인스턴스에 대한 배포 실패를 조사하기 위해 로그 파일 분석](troubleshooting-ec2-instances.md#troubleshooting-deploy-failures)을 참조하세요.

### 배포를 모니터링하고 문제를 해결하려면(콘솔)
<a name="tutorials-windows-deploy-application-monitor-console"></a>

CodeDeploy 콘솔의 **배포 ** 페이지에 있는 **상태** 열에서 배포 상태를 모니터링할 수 있습니다.

배포에 대한 자세한 정보를 확인하려면(특히, [**Status**] 열 값이 [**Succeeded**]가 아닌 경우):

1. **배포** 테이블에서 배포 ID를 선택합니다. 배포에 실패하면 실패 원인을 설명하는 메시지가 배포 세부 정보 페이지에 표시됩니다.

1. 배포의 인스턴스에 대한 자세한 정보가 표시됩니다. 배포에 실패한 후 배포에 실패한 Amazon EC2 인스턴스와 해당 단계를 확인할 수 있습니다.

1. 문제 해결을 더 수행해야 할 경우 [CodeDeploy에서 인스턴스 정보 보기](instances-view-details.md)와 같은 기능을 사용할 수 있습니다. 또한 Amazon EC2 인스턴스의 배포 로그 파일을 분석할 수도 있습니다. 자세한 내용은 [인스턴스에 대한 배포 실패를 조사하기 위해 로그 파일 분석](troubleshooting-ec2-instances.md#troubleshooting-deploy-failures) 단원을 참조하세요.

## 배포 확인
<a name="tutorials-windows-deploy-application-verify"></a>

배포에 성공한 후 설치가 작동 중인지 확인합니다. Amazon EC2 인스턴스의 퍼블릭 DNS 주소를 사용해 웹 브라우저에서 웹 페이지를 확인합니다. (퍼블릭 DNS 값을 확인하려면 Amazon EC2 콘솔에서 Amazon EC2 인스턴스를 선택하고 **설명** 탭에서 **퍼블릭 DNS**의 값을 찾습니다.)

예를 들어, Amazon EC2 인스턴스의 퍼블릭 DNS 주소가 **ec2-01-234-567-890.compute-1.amazonaws.com**이면 다음 URL을 사용합니다.

```
http://ec2-01-234-567-890.compute-1.amazonaws.com
```

성공하면 Hello, World 웹 페이지가 표시되어야 합니다.

# 5 단계: "hello, world\$1" 애플리케이션 업데이트 및 재배포
<a name="tutorials-windows-update-and-redeploy-application"></a>

이제 애플리케이션 수정 버전을 배포했으므로 개발 컴퓨터에서 웹 페이지의 코드를 업데이트한 다음 CodeDeploy를 사용하여 사이트를 다시 배포합니다. 재배포한 후에는 Amazon EC2 인스턴스에서 변경 내용을 확인할 수 있어야 합니다.

**Topics**
+ [웹 페이지 수정](#tutorials-windows-update-and-redeploy-application-modify-code)
+ [사이트 재배포](#tutorials-windows-update-and-redeploy-application-deploy-updates)

## 웹 페이지 수정
<a name="tutorials-windows-update-and-redeploy-application-modify-code"></a>

1. `c:\temp\HelloWorldApp` 하위 폴더로 이동하고 텍스트 편집기를 사용하여 `index.html` 파일을 수정합니다.

   ```
   cd c:\temp\HelloWorldApp
   notepad index.html
   ```

1. `index.html` 파일의 콘텐츠를 수정하여 웹 페이지의 배경 색과 텍스트 일부를 변경한 다음, 파일을 저장합니다.

   ```
   <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
   <html>
   <head>
     <title>Hello Again, World!</title>
     <style>
       body {
         color: #ffffff;
         background-color: #66cc00;
         font-family: Arial, sans-serif;  
         font-size:14px;
       }
     </style>
   </head>
   <body>
     <div align="center"><h1>Hello Again, World!</h1></div>
     <div align="center"><h2>You have successfully deployed a revision of an application using CodeDeploy</h2></div>
     <div align="center">
       <p>What to do next? Take a look through the <a href="https://aws.amazon.com/codedeploy">CodeDeploy Documentation</a>.</p>
     </div>
   </body>
   </html>
   ```

## 사이트 재배포
<a name="tutorials-windows-update-and-redeploy-application-deploy-updates"></a>

코드를 수정했으므로 Amazon S3 및 CodeDeploy를 사용하여 웹 페이지를 다시 배포합니다.

[애플리케이션의 파일을 단일 아카이브 파일로 묶고 아카이브 파일을 푸시합니다.](tutorials-windows-upload-application.md#tutorials-windows-upload-application-bundle-and-push-archive)에 설명된 대로 Amazon S3 변경 사항을 번들로 묶어 업로드합니다. 이러한 지침을 따르면 새 애플리케이션을 만들지 않아도 됩니다. 수정 버전에 이전과 동일한 키(**HelloWorld\$1App.zip**)를 지정하세요. 이전에 생성한 것과 동일한 Amazon S3 버킷(예:**amzn-s3-demo-bucket**)에 업로드합니다.

 AWS CLI 또는 CodeDeploy 콘솔을 사용하여 사이트를 재배포합니다.

**Topics**
+ [사이트를 재배포하려면(CLI)](#tutorials-windows-update-and-redeploy-application-deploy-updates-cli)
+ [사이트를 재배포하려면(콘솔)](#tutorials-windows-update-and-redeploy-application-deploy-updates-console)

### 사이트를 재배포하려면(CLI)
<a name="tutorials-windows-update-and-redeploy-application-deploy-updates-cli"></a>

**create-deployment** 명령을 호출하고 다시 **HelloWorld\$1App**(이)라는 애플리케이션, **CodeDeployDefault.OneAtATime**(이)라는 배포 구성, **HelloWorld\$1DepGroup**(이)라는 배포 그룹, **amzn-s3-demo-bucket**(이)라는 버킷에 있는 **HelloWorld\$1App.zip**(이)라는 애플리케이션 수정 버전을사용하여 업로드된 수정 버전을 기반으로 배포를 생성합니다.

```
 aws deploy create-deployment --application-name HelloWorld_App --deployment-config-name CodeDeployDefault.OneAtATime --deployment-group-name HelloWorld_DepGroup --s3-location bucket=amzn-s3-demo-bucket,bundleType=zip,key=HelloWorld_App.zip
```

[배포 모니터링 및 문제 해결](tutorials-windows-deploy-application.md#tutorials-windows-deploy-application-monitor)에 설명된 대로 새 배포의 상태를 확인할 수 있습니다.

CodeDeploy가 사이트를 재배포한 경우 웹 브라우저에서 사이트를 다시 방문하여 웹 페이지의 배경색과 텍스트가 변경되었는지 확인합니다. (브라우저를 새로 고쳐야 할 수 있습니다.) 배경색과 텍스트가 변경되었으면 제대로 수행된 것입니다. 사이트를 수정하고 재배포했습니다\$1

### 사이트를 재배포하려면(콘솔)
<a name="tutorials-windows-update-and-redeploy-application-deploy-updates-console"></a>

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

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

1. **애플리케이션** 목록에서 **HelloWorld\$1App**을 선택합니다.

1. **배포** 탭에서 **배포 만들기**를 선택합니다.

   1. **배포 그룹** 목록에서 **HelloWorld\$1DepGroup**을 선택합니다.

   1.  **수정 버전 위치**에 수정 버전에 대한 Amazon S3 링크를 입력합니다.

      링크 값을 찾으려면:

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

         **amzn-s3-demo-bucket**을 찾아서 열고 Amazon S3 콘솔에서 수정 버전 **HelloWorld\$1App.zip**을 선택합니다.

      1. Amazon S3 콘솔에서 **속성** 창이 보이지 않으면, **속성** 버튼을 선택합니다.

      1. **속성** 창에서 **링크** 필드의 값을 복사합니다.

      1. CodeDeploy 콘솔로 돌아가서 **수정 버전 위치**에 링크를 붙여 넣습니다.

   1. **수정 버전 파일 형식**에서 파일 형식을 찾을 수 없다는 메시지가 표시되는 경우, **.zip**을 선택합니다.

   1. **배포 설명**은 비워 둡니다.

   1. **배포 구성** 목록의 **배포 그룹 재정의**를 확장하고 **CodeDeployDefault.OneAtATime**를 선택한 다음 **배포 만들기**를 선택합니다.

      [배포 모니터링 및 문제 해결](tutorials-windows-deploy-application.md#tutorials-windows-deploy-application-monitor)에 설명된 대로 배포의 상태를 확인할 수 있습니다.

      CodeDeploy가 사이트를 재배포한 경우 웹 브라우저에서 사이트를 다시 방문하여 웹 페이지의 배경색과 텍스트가 변경되었는지 확인합니다. (브라우저를 새로 고쳐야 할 수 있습니다.) 배경색과 텍스트가 변경되었으면 제대로 수행된 것입니다. 사이트를 수정하고 재배포했습니다\$1

# 6단계: "hello, world\$1" 애플리케이션 및 관련 리소스 정리
<a name="tutorials-windows-clean-up"></a>

이제 “Hello, World\$1” 코드를 업데이트했고 사이트를 다시 배포했습니다. 이 자습서를 완료하기 위해 만든 리소스에 계속해서 비용이 부과되지 않도록 하려면 다음 항목을 삭제해야 합니다.
+ 모든 CloudFormation 스택(또는 외부에서 생성한 경우 Amazon EC2 인스턴스 종료 CloudFormation).
+ 모든 Amazon S3 버킷.
+ CodeDeploy의 `HelloWorld_App` 애플리케이션.
+ CodeDeploy 에이전트에 대한 AWS Systems Manager 상태 관리자 연결입니다.

 AWS CLI, CloudFormation, Amazon S3, Amazon EC2 및 CodeDeploy 콘솔 또는 AWS APIs를 수행할 수 있습니다.

**Topics**
+ [정리 리소스를 사용하려면(CLI)](#tutorials-windows-clean-up-cli)
+ [리소스를 정리하려면(콘솔)](#tutorials-windows-clean-up-console)
+ [다음 단계](#tutorials-windows-clean-up-whats-next)

## 정리 리소스를 사용하려면(CLI)
<a name="tutorials-windows-clean-up-cli"></a>

1. 이 자습서에서 CloudFormation 스택을 사용한 경우 라는 스택에 대해 **delete-stack** 명령을 호출하여 스택을 삭제합니다**CodeDeployDemoStack**. 이렇게 하면 수반되는 모든 Amazon EC2 인스턴스가 종료되고 스택에서 원래 생성된 모든 동반 IAM 역할이 삭제됩니다.

   ```
   aws cloudformation delete-stack --stack-name CodeDeployDemoStack
   ```

1. Amazon S3 버킷을 삭제하려면 **amzn-s3-demo-bucket**(이)라는 버킷에 대해 **--recursive** 스위치를 사용하여 **rm** 명령을 호출합니다. 버킷을 비롯해 버킷에 있는 모든 객체가 삭제됩니다.

   ```
   aws s3 rm s3://amzn-s3-demo-bucket --recursive --region region
   ```

1. CodeDeploy 에서 `HelloWorld_App` 애플리케이션을 삭제하려면 **delete-application** 명령을 호출합니다. 이렇게 하면 애플리케이션에 대해 연결된 배포 그룹 레코드와 배포 레코드가 모두 삭제됩니다.

   ```
   aws deploy delete-application --application-name HelloWorld_App
   ```

1. Systems Manager 상태 관리자 연결을 삭제하려면 **delete-association** 명령을 호출합니다.

   ```
   aws ssm delete-association --assocation-id association-id
   ```

   **describe-association** 명령을 호출하여 *association-id*를 얻을 수 있습니다.

   ```
   aws ssm describe-association --name AWS-ConfigureAWSPackage --targets Key=tag:Name,Values=CodeDeployDemo
   ```

1. 이 자습서에서 CloudFormation 스택을 사용하지 않은 경우 **terminate-instances** 명령을 호출하여 수동으로 생성한 Amazon EC2 인스턴스를 종료합니다. 종료할 Amazon EC2 인스턴스의 ID를 입력합니다.

   ```
   aws ec2 terminate-instances --instance-ids instanceId
   ```

## 리소스를 정리하려면(콘솔)
<a name="tutorials-windows-clean-up-console"></a>

이 자습서에서 CloudFormation 템플릿을 사용한 경우 연결된 CloudFormation 스택을 삭제합니다.

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

1. 검색 상자에 CloudFormation 스택 이름(예: **CodeDeployDemoStack**)을 입력합니다.

1. 스택 이름 옆의 상자를 선택합니다.

1. **작업** 메뉴에서 **스택 삭제**를 선택합니다. 이렇게 하면 스택이 삭제되고, 수반되는 모든 Amazon EC2 인스턴스가 종료되며, 수반되는 모든 IAM 역할이 삭제됩니다.

 CloudFormation 스택 외부에서 생성한 Amazon EC2 인스턴스를 종료하려면:

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

1. **인스턴스** 영역에서 **인스턴스**를 선택합니다.

1. 검색 상자에 종료할 Amazon EC2 인스턴스의 이름을 입력한 후 **Enter**를 누릅니다.

1. Amazon EC2 인스턴스를 선택합니다.

1. **작업**을 선택하고 **인스턴스 상태**를 가리킨 다음 **종료**를 선택합니다. 메시지가 나타나면 [**Yes, Terminate**]를 선택합니다. 추가 Amazon EC2 인스턴스에 대해 이 단계를 반복합니다.

Amazon S3 버킷을 삭제하려면

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

1. 버킷 목록에서 Amazon S3 버킷의 이름(예: **amzn-s3-demo-bucket**)을 찾아서 선택합니다.

1. 버킷을 삭제하려면 먼저 버킷의 콘텐츠를 삭제해야 합니다. 버킷에 있는 모든 파일(예: **HelloWorld\$1App.zip**)을 선택합니다. **작업** 메뉴에서 **삭제**를 선택합니다. 삭제 확인 메시지가 표시되면 **확인**을 선택합니다.

1. 버킷을 비운 후 버킷을 삭제할 수 있습니다. 버킷 목록에서 버킷 행을 선택합니다(버킷 이름은 아님). **버킷 삭제**를 선택하고 확인하라는 메시지가 나타나면**확인**을 선택합니다.

CodeDeploy에서 `HelloWorld_App` 애플리케이션을 삭제하려면

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

1. 탐색 창에서 **배포**를 확장하고 **애플리케이션**을 선택합니다.

   

1. **`HelloWorld_App`**을 선택합니다.

1. **애플리케이션 삭제**를 선택합니다.

1. 메시지가 표시되면 **Delete**를 입력한 후 **삭제**를 선택합니다.

Systems Manager 상태 관리자 연결을 삭제하려면

1. https://console.aws.amazon.com/systems-manager AWS Systems Manager 콘솔을 엽니다.

1. 탐색 창에서 **상태 관리자**를 선택합니다.

1. 생성한 연결을 선택하고 **삭제**를 선택합니다.

## 다음 단계
<a name="tutorials-windows-clean-up-whats-next"></a>

여기까지 진행했으면 CodeDeploy를 사용하여 배포를 성공적으로 완료한 것입니다. 축하합니다\$1