EC2는 아마존 웹서비스 중에서 가장 기본적인 배포 방식 중 하나입니다
AWS에는 두 종류의 계정이 존재합니다
- 루트 계정 : AWS의 주인 계정입니다 - IAM 사용자 계정 : 루트 계정을 통해 생성할 수 있는 서브 계정입니다 (루트 사용자가 권한 제어)
IAM은 Identity and Access Management의 약자입니다
그리고 앞으로의 배포 작업은 루트 계정 대신 IAM 계정을 통해 진행하도록 하겠습니다
사이트 상단 검색창을 통해서 IAM 서비스에 접속할 수 있습니다
IAM 서비스창이 열리면 사용자 탭에서 IAM 계정 생성이 가능합니다
사용할 계정명을 적고 다음 버튼을 클릭
그룹은 여러 사용자 계정을 그룹화하여 권한을 좀 더 편리하게 관리하기 위한 옵션
여기서는 우선 직접 정책 연결을 선택하겠습니다
ec2
검색 → AmazonEC2FullAccess
체크 → 다음 버튼 클릭
사용자 생성버튼을 누르면 계정이 생성됩니다
(사용자 계정을 생성한 뒤에도 권한 설정을 원하는대로 변경 가능!)
계정 생성을 마쳤으면 다음으로 보안 자격 증명 탭을 클릭합니다
여기서는 우상단의 콘솔 액세스 활성화 버튼과 하단의 액세스 키에 주목
생성된 콘솔 로그인 링크를 클릭하면 IAM 계정으로 AWS에 접속할 수 있습니다
(루트 사용자는 자동으로 접속 해제)
CLI(첫번째) 옵션을 선택합니다
csv 파일은 절대 깃헙에 업로드하는 일이 없도록 엄중 보관할 것!
AWS는 CLI 환경에서도 접속해서 사용할 수 있습니다
먼저 아래 링크를 클릭합니다
(https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/getting-started-install.html)
AWS CLI 설치 및 업데이트 지침 란에서 사용중인 OS 환경에 따라 탭을 클릭합니다
(윈도우 사용자라면 리눅스가 아닌 윈도우탭을 열어서 확인)
// GUI Installer
curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
sudo installer -pkg AWSCLIV2.pkg -target /
아래는 설치 상태 확인을 위한 명령어입니다
aws --version
// aws-cli/2.11.4 Python/3.11.2 Darwin/22.3.0 exe/x86_64 prompt/off
AWS CLI 기본 설정
*먼저 다운로드 받은 csv 파일을 확인해야 합니다
// CLI 설정 진입 명령어
aws configure
AWS Access Key ID [None]: ****
AWS Secret Access Key [None]: ****
Default region name [None]: ap-northeast-2
Default output format [None]: json
// 설정 완료 후 확인을 위한 명령어
aws configure list
keypair 생성
// keysample은 키페어명입니다
aws ec2 create-key-pair --key-name keysample --query 'KeyMaterial' --output text > [저장할 파일 이름].pem
현재 디렉토리에 키페어 파일이 생성됩니다
+) 키페어명과 저장될 파일명은 달라도 괜찮습니다
+) 만약 지금까지의 설정에 오류가 있다면 생성 실패
// 만약 아래와 같은 에러 메세지가 뜬다면
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for 'xxx.pem' are too open.
chmod 400 [키페어 파일명].pem
// change mod 400 ~ 유저에게만 읽기 권한이 있고 그 외는 권한이 없는 상태를 뜻합니다
aws ec2 describe-key-pairs
aws ec2 delete-key-pair --key-name keysample
1. 그룹 생성
aws ec2 create-security-group --group-name front-end-sg --description "front-sg"
// 그룹 아이디(식별자)가 출력됩니다
{
"GroupId": "sg-039684fc62f2924d3"
}
2. 그룹 규칙 생성
현재 아웃바운드 규칙은 모두에게 허용으로 기본세팅값이 설정되어 있지만
인바운드 규칙은 비어있습니다
// 22번 포트 인바운드 규칙 생성
aws ec2 authorize-security-group-ingress --group-id [그룹 아이디] --protocol tcp --port 22 --cidr 0.0.0.0/0
// 80번 포트 인바운드 규칙 생성
aws ec2 authorize-security-group-ingress --group-id [그룹 아이디] --protocol tcp --port 80 --cidr 0.0.0.0/0
+) 그룹 삭제 명령어
aws ec2 delete-security-group --group-id front-end-sg --group-id [그룹 아이디]
3. EC2 인스턴스 생성
aws ec2 run-instances --image-id ami-0e735aba742568824 --count 1 --instance-type t2.micro --key-name keysample --security-group-ids sg-039684fc62f2924d3
// --image-id ami-0e735aba742568824 (OS ~ Ubunto)
// --count 1 (생성할 인스턴스 수)
// --instance-type t2.micro
// --key-name keysample
// --security-group-ids sg-039684fc62f2924d3
// 실행
{
"Groups": [],
"Instances": [
{
"AmiLaunchIndex": 0,
"ImageId": "ami-0e735aba742568824",
"InstanceId": "i-08421d7026e62a6eb",
"InstanceType": "t2.micro",
"KeyName": "keysample",
...
}
*여기까지의 모든 진행 과정은 AWS 콘솔에서도 그때그때 확인 가능
// 키페어 생성
aws ec2 create-key-pair --key-name frontend --query 'KeyMaterial' --query 'KeyMaterial' --output text > frontend.pem
sudo chmod 400 frontend.pem
// 보안 그룹
aws ec2 create-security-group --group-name frontend-sg --description "frontend-sg" --output text --query 'GroupId'
// 인바운드 설정
// group id ~ sg-000732c6cd684ea09
aws ec2 authorize-security-group-ingress --group-id sg-000732c6cd684ea09 --protocol tcp --port 22 --cidr 0.0.0.0/0
aws ec2 authorize-security-group-ingress --group-id sg-000732c6cd684ea09 --protocol tcp --port 80 --cidr 0.0.0.0/0
aws ec2 authorize-security-group-ingress --group-id sg-000732c6cd684ea09 --protocol tcp --port 443 --cidr 0.0.0.0/0
aws ec2 authorize-security-group-ingress --group-id sg-000732c6cd684ea09 --protocol tcp --port 3306 --cidr 0.0.0.0/0
// 인스턴스 생성
aws ec2 run-instances --image-id ami-0e735aba742568824 --count 1 --instance-type t2.micro --key-name frontend --security-group-ids sg-000732c6cd684ea09 --output text --query 'Instances[0].instanceId'
// 확인
aws ec2 describe-instances --instance-ids i-008bb3f67a4030ab7 --query 'Reservations[*].Instances[*].PublicDnsName' --output text
// ec2-52-78-181-122.ap-northeast-2.compute.amazonaws.com
// 원격 접속
ssh -i frontend.pem ubuntu@ec2-52-78-181-122.ap-northeast-2.compute.amazonaws.com