# EC2 Instance Mgmt

## Task1. EC2 Instance 관리

### 1-1 EC2 Instance type 변경하기

EC2 Instance의 자원(CPU,  Memory)에 대한 확장 필요시, Instance의 유형을 변경하여 사용할 수 있습니다.

{% hint style="info" %}
EC2 Instance type : <https://aws.amazon.com/ko/ec2/instance-types/>
{% endhint %}

"PUBLIC-EC2-A01" Instance 타입을 변경해 봅니다.

변경을 위해서는 실행 중인 Instance를 중지(stop)해야 합니다. Instance 선택 후 \[Instance state] > \[Stop instance] 를 수행합니다.

![](https://140677389-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MdHzbidE1I-GGL0pHMv%2F-MdWITCFX0qcTI9vau9V%2F-MdWJt5qqYlNBMcDuph6%2Fimage.png?alt=media\&token=f94262ca-c913-458a-9142-c662b66e151b)

Instance 상태가 “Stopped” 로 변경된 후 \[Actions] > \[Instance settings] > \[Change Instance type] 을 수행합니다.

* Instance type - t2.micro 에서 t2.small 로 변경

<div align="left"><img src="https://140677389-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MdHzbidE1I-GGL0pHMv%2F-MdWITCFX0qcTI9vau9V%2F-MdWK6ciM3y9M_8bsXsP%2Fimage.png?alt=media&#x26;token=76cc476a-e815-49f8-b1ec-508e4ea439a2" alt=""></div>

변경 후 \[Instance state] > \[Start Instance] 로 instance를 기동합니다.

{% hint style="info" %}
Instance 중지하고 다시 시작하게 되면 Public IP가 변경됩니다. 고정된 Public IP를 사용하기 위해서는 Elastic IP를 사용합니다.
{% endhint %}

### 1-2 EC2 Volume 추가 및 변경

EC2 Instance에 EBS(Elastic Block Storage)를 다이나믹하게 추가 연결하거나 볼륨 타입 및 용량을 변경할 수 있습니다.

좌측 EC2 메뉴의 Elastic Block Store > Volumes 에서 \[Create Volume]을 클릭합니다. 세부정보를 입력하여 새로운 EBS 볼을 생성합니다.

| 세부정               | 값                          |
| ----------------- | -------------------------- |
| Volume Type       | gp3                        |
| size              | 100                        |
| Availability Zone | ap-northeast-2a            |
| Tag               | Name / PUBLIC-EC2-A01-100G |

![](https://140677389-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MdHzbidE1I-GGL0pHMv%2F-MdWITCFX0qcTI9vau9V%2F-MdWL5suvO9f8PwgQmj5%2Fimage.png?alt=media\&token=54fad548-8178-404d-9f78-02cf40bc29e9)

생성된 볼륨의 상태가 "creating" 에서 "available" 로 변경됩니다.

새로 생성된 볼륨을 선택하여 "PUBLIC-EC2-A01" Instance에 연결(Attach) 합니다.

* \[Actions] > \[Attach Volume] 선택
* Instance - "PUBLIC-EC2-A01" 선택

<div align="left"><img src="https://140677389-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MdHzbidE1I-GGL0pHMv%2F-MdWITCFX0qcTI9vau9V%2F-MdWLQizQ4Kg_iQ8WX7_%2Fimage.png?alt=media&#x26;token=727d2256-7e93-4a44-95aa-aa01397866ec" alt=""></div>

생성된 볼륨의 상태가 "available"에서 "in-use"로 변경됩니다. "PUBLIC-EC2-A01" instance에 접속하여 추가된 볼륨을 확인합니다.

```bash
lsblk
```

<div align="left"><img src="https://140677389-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MdHzbidE1I-GGL0pHMv%2F-MdWITCFX0qcTI9vau9V%2F-MdWLYK7idi_jJ0dPwW8%2Fimage.png?alt=media&#x26;token=dabb49fb-d4a7-4863-bf14-172265a808bf" alt=""></div>

추가된 100G 볼륨으로 파일 시스템을 생성하여 마운트 합니다.

```bash
sudo mkfs.ext4 /dev/<device name>
mkdir ~/ebs
sudo mount /dev/<device name> ~/ebs
df -h

```

<div align="left"><img src="https://140677389-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MdHzbidE1I-GGL0pHMv%2F-MdWITCFX0qcTI9vau9V%2F-MdWLdShXxu_GN3Lm7He%2Fimage.png?alt=media&#x26;token=d266d1e6-1989-48d7-ab8b-2c0abd7740f5" alt=""></div>

이제 할당된 볼륨 용량을 변경합니다.

좌측 EC2 메뉴의 Elastic Block Store > Volumes 에서 변경할 볼륨 "PUBLIC-EC2-A01-100G"를 선택합니다.

* \[Actions] > \[Modify Volume]
* Size - 120 입력

<div align="left"><img src="https://140677389-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MdHzbidE1I-GGL0pHMv%2F-MdWITCFX0qcTI9vau9V%2F-MdWLphtIQUt8mJcihm_%2Fimage.png?alt=media&#x26;token=77e30371-8f4f-47bb-969c-43ee5eb91155" alt=""></div>

볼륨 상태가 "in-use"에서 "in-use - modifying(0%)" , "in-use - optimizing(1%)" 마지막에 다시 "in-use"로 변경됩니다. 최종 "in-use"상태로 변경되기 까지 백그라운드 데이터 복제가 진행되며, 완료 될때 까지 기다리지 않아도 볼륨을 사용할 수 있습니다.

"PUBLIC-EC2-A01" Instance에 접속하여 변경 볼륨을 확인합니다.

```bash
lsblk
```

<div align="left"><img src="https://140677389-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MdHzbidE1I-GGL0pHMv%2F-MdWITCFX0qcTI9vau9V%2F-MdWLydBz5LAJUZGf6lU%2Fimage.png?alt=media&#x26;token=66c0c913-c3ed-470b-a624-1c15a67adefc" alt=""></div>

기존에 생성한 파일 시스템에 대해서도 변경된 용량으로 확장을 합니다.

```bash
sudo resize2fs /dev/<device name>
df -h
```

<div align="left"><img src="https://140677389-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MdHzbidE1I-GGL0pHMv%2F-MdWITCFX0qcTI9vau9V%2F-MdWM42Yt6Tk3_bEAeFQ%2Fimage.png?alt=media&#x26;token=62875d15-f516-4f66-891e-7c093b0984d0" alt=""></div>

{% hint style="info" %}
파일 시스템 타입에 따라 확장 시키는 명령어가 다르므로, 수행 전에 아래 링크에서 내용을 확인합니다.

참고 링크 : <https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/recognize-expanded-volume-linux.html?icmpid=docs_ec2_console>
{% endhint %}

### 1-3 Snapshot 생성 및 복구

\
EBS 볼륨의 특정 시점 Snapshot을 생성하여 백업 용도이나 새 볼륨을 생성하는데 사용할 수 있습니다. Snapshot은 증분식(Incremental) 백업을 기반으로 하고 있어 마지막 Snapshot 이후 변경된 블록만 저장합니다. Snapshot 수행 시 백그라운드 복제가 진행되고, 완료하는 동안 해당 볼륨에 대한 읽기/쓰기가 가능합니다.

본 랩에서는 기존 EC2에 생성된 스냅샷으로 새로운 볼륨을 만들어 다른 Instance에 연결하는 과정을 구해 봅니다.

Snapshot 생성에 앞서 2-2에서 생성한 볼륨 "PUBLIC-EC2-A01-100G"에 파일을 생성합니다.

```bash
cd /home/ec2-user/ebs
touch snapshot1 snapshot2 snapshot3
ls -l
```

<div align="left"><img src="https://140677389-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MdHzbidE1I-GGL0pHMv%2F-MdWOrA9OAEV1-5VLZPR%2F-MdWPhOEIYmLr1TCYpPu%2Fimage.png?alt=media&#x26;token=05efe58b-3658-4467-bc2f-d9ed088bb3e0" alt=""></div>

"PUBLIC-EC2-A01-100G"에 대한 Snapshot을 생성합니다.

좌측 EC2 메뉴의 Elastic Block Store > Volumes 에서 볼륨 "PUBLIC-EC2-A01-100G"를 선택합니다.

* \[Actions] > \[Create Snapshot]
* Description - PUBLIC-EC2-A01-EBS-SNAP
* Tag - Key: Name , Value: PUBLIC-EC2-A01-EBS-SNAP

<div align="left"><img src="https://140677389-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MdHzbidE1I-GGL0pHMv%2F-MdWOrA9OAEV1-5VLZPR%2F-MdWPk4UxThUfzhEye0V%2Fimage.png?alt=media&#x26;token=35138cab-b69b-46bb-ba0a-898e417d9b6b" alt=""></div>

생성된 Snapshot을 확인합니다.

<div align="left"><img src="https://140677389-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MdHzbidE1I-GGL0pHMv%2F-MdWOrA9OAEV1-5VLZPR%2F-MdWPmTmIoF5iOnWJfFg%2Fimage.png?alt=media&#x26;token=5941bd3e-510e-493b-abe6-7c2af2a68561" alt=""></div>

Snapshot의 상태가 "pending"에서 "completed"로 변경되며, 소요 시간은 볼륨의 용량과 변경량에 따라 상이합니다.

Snapshot이  "conpleted" 상태가 되면 새로운 볼륨을 생성합니다.

* Elastic Block Store > Snapshots 에서 "PUBLIC-EC2-A01-EBS-SNAP" 선택
* \[Actions] > \[Create Volume]
* Volume type - gp3
* Availability zone - ap-norteast-2c
* Tag - Key: Name , Value: PUBLIC-EC2-C01-100G-RESTORE

<div align="left"><img src="https://140677389-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MdHzbidE1I-GGL0pHMv%2F-MdWOrA9OAEV1-5VLZPR%2F-MdWPqRKv6puHEGwf_7r%2Fimage.png?alt=media&#x26;token=e2f7f85b-fb9e-41d2-8894-0a90931ac178" alt=""></div>

생성된 볼륨을 "PUBLIC-EC2-C01" Instance에 연결(Attach) 합니다.

* Elastic Block Store > Volumes 에서 "PUBLIC-EC2-C01-100G-RESTORE" 선택
* \[Actions] > \[Attach Volume]

<div align="left"><img src="https://140677389-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MdHzbidE1I-GGL0pHMv%2F-MdWOrA9OAEV1-5VLZPR%2F-MdWPtCrnuTEf1a_luGG%2Fimage.png?alt=media&#x26;token=6adbcde6-4af4-400a-81f5-92f5740cbb0c" alt=""></div>

"PUBLIC-EC2-C01" Instance에 접속하여 연결된 볼륨을 마운트 하여 파일을 확인합니다.

```bash
lsblk
mkdir ~/ebs
sudo mount /dev/<device name> ~/ebs
cd ~/ebs
ls -l

```

<div align="left"><img src="https://140677389-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MdHzbidE1I-GGL0pHMv%2F-MdWOrA9OAEV1-5VLZPR%2F-MdWPy3WxCGk9qAF1UY_%2Fimage.png?alt=media&#x26;token=00a8aff0-5397-471f-8ec0-8cb3f3d740c0" alt=""></div>

{% hint style="info" %}
Snapshot 기반으로 데이터 볼륨에 대한 백업 또는 OS 볼륨에 대한 이미지를 생성할 수 있으며, 이를 동일 리전 또는 다른 리전으로 복사하여 재사용할 수 있습니다.

<https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/ebs-copy-snapshot.html>
{% endhint %}

### 1-4 Snapshot 복사 (Optional)

생성된 Snapshot을 다른 리전으로 복사하여 동일한 데이터 볼륨이나 AMI로 사용할 수 있습니다.

{% hint style="warning" %}
Lab 임시계정의 경우 리전 제한으로 리전간 Snapshot 복사를 수행할 수 없습니다.
{% endhint %}

* Elastic Block Store > Snapshots 에서 "PUBLIC-EC2-A01-EBS-SNAP" 선택
* \[Actions] > \[Copy]
* Destination Region : 복사할 리전 선택

<div align="left"><img src="https://140677389-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MdHzbidE1I-GGL0pHMv%2F-MdWOrA9OAEV1-5VLZPR%2F-MdWQ1FUVZB6QqFXNNJc%2Fimage.png?alt=media&#x26;token=d4cd3f0b-9f8d-4088-ac64-b059bd75bc85" alt=""></div>

{% hint style="success" %}
EC2 Instance Lab을 성공적으로 완료하였습니다.
{% endhint %}
