EC2란?
Amazon Elastic Compute Cloud(Amazon EC2)는 Amazon Web Services(AWS) 클라우드에서 확장 가능 컴퓨팅 용량을 제공합니다. Amazon EC2를 사용하면 하드웨어에 선투자할 필요가 없어 더 빠르게 애플리케이션을 개발하고 배포할 수 있습니다. Amazon EC2를 사용하여 원하는 수의 가상 서버를 구축하고 보안 및 네트워킹을 구성하며 스토리지를 관리할 수 있습니다. Amazon EC2에서는 확장 또는 축소를 통해 요구 사항 변경 또는 사용량 스파이크를 처리할 수 있으므로 트래픽을 예측할 필요성이 줄어듭니다.
Amazon EC2의 기능
- 인스턴스: 가상 컴퓨팅 환경
- Amazon 머신 이미지(AMI): 서버에 필요한 운영체제와 여러 소프트웨어들이 적절히 구성된 상태로 제공되는 템플릿으로 인스턴스를 쉽게 만들 수 있습니다.
- 인스턴스 유형: 인스턴스를 위한 CPU, 메모리, 스토리지, 네트워킹 용량의 여러 가지 구성 제공
- 키 페어를 사용하여 인스턴스 로그인 정보 보호(AWS는 퍼블릭 키를 저장하고 사용자는 개인 키를 안전한 장소에 보관하는 방식)
- 인스턴스 스토어 볼륨: 임시 데이터를 저장하는 스토리지 볼륨으로 인스턴스 중단, 최대 절전 모드로 전환 또는 종료 시 삭제됨
- Amazon Elastic Block Store(Amazon EBS), 즉 Amazon EBS 볼륨을 사용해 영구 스토리지 볼륨에 데이터 저장
- 인스턴스와 Amazon EBS 볼륨 등의 리소스를 다른 물리적 장소에서 액세스할 수 있는 리전 및 가용 영역
- 보안 그룹을 사용해 인스턴스에 연결할 수 있는 프로토콜, 포트, 소스 IP 범위를 지정하는 방화벽 기능
- 탄력적 IP 주소(EIP): 동적 클라우드 컴퓨팅을 위한 고정 IPv4 주소
- 태그: 사용자가 생성하여 Amazon EC2 리소스에 할당할 수 있는 메타데이터
- AWS 클라우드에서는 논리적으로 격리되어 있지만 원할 때마다 고객의 네트워크와 간편히 연결할 수 있는 가상 네트워크인 Virtual Private Clouds(VPC)
1. 인스턴스 시작
AWS 콘솔 창 - EC2 검색 - 인스턴스 시작 버튼 클릭
2. 이름 및 태그 설정
EC2를 구분지을 수 있도록 이름 및 태그 설정
3. AMI 선택
AMI는 EC2 인스턴스를 시작하는 데 필요한 정보를 이미지로 만들어 둔 것을 말합니다.
아마존 리눅스 AMI는 아마존이 개발하고 있는 이미지로, AWS의 각종 서비스와 상성이 좋으며 yum이 매우 빠르기 때문에 자주 선택합니다.
- AMI 토글을 클릭하면 다양한 사양의 AMI를 선택할 수 있습니다. (프리 티어 이외의 유형을 선택할경우 비용 청구)
4. 인스턴스 유형 선택
인스턴스 유형에서는 다양한 사양에 따른 요금제를 선택할 수 있습니다.
프리티어로 표기된 t2.micro를 선택합니다.
5. 키 페어 생성
기존 IAM 키페어가 존재 할 경우 '선택' 란에서 기존 키 페어를 선택하고
그렇지 않을 경우 새 키 페어 생성 버튼을 클릭합니다.
- 키페어는 SSH 터미널로 인스턴스에 접근할 때 꼭 필요한 비밀 키입니다.
- 비밀 키를 분실하였다면 복잡한 작업이 요구되므로 잘 관리해야합니다.
- 보안상 외부에 노출되면 절대 안됩니다.
키 페어 이름을 설정하고 키 페어 생성 버튼을 누르면 키 페어가 로컬 PC에 자동으로 다운로드됩니다.
6. 네트워크 설정
VPC와 서브넷 등은 AWS 서비스들의 네트워크 환경을 구성해줍니다. VPC와 서브넷을 따로 사용한다면 해당 정보를 선택하고 없다면 기본 값으로 남겨둔 뒤 넘어갑니다.
이후 EIP(탄력적 IP)를 할당할 것이기 때문에 퍼블릭 IP 자동 할당은 비활성화 시켜줍니다
보안 그룹을 생성하여 ssh 터미널을 통해 인스턴스에 접근할 수 있도록 ssh유형의 인바운드 보안 그룹 규칙을 추가합니다.
필요에 따라, 웹 프로젝트를 위한 (HTTP) 8080 포트나 (HTTPS) 443 포트를 추가로 열어놓습니다.
7. 스토리지 구성
스토리지는 인스턴스의 디스크 용량을 말합니다.
프리티어는 최대 30GB까지 가능하기 때문에 30으로 설정합니다.
이후 우측 탭에 있는 인스턴스 시작 버튼을 클릭하여 새 인스턴스를 생성합니다.
8. 인스턴스 생성 확인
인스턴스 생성 이후 잠시 후에 인스턴스 상태가 실행중으로 바뀌는 것을 확인합니다.
9. 탄력적 IP (EIP) 할당
탄력적 IP는 AWS의 고정 IP를 말합니다. EC2 인스턴스에 고정 IP를 할당하기 위해 탄력적 IP를 설정합니다.
왼쪽 카테고리에서 탄력적 IP를 선택합니다.
화면 우측 위 탄력적 IP 주소 할당 버튼을 클릭합니다.
네트워크 경계 그룹을 설정한 뒤 (기본값으로 해도 상관 없음), 할당 버튼을 클릭합니다.
이후 할당된 EIP를 선택하고 작업 - 탄력적 IP 주소 연결을 클릭합니다.
하단 토글을 통해 인스턴스를 선택하고 프라이빗 IP 주소를 선택한 후 연결 버튼을 클릭합니다.
다음과 같은 메시지와 함께 탄력적 IP 주소가 인스턴스에 연결됩니다.
10. 탄력적 IP (EIP) 할당 확인
생성한 EC2 인스턴스에서 탄력적 IP 주소가 할당 된 것을 확인합니다.
EC2 초기 설정
EC2에서 자바 기반의 웹 애플리케이션을 작동하기 위해 다음과 같은 설정을 수행해야합니다.
- Java 11 설치
- 타임존 변경
- 호스트네임 변경
인스턴스 접속 방법에 대해서는 다음의 게시글을 참조해주세요
https://rachel0115.tistory.com/entry/AWS-EC2-%EC%A0%91%EC%86%8D-PowerShell-MobaXterm
Java 11 설치
- yum에는 설치가능한 JDK가 1.8까지만 존재하기 때문에 다른 버전을 다운 받기 위해선 다른 방법을 사용해야합니다.
- Amazon에서 제공하는 OpenJDK인 Amazon Coretto를 다운받아 간편하게 설치할 수 있습니다.
우선 yum을 업데이트 시켜줍니다.
sudo yum update
다음의 명령어를 통해 yum에서 다운가능한 JDK 버전을 확인할 수 있습니다.
yum list java*jdk-devel
#Available Packages
#java-1.7.0-openjdk-devel.x86_64 1:1.7.0.321-2.6.28.2.amzn2.0.1 amzn2-core
#java-1.8.0-openjdk-devel.x86_64 1:1.8.0.352.b08-2.amzn2.0.1 amzn2-core
다음 순서에 따라 JDK를 설치합니다.
# aws coreetto 다운로드
sudo curl -L https://corretto.aws/downloads/latest/amazon-corretto-11-x64-linux-jdk.rpm -o jdk11.rpm
# jdk11 설치
sudo yum localinstall jdk11.rpm
# jdk version 선택
sudo /usr/sbin/alternatives --config java
# java 버전 확인
java --version
# 다운받은 설치키트 제거
rm -rf jdk11.rpm
다음의 명령어를 통해 다른 버전의 JDK가 설치되어있는지 확인하고 해당 버전의 JDK를 제거합니다.
yum list installed | grep "java" # yum 설치 리스트 확인
# java-1.8.0-openjdk-headless.x86_64 1:1.8.0.222.b10-0.47.amzn1 @amzn-updates
# java-11-amazon-corretto-devel.x86_64 1:11.0.7.10-1 installed
sudo yum remove java-1.8.0-openjdk-headless.x86_64
이후 다음 명령어로 설치된 Java의 버전을 확인합니다.
java --version
#openjdk 11.0.18 2023-01-17 LTS
#OpenJDK Runtime Environment Corretto-11.0.18.10.1 (build 11.0.18+10-LTS)
#OpenJDK 64-Bit Server VM Corretto-11.0.18.10.1 (build 11.0.18+10-LTS, mixed mode)
타임존 변경
- EC2 서버의 기본 타임존은 UTC 입니다.
- 한국의 시간대인 KST로 설정하기위해 타임존을 변경해야합니다.
다음의 명령어를 차례대로 수행합니다.
sudo rm /etc/localtime
sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime
이후 date 명령어로 타임존이 KST로 바뀐 것을 확인합니다.
date
#Thu Feb 16 09:44:26 KST 2023
Hostname 변경
- 여러 서버를 관리 중일 경우 IP만으로 어떤 서비스의 서버인지 확인하기 어렵습니다.
- hostname 변경을 통해 어떤 서비스의 서버인지 분간하기 쉽도록 합니다.
호스트 이름 업데이트를 유지하기 위해 preserve_hostname cloud-init 설정이 true로 설정되어있는지 확인해야합니다.
다음의 명령어로 설정 파일을 엽니다.
sudo vi /etc/cloud/cloud.cfg
preserve_hostname 설정이 없다면 파일 끝에 다음 텍스트를 추가합니다.
preserve_hostname: true
- Amazon Linux 2 인 경우 [Hostname 등록 방법]
다음의 명령어로 호스트 이름을 설정하여 정규화된 도메인 이름을 반영합니다. (ex - moduform.webservice )
sudo hostnamectl set-hostname moduform.webservice
- Amazon Linux AMI 인 경우 [Hostname 등록 방법]
다음의 명령어로 vim 편집기를 통해 파일을 엽니다.
sudo vim /etc/sysconfig/network
화면에서 노출되는 항목 중, HOSTNAME을 원하는 서비스 명으로 이름을 바꿔줍니다.
(vim에서 삽입 명령은 'I', 저장은 esc → :wq! 입력 후 Enter)
NETWORKING=yes
HOSTNAME=moduform.webservice
NOZEROCONF=yes
hostname을 변경한 후 다음 명령어로 서버를 재부팅합니다.
sudo reboot
다음의 명령어로 hostname을 확인할 수 있습니다.
hostname
#moduform.webservice
/etc/hosts 에 변경한 hostname을 등록하기위해 vim 편집기를 엽니다.
sudo vim /etc/hosts
vim 편집기를 통해 다음과 같이 hostname을 등록합니다.
127.0.0.1 등록한 HOSTNAME
:wq! 명령어로 저장하고 종료한 뒤 다음의 명령어를 통해 정상적으로 등록되었는지 확인합니다.
curl moduform.webservice
#curl 등록한 HOSTNAME
다음과 같이 80포트로 접근이 안된다는 에러가 발생하였다면 잘 등록된 것입니다.