반응형

[AWS] AWS CLI 로 EC2 인스턴스 생성하기 (mac M1)

AWS CLI 로 EC2 인스턴스 생성하기 (mac M1)

 

AWS 에서 EC2로 접속하여 클릭하면서 EC2 인스턴스를 생성할 수도 있지만 이왕 aws cli 를 설치한 김에 여기서 EC2 인스턴스를 생성해보려고한다. 사이트에서 직접 EC2 인스턴스를 생성하고 배포하는 건 이 링크를 참고하면 된다. 

 

1. CLI 에서 Role 전환하기 

$ aws sts get-caller-identity

$ export AWS_DEFAULT_PROFILE=role
$ aws sts get-caller-identity

 

 

2. CLI에서 VPC 생성하기

VPC 란 Amazon Virtual Private Cloud(Amazon VPC) 의 약자로, 가상의 네트워크라고 생각하면 된다. 

$ aws ec2 create-vpc --cidr-block 10.10.0.0/16

위 명령어로 VPC를 생성하면 위 이미지처럼 생성한 VPC 정보가 반환된다. 

 

 

3. CLI 에서 서브넷 생성하기 

서브넷이란, IP 주소에서 네트워크 영역을 부분적으로 나눈 부분 네트워크이다. 
앞으로 나오는 vpc, internet-gateway-id, route-table-id 등은 모두 별도의 기록 후 복사 붙여넣기 하는 게 더 편하다. 

$ aws ec2 create-subnet --vpc-id vpc-[vpc 아이디] \
--cidr-block 10.10.0.0/24 \
--availability-zone ap-northeast-2a

  • aws ec2 create-subnet --vpc-id vpc-071ecca730edf705f : 서브넷을 만들 VPC의 ID
  • --cidr-block 10.10.0.0/24 : 서브넷의 CIDR
  • --availability-zone ap-northeast-1a : 서브넷의 가용영역

 

4. CLI 에서 인터넷 게이트웨이 생성하기 

인터넷 게이트 웨이란, 수평 확장되고 가용성이 높은 중복 VPC 구성 요소로, VPC와 인터넷 간에 통신할 수 있게 해준다. 

$ aws ec2 create-internet-gateway

인터넷 게이트웨이를 생성하고 해당 ID를 확인하면 된다. 

 

$ aws ec2 attach-internet-gateway --internet-gateway-id igw-[아이디] \
--vpc-id vpc-[아이디]

 

 

 

5. CLI 에서 Route Table 생성하기 

aws ec2 create-route-table --vpc-id vpc-[아이디]

$ aws ec2 create-route --route-table-id rtb-[아이디] \
--destination-cidr-block 0.0.0.0/0 \
--gateway-id igw-[아이디]

 

6. Route table 에 서브넷 연결하기

$ aws ec2 describe-subnets --filters "Name=vpc-id,Values=vpc-[아이디]" --query "Subnets[*].{ID:SubnetId,CIDR:CidrBlock}"

 

7. 서브넷의 아이디 확인하기 

$ aws ec2 associate-route-table --subnet-id subnet-[아이디] --route-table-id rtb-[아이디]

 

8. 서브넷을 Route table 에 연결하기 

$ aws ec2 modify-subnet-attribute --subnet-id subnet-0bc5426e7e82d88e1 --map-public-ip-on-launch

EC2 공용 IP 주소를 자동으로 할당하도록 설정한다.
EC2 인스턴스의 경우 재시작 하면 IP 주소가 변경 되기 때문에, 반드시 설정 해야 한다. 이게 아니면 탄력적 IP 주소를 인스턴스와 연결해야 하는 것이다. 

 

9. CLI에서 보안그룹 생성하기 

$ aws ec2 create-security-group --group-name "cli-security-group" --description "cli-security-group" --vpc-id vpc-[아이디]

보안그룹 22포트를 어디서나 들어올 수 있도록 변경해주는 작업은 아래와 같다.

$ aws ec2 authorize-security-group-ingress --group-id sg-[아이디] --protocol tcp --port 22 --cidr 0.0.0.0/0

 

10. 키 페어 생성하기 

$ aws ec2 create-key-pair --key-name clikeypair --query 'KeyMaterial' --output text > clikeypair.pem
chmod 400 clikeypair.pem

키 페어 생성 및 권한 부여를 동시에 할 수 있다. 

 

 

11. CLI 에서 EC2 인스턴스 생성하기 

$ aws ec2 describe-images --owners self amazon

커서를 쭈욱 내려서 AMI를 확인하고 ImageId 를 복사해둔다. 

 

$ aws ec2 run-instances --image-id ami-[아이디] --count 1 --instance-type t2.micro --key-name clikeypair --security-group-ids sg-[아이디] --subnet-id subnet-[아이디]

인스턴스 생성 시 출력되는 인스턴스 아이디를 메모해둔다.

$ aws ec2 describe-instances --instance-id i-[아이디]

 

aws 사이트에서 보고 퍼블릭 IPv4 주소를 입력해준다. 

ssh -i "clikeypair.pem" ec2-user@[IP주소]

 

11. 애플리케이션 배포할 때 필요한 패키지를 설치

애플리케이션 배포할 때 필요한 패키지를 설치한다. 프로젝트와 동일한 Java 버전을 사용하면 되는데, EC2에서는 Java 1.8까지만 지원되기 때문에 그 이상 버전을 사용할 경우에는 아래처럼 설치를 해야한다.

>> git 설치
[ec2-user@ ~]$ sudo yum install -y git
[ec2-user@ ~]$ git --version

>> java 설치
[ec2-user@ ~]$ sudo yum localinstall jdk11.rpm
[ec2-user@ ~]$ java -version
[ec2-user@ ~]$ javac -version

>> java 버전 확인 시 제대로 변경되지 않은 경우 
[ec2-user@ ~]$ sudo alternatives --config java
>> 해당 버전의 number 입력 
[ec2-user@ ~]$ sudo alternatives --config javac

 

 

12. Github 연결 및 배포하기 

[ec2-user@ip-10-10-0-199 ~]$ mkdir apps
[ec2-user@ip-10-10-0-199 ~]$ cd apps/
[ec2-user@ip-10-10-0-199 apps]$ git clone https://github.com/datawn-team/datawn-server.git

[ec2-user@ip-10-10-0-199 apps]$ cd datawn-server/
[ec2-user@ip-10-10-0-199 datawn-server]$ sudo chmod 777 ./gradlew
[ec2-user@ip-10-10-0-199 datawn-server]$ ./gradlew build

프로젝트를 빌드해주어야 하는데, 빌드를 위해 실행권한이 있어야 하므로 권한을 수정해주어야 한다. 

 

 

build 및 배포하면서 겪었던 오류사항 및 대처방법 

  • build 할 때, test 관련 오류가 나는 경우 프로젝트 내 test 파일 삭제
  • Name or service not known 관련 오류가 나는 경우 aws 에서 DNS 활성화 필요
  • Spring Boot 어노테이션 중 @RequiredArgsConstructor 가 제대로 동작하지 않아 build  시 에러나서 해당 어노테이션 생성한 부분은 모두 삭제하고 constructor 로 변경 

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기