# EC2 Session Hands-on Lab

EC2 Linux 실습

***

<figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2Fa8jo7dDjsCvubg04Debh%2Fimage.png?alt=media&#x26;token=a9ad6a8c-528e-4b61-9fe6-8f8efa4b07a2" alt=""><figcaption></figcaption></figure>

* 키페어 생성하기
* 웹 서버 인스턴스 생성하기
* Session Manager를 사용하여 EC2 인스턴스에 접근하기
* CloudWatch Agent 설치
* 부하테스트를 통한 모니터링

***

## 키페어 생성하기 &#x20;

실습에서는 SSH 키 쌍을 사용하여 EC2 인스턴스를 생성해야 합니다. 다음 단계에 따라 이 실습에서 사용할 고유한 SSH 키 쌍을 생성할 수 있습니다.

1. AWS 관리 콘솔에 로그인하고 [Amazon EC2 콘솔 ](https://console.aws.amazon.com/ec2)을 엽니다. AWS 관리 콘솔의 오른쪽 상단 모서리에서 원하는 AWS 리전에 있는지 확인합니다.
2. 왼쪽 메뉴 하단의 네트워크 및 보안 섹션에서 **키 페어**를 클릭합니다. SSH 키 쌍을 관리하는 페이지가 표시됩니다.

<figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2FkKoz6WuJrNvjM0KiVVSz%2Fimage.png?alt=media&#x26;token=1c5e01ca-d394-4b07-93d6-07f2f542f9d0" alt=""><figcaption></figcaption></figure>

3. 새 SSH 키 페어를 생성하려면 브라우저 창의 맨 위에 있는 **키 페어 생성** 버튼을 클릭합니다.

<figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2FU32JYWj4AIW5Q1U8tuhk%2Fimage.png?alt=media&#x26;token=d5dc399d-f835-45c5-813c-8f7cb705e297" alt=""><figcaption></figcaption></figure>

4. 키 페어 이름: 텍스트 상자에 **\[Your Name]-ImmersionDay**를 입력하고 **키 페어 생성** 버튼을 클릭합니다.  (Windows 사용자의 경우 Putty와 같은 서드파트 툴 사용을 희망하는 경우  파일 형식에 대해 **ppk**를 선택)<br>

   <figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2FsK3B4o1EY1gE7YsB21ak%2Fimage.png?alt=media&#x26;token=a0b7cf8f-5481-4bef-ab6c-bbaca8c64491" alt=""><figcaption></figcaption></figure>
5. 웹 브라우저에서 **\[Your Name]-ImmersionDay.pem** 파일을 로컬 드라이브에 다운로드합니다. 브라우저 지침에 따라 파일을 기본 다운로드 위치에 저장합니다.

{% hint style="info" %}
방금 생성한 키페어를 사용하여 나머지 실습에서 진행하는 EC2 인스턴스를 관리합니다.
{% endhint %}

***

## 웹 서버 인스턴스 생성하기

1. 맨 왼쪽 메뉴 상단에서 **EC2 대시보드**를 클릭합니다. 그리고 **인스턴스 시작**을 클릭합니다.

<figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2FgpUcY2qLd21zZmiN0spO%2Fimage.png?alt=media&#x26;token=ee9d9ebe-a26a-4f28-85b9-576703829ad0" alt=""><figcaption></figcaption></figure>

2. **Name**에 **Web server for IMD** 값을 넣습니다. 그리고 아래의 Amazon Machine Image에서 화면과 같이 기본 값 설정을 확인합니다.<br>

   <figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2FAGGppgwBCnxfZxhMoZ2R%2Fimage.png?alt=media&#x26;token=90840ef1-9b9d-4cf6-a33a-0e39d4e60a2d" alt=""><figcaption></figcaption></figure>
3. 인스턴스 유형에서 **t2.micro**를 선택합니다.<br>

   <figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2FrV0AuUY4av1nT56tY7rf%2Fimage.png?alt=media&#x26;token=eeab60e6-814a-49ff-81d0-1bbffd7536fd" alt=""><figcaption></figcaption></figure>
4. 앞선 실습에서 생성한 키페어를 선택합니다.<br>

   <figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2FTww3V0xdOz9bSziDNTb0%2Fimage.png?alt=media&#x26;token=9b6f59e0-de89-443b-9470-5603ba0fd9f2" alt=""><figcaption></figcaption></figure>
5. EC2가 위치할 공간을 설정하는 네트워크 설정에서 편집 버튼을 클릭합니다.<br>

   <figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2FtJO24DBA0m2ElzDI0ZG9%2Fimage.png?alt=media&#x26;token=05334553-43d5-432d-b957-b5bee310eeb7" alt=""><figcaption></figcaption></figure>

**default VPC** 및 **subnet**을 확인합니다. **퍼블릭 IP 자동 할당**은 **활성화**로 설정합니다. 바로 아래에서 네트워크 방화벽 역할을 하는 **보안 그룹**를 생성합니다. 보안 그룹은 방화벽 정책으로 허용하고자 하는 프로토콜과 주소를 지정하게 됩니다. 현재 생성하는 보안 그룹의 경우, 생성될 EC2에 적용되는 규칙입니다. 보안 그룹 이름과 설명에 *Immersion Day - Web Server* 를 입력 후, 보안 그룹 규칙 추가를 선택합니다.<br>

<figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2FcuydnWpaZzwT904tOjL1%2Fimage.png?alt=media&#x26;token=ec91a047-25c4-4a9d-ac26-c56d7cacd3b5" alt=""><figcaption></figcaption></figure>

유형에 HTTP를 지정하여 웹 서비스를 위한 TCP/80도 함께 허용합니다. 소스 주소에서 **내 IP**를 선택합니다.

<figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2FEtwjeh6Pd99gbKKqx1BV%2Fimage.png?alt=media&#x26;token=1747c33b-ced7-42a7-b51c-f7f06a588240" alt=""><figcaption></figcaption></figure>

6. 나머지 모든 값들은 기본값을 사용하고, 화면 하단의 **고급 세부 정보** 탭을 클릭하여 확장하십시오. \
   **사용자 데이터** 입력란에 아래의 값을 입력 후, **인스턴스 시작**을 클릭하세요.

<figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2FsYoDhOwh2AByXnN79C5O%2Fimage.png?alt=media&#x26;token=70545d14-227d-49d7-a2f8-00b0f2be4993" alt=""><figcaption></figcaption></figure>

**메타데이터** 버전 드랍 다운을 클릭하고 \*\*V2만 해당(토큰 필수)\*\*를 선택합니다. ![](https://static.us-east-1.prod.workshops.aws/public/69265fd6-b183-4e58-8e44-b58874f69957/static/images/advanced-module/compute/gid-ec2-113.png)

<figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2FUTwB3i1mgEcYfAzBmhVZ%2Fimage.png?alt=media&#x26;token=4be9b407-6732-42a3-9f13-4018a1e44c17" alt=""><figcaption></figcaption></figure>

다음 내용을 **사용자 데이터** 필드에 붙여넣고 **인스턴스 시작**을 클릭하세요.&#x20;

```
#!/bin/sh
​
#Install a LAMP stack
dnf install -y httpd wget php-fpm php-mysqli php-json php php-devel
dnf install -y mariadb105-server
dnf install -y httpd php-mbstring
​
#Start the web server
chkconfig httpd on
systemctl start httpd
​
#Install the web pages for our lab
if [ ! -f /var/www/html/immersion-day-app-php7.zip ]; then
   cd /var/www/html
   wget -O 'immersion-day-app-php7.zip' 'https://habeen-test-s3.s3.ap-northeast-2.amazonaws.com/immersion_day_php_saltware.zip'
   unzip immersion-day-app-php7.zip
fi
​
# Update existing packages
dnf update -y
```

### - 웹서버 살펴보기

인스턴스가 상태 검사를 통과하여 로드가 완료될 때까지 기다립니다. \
새 브라우저 탭을 열고 EC2 인스턴스의 **퍼블릭 DNS 이름**을 브라우저에 입력하여 웹 서버를 찾습니다. \
EC2 인스턴스의 퍼블릭 DNS 이름은 위에서 강조 표시된 **퍼블릭 IPv4 DNS** 이름 줄을 검토하여 콘솔에서 찾을 수 있습니다. \ <br>

<figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2FI5QSDu6lu8iiQgC0HjGU%2Fimage.png?alt=media&#x26;token=ffad0f23-48c3-43d5-a6c4-4a83b002eae7" alt=""><figcaption></figcaption></figure>

다음과 같은 웹 페이지를 확인할 수 있습니다.

<figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2FbTzY5QXpoAy9R3WGH8M7%2Fimage.png?alt=media&#x26;token=4045a94e-b009-4b92-afc5-435d3b168bb1" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
만약 크롭 웹 브라우저를 사용하고 계시다면 **퍼블릭 IPv4 DNS** 값을 붙여넣을 때 자동으로 https가 DNS 값 앞에 자동으로 추가되어 에러가 발생할 수 있습니다. 따라서 `http://<DNS 이름>` 형태로 입력하시기 바랍니다.
{% endhint %}

## Session Manager를 사용하여 리눅스 인스턴스에 접근하기

Session Manager는 대화형 원클릭 브라우저 기반 셸 또는 AWS CLI를 통해 Amazon EC2 인스턴스를 관리할 수 있는 AWS Systems Manager의 기능입니다. Session Manager를 사용하여 계정의 인스턴스에 세션을 시작할 수 있습니다. 세션이 시작된 후, 다른 연결 유형을 통해 bash 명령을 실행할 수 있습니다.

### - Systems Manager를 위한 IAM 인스턴스 프로파일 생성

1. AWS 콘솔창에 접속한 후 IAM 콘솔 을 엽니다. 네비게이션 항목에서 **역할**을 선택한 후, **역할 생성**을 클릭합니다.&#x20;

<figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2FCEMh7RnoTLL3szaAsEh7%2Fimage.png?alt=media&#x26;token=6a19f45d-de96-4fee-9c6e-f190916e9d12" alt=""><figcaption></figcaption></figure>

<figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2FwAxenW1PWEu2UhHj4Vwz%2Fimage.png?alt=media&#x26;token=a582ed41-63da-4a94-bbb9-534a823bde84" alt=""><figcaption></figcaption></figure>

2. **신뢰할 수 있는 엔터티 유형**에서 **AWS 서비스**를 선택합니다. 바로 아래에 이 역할을 사용할 서비스인 **EC2**를 선택합니다. 사용 사례는 EC2 Role for AWS Systems Manager를 선택한 뒤 다음을 클릭합니다.<br>

   <figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2FMwtsZI1CG1sQrBrnq0Q5%2Fimage.png?alt=media&#x26;token=07ba329d-b97f-48a4-8a58-5418c0370c8a" alt=""><figcaption></figcaption></figure>
3. 권한 정책에 AmazonSSMManagedInstanceCore 정책이 선택되었는지 확인 후 다음을 선택합니다.

<figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2F9K8MHA8PpLXc3ZJvqdlR%2Fimage.png?alt=media&#x26;token=d821b51d-f282-4630-98a2-be66429f7215" alt=""><figcaption></figcaption></figure>

4. **역할 이름**에 **SSMInstanceProfile**를 입력합니다. **역할 생성**를 클릭합니다. 그러면 **역할** 창으로 돌아오게 됩니다. <br>

   <figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2FqBGXVcWE2VwU0QOONJiP%2Fimage.png?alt=media&#x26;token=08743e98-e79e-4ab0-be2f-61d4e6c46486" alt=""><figcaption></figcaption></figure>

### - 기존의 인스턴스에 Systems Manager 인스턴스 프로파일 부착

1. AWS 콘솔창에 접속한 후, Amazon EC2 콘솔 을 엽니다.

<figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2FYpZCczkfDefCXOrYBlO2%2Fimage.png?alt=media&#x26;token=28e35727-d90f-4b78-947b-5e4ad2016447" alt=""><figcaption></figcaption></figure>

2. **인스턴스** 섹션 아래에 **인스턴스**를 선택합니다. 실습 때 생성한 EC2 인스턴스를 클릭합니다.

<figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2F4WPjZZInnDViLpmOjchm%2Fimage.png?alt=media&#x26;token=055d8504-5cf5-4ad6-9538-fda02182f0a9" alt=""><figcaption></figcaption></figure>

3. **작업** 메뉴에서 **보안** 선택 후, **IAM 역할 수정**을 클릭합니다.&#x20;

<figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2FwwvOqhfq8zUHMdHsr5qz%2Fimage.png?alt=media&#x26;token=2cfc294c-a8c9-4a00-a20d-4562d665d4b4" alt=""><figcaption></figcaption></figure>

4. IAM 역할에서 방금 생성한 **SSMInstanceProfile** 인스턴스 프로파일을 선택한 뒤\
   **IAM 역할 업데이트** 버튼을 누릅니다.&#x20;

<figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2FYNoAikH8ps0phcPizZ6I%2Fimage.png?alt=media&#x26;token=17f9dda8-74bb-4522-a608-78367ab870df" alt=""><figcaption></figcaption></figure>

### - Session Managers를 사용하여 리눅스 인스턴스 연결하기

1. EC2 인스턴스 콘솔에서 방금의 인스턴스를 선택한 후, **연결** 버튼을 클릭합니다.&#x20;

<figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2FKI1gTryb8r8PQpvpFiTk%2Fimage.png?alt=media&#x26;token=6a035f66-9688-438d-8d24-57a533ef64e7" alt=""><figcaption></figcaption></figure>

<figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2FHyRSRfQvxnbciRBp5JYB%2Fimage.png?alt=media&#x26;token=5b44a51b-e2c5-4644-98fc-e0e713e9f5e5" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
만약 아래와 같은 에러가 발생할 경우, 수초를 기다린 후, 브라우저를 리프레시합니다. EC2 인스턴스가 Session Manager를 사용하기 위한 준비를 하고 있기 때문입니다. 혹은 앞선 페이지에서 인스턴스를 클릭한 후, **인스턴스 상태** 드랍 다운을 클릭한 후, **인스턴스 재부팅**을 클릭합니다.\
인스턴스 재부팅 이후 3분 내외로 Session Manager 사용가능한 상태로 변경됩니다.
{% endhint %}

2. **인스턴스에 연결** 페이지에서 **Session Manager** 탭을 선택합니다. \
   Session Manager 사용에 대한 이점이 담겨있는 **Session Manager 사용** 내용을 검토합니다.

<figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2FScLccuXphMXi83uDphR8%2Fimage.png?alt=media&#x26;token=67d2bce0-6e60-442a-b097-88f40d9cf9e8" alt=""><figcaption></figcaption></figure>

3. **연결**를 선택합니다. 새로운 세션이 새로운 탭에서 시작될겁니다. 세션이 시작된 후, bash 명령어를 실행할 수 있습니다.&#x20;

<figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2FwsBjDNdiVWvk28p1y42S%2Fimage.png?alt=media&#x26;token=e119e971-aed3-43a9-ac6e-196f95b88072" alt=""><figcaption></figcaption></figure>

## SSH를  통하여 리눅스 인스턴스에 접근하기

1. EC2 인스턴스 콘솔에서 연결할 인스턴스를 선택한 다음 **연결** 버튼을 클릭합니다.&#x20;

<figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2FQjYRwXmjDn2KOjhh10Tp%2Fimage.png?alt=media&#x26;token=458a3e87-6fdf-4dbe-8c8b-ff360be5921d" alt=""><figcaption></figcaption></figure>

2. 인스턴스에 연결 페이지에서 **SSH 클라이언트** 탭을 누릅니다.

<figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2F9P2KeGppGJvdT7JKDE3Z%2Fimage.png?alt=media&#x26;token=6a3807cd-eee6-412f-987e-308b722206b7" alt=""><figcaption></figcaption></figure>

3. 프라이빗 키가 있는 로컬 디렉토리 위치로 이동하고 다음 명령을 입력합니다.

```
chmod 400 "AWS-ImmersionDay.pem"
ssh -i [AWS-ImmersionDay.pem] ec2-user@[Your Public DNS]
```

4. 연결을 계속 진행할 것인지 묻는 질문에 yes라고 대답한 후, 아래와 같은 결과를 확인할 수 있습니다.

### - Mac

<figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2F8fFL2txJMivY6NyKYWs3%2Fimage.png?alt=media&#x26;token=e9a92fb4-876c-4945-82f8-f0054acd0d29" alt=""><figcaption></figcaption></figure>

### - Window

* cmd

<figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2FPNetmO51cZvUIyWqw41C%2Fimage.png?alt=media&#x26;token=03fb4d29-330a-4a11-af84-1bdbf698199f" alt=""><figcaption></figcaption></figure>

<figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2FbsJj2NnglathJfLXxLNk%2Fimage.png?alt=media&#x26;token=4dc07a42-66a3-4fd6-97d7-a056795e2e90" alt=""><figcaption></figcaption></figure>

* powershell

<figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2FGOEoUHn4GcOPogqO1K2A%2Fimage.png?alt=media&#x26;token=28bedcf2-5977-4edd-a559-7e45400066b5" alt=""><figcaption></figcaption></figure>

<figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2FrxM9sGiV03wD6TYrWVCi%2Fimage.png?alt=media&#x26;token=b11c30ab-1867-452b-9854-1ba788e7cd24" alt=""><figcaption></figcaption></figure>

:rotating\_light: 만약 SSH 접근 명령어 실행 시 "Permission denied (publickey,gssapi-keyex,gssapi-with-mic)." 와 같은 권한 오류가 발생한다면, 아래의 과정을 통하여 권한 설정을 실행합니다.

* pem 키가 위치한 곳으로 이동 후 pem \[파일 우클릭] -> \[속성] -> \[보안] -> \[고급] -> \[SYSTEM, Admin 제외 나머지 사용 권한 제거]

<figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2Fx1pAwajnMye9wMdRscCh%2Fimage.png?alt=media&#x26;token=67f59c33-5120-4d20-8296-02812a17a82c" alt=""><figcaption></figcaption></figure>

<figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2FnAgzPM1wks4Iejukm5QF%2Fimage.png?alt=media&#x26;token=b17262b6-3a19-40ff-bba1-3011b1174ce0" alt=""><figcaption></figcaption></figure>

<figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2F2t7L0ZTuatVzHY9aRbNd%2Fimage.png?alt=media&#x26;token=3492e92a-58e1-4c8c-ba36-9208f68d7936" alt=""><figcaption></figcaption></figure>

<figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2FjDOiM2V7lRZSuDRHthxV%2Fimage.png?alt=media&#x26;token=40f4797e-40da-4d28-992e-d0adc04ca3cc" alt=""><figcaption></figcaption></figure>

사용 권한 제거 후 SYSTEM, Administrators 만 권한 설정에 유지되어야 합니다.

## Cloud Watch Agent 설치

CloudWatch Agent는 AWS의 모니터링 서비스인 Amazon CloudWatch와 함께 사용되는 소프트웨어입니다.\
CloudWatch에서 기본으로 제공하는 모니터링 외에 추가로 메모리, 디스크 사용량 등 더 많은 지표들을 수집하기 위하여 설치합니다. 해당 서비스 사용 시 추가비용이 발생하지만 더 많은 지표들을 추가할 수 있어 원활한 모니터링 운영에 도움이 되는 소프트웨어 입니다.

### - IAM Role 생성

1. AWS 콘솔창에 접속한 후 IAM 콘솔 을 엽니다. 네비게이션 항목에서 이전 실습에서 생성한 **SSMInstanceProfile역할**클릭합니다.&#x20;

<figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2FCgwUSXe1rhqMfm1ms2fi%2Fimage.png?alt=media&#x26;token=b1b86c42-69bf-46c1-88d4-28d2adbf2349" alt=""><figcaption></figcaption></figure>

2. 권한추가를 선택하여 **CloudWatchAgentServerPolicy 정책**을 추가합니다.

<figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2F2iPXrRtYCCVnBJh9rBFa%2Fimage.png?alt=media&#x26;token=36ca4c09-229c-4eba-8468-3ed91c6fcbea" alt=""><figcaption></figcaption></figure>

<figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2FrTvyrmq2CsGKBljlm2TF%2Fimage.png?alt=media&#x26;token=7c19d76b-9203-48fe-a49d-50cf90af641d" alt=""><figcaption></figcaption></figure>

### - EC2 인스턴스에 CloudWatch Agent 설치

1. CloudWatch Agent 설치를 위하여 Session manager 혹은 SSH 접속을 통하여 인스턴스에 접근합니다.\
   이후 아래의 명령어를 통하여 CloudWatch Agent를 설치합니다.

<pre><code><strong>sudo su
</strong><strong>yum install -y amazon-cloudwatch-agent
</strong></code></pre>

2. 설치가 완료된 후 구성 파일 생성 시, 위자드를 사용해 구성파일을 생성합니다.

```
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
```

<figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2FzEMMLDoeQ0pRaMyMUyoG%2Fimage.png?alt=media&#x26;token=0bc331ed-7e1a-436c-9c47-42a43b245b83" alt=""><figcaption></figcaption></figure>

매트릭 수집 설정

&#x20;\- Basic: 사용량(used\_percent)\
&#x20;\- Standard: Basic 지표에 CPU 대기시간(cpu\_usage\_iowait), 디스크IO 시간(diskio\_io\_time) 등 추가\
&#x20;\- Advanced: Standard 지표에 Disk 읽기, 쓰기양(diskio\_write\_bytes, diskio\_read\_bytes) 등 추가

```
<ubuntu>
wget https://amazoncloudwatch-agent.s3.amazonaws.com/ubuntu/amd64/latest/amazon-cloudwatch-agent.deb
sudo dpkg -i -E ./amazon-cloudwatch-agent.deb
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
```

{% hint style="info" %}
해당 설정 파일은 /opt/aws/amazon-cloudwatch-agent/bin/config.json 위치에 저장되며, \
필요한 경우 이 파일을 직접 편집하여 설정을 수정할 수 있습니다.
{% endhint %}

3. 아래의 명령어를 사용하여 CloudWatch Agent 파일 실행합니다.

```
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json -s
systemctl status amazon-cloudwatch-agent.service
```

서비스 실행 후 약 5분 이내로 CloudWatch에서 해당 인스턴스에 대한 메모리 및 디스크에 대한 지표 확인이 가능합니다.

<figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2FqudK093YYl9gm10iug9P%2Fimage.png?alt=media&#x26;token=3d1588a4-1376-41ee-8fc5-da33267cc8c0" alt=""><figcaption></figcaption></figure>

## 부하테스트를 통한 모니터링

1. System Manager 혹은 SSH 를 통하여 **Web server for IMD 인스턴스에 접속합니다.**

<figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2Fa5vGr9PESCyXOsXI9frz%2Fimage.png?alt=media&#x26;token=0e557938-5928-4c72-ba7f-81517a22d9e2" alt=""><figcaption></figcaption></figure>

2. 루트 사용자 권한으로 변경한 후 아래의 명령어를 통하여 인스턴스에 메모리 및 디스크에 부하를 실행시킵니다.<br>

<pre><code><strong>yum install stress -y
</strong>stress --vm 1 --vm-bytes 600m --hdd 4 --timeout 120s
</code></pre>

아래와 같은 실패 문구가 나온다면 메모리 부족으로 인한 OOM(Out Of Memory)이 발생할 수 있습니다.

<figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2F3qOPdKib724ZF6qV4KIw%2Fimage.png?alt=media&#x26;token=016da8ae-2f5c-4cbe-baca-35dc84d0a273" alt=""><figcaption></figcaption></figure>

아래의 명령어를 통하여 Out Of Memory 관련 에러가 발생했는지 확인 할 수 있습니다.

```
dmesg
```

<figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2F5mlaBBiaJ8UzZbNEAeXH%2Fimage.png?alt=media&#x26;token=67bb3952-e290-4419-a11f-8d663e57898a" alt=""><figcaption></figcaption></figure>

3. "Successful run complated"라는 문구를 확인하였다면, \
   CloudWatch 콘솔로 이동하여 부하가 발생한 시점의 메모리 및 디스크의 지표를 확인합니다.

<figure><img src="https://179499538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FidAieMPOa4LCVmwQghS6%2Fuploads%2F3h761teO9VlnZkiDNJ8m%2Fimage.png?alt=media&#x26;token=e35b742d-fd18-452b-a218-6199b54e2293" alt=""><figcaption></figcaption></figure>
