All List ()

[AWS] Elastc Beanstalk으로 ec2생성 및 배포~1.EB생성~(아마존 엘라스틱 빈스톡 신촌 더조은 학원 )__-EB 사용법-++

 ~1.EB생성~


0. 사용하지 않는 기존 AWS 서비스 제거 

# EC2 제거 

- EC2 > 인스턴스 > 인스턴스 상태> ec2 인스턴스 삭제(종료)



# RDS 제거 

- rds 데이터베이스 > 레코드 상세 > 작업 > 삭제



- RDS > 스냅샷 > 종료된 스냅샷 삭제


- RDS > 자동백업 > 레코드 있으면 삭제 




1. AWS Elastic BeanStalk 생성 (첫번째 시도 : 오류발생) 

- Elastic Beanstalk > 환경 > 환경생성


# 환경구성 

- 환경티어 : 웹서버환경

- 어플리케이션 정보 

어플리케이션이름 : springex

애플리케이션 태그 키 : Name 

값 : springex-beanstalk

- 환경정보 

환경이름 : Springex-env

도메인 : springex001 > 가용성확인 (도메인서버이름 확인가능)

- 플랫폼 

플랫폼 선택 : 톰캣 지정 

플랫폼 브랜치 : 톰캣9 correto 17 (플랫폼버전 기본선택)

- 어플리케이션 코드 : 샘플 어플리케이션 

- 사전 설정

단일 인스턴스(프리티어 사용가능)  

* (고가용성 : 오토스케일링 트래픽에 따라 서버가 늘었다 줄었다함)

- 다음 


# 서비스 엑세스 (이 설정에서 오류가 많이남)

- 서비스 역할 : 새 서비스 역할 생성 및 사용

- EC2 키페어 AWS_TEST_KEY(EC2처음 생성할 떄 만들어놓은 키페어) 지정 

https://rockbottomdevbus.blogspot.com/2024/07/aws-aws-2aws-ec2-cloud-computer-virtual.html?g1sNow=3&g1sQ=[AWS]%20AWS%20%EA%B0%80%EC%83%81%EC%BB%B4%ED%93%A8%ED%84%B0%20%EC%83%9D%EC%84%B1&

- EC2 인스턴스 프로파일 없으면 다음 


# 네트워킹, 데이터베이스 및 태그 설정 

- vpc : input 눌러서 나오는 것 선택 

-인스턴스설정 

퍼블릭 ip주소 활성화 체크 

인스턴스 서브넷 : 가용영역 c 선택 (b는 일부서비스 제한될수있음)

- 데이터베이스 

데이터베이스 서브넷 : c선택 

데이터베이스 활성화 

스냅샷 : 없음 

엔진 : mysql

엔진 버전 : 버전 8.0.35

인스턴스 클래스 : db.t3.small

스토리지 : 10GB

사용자 이름 : springex 

암호 : password0729

데이터베이스 삭제 정책 :  보통은 스냅샷 생성해야지만 지금은 삭제 

> 다음 


# 인스턴스 트래픽 및 크기 조정 구성 

- 인스턴스 

EC2보안그룹 : default로 선택 (만들때 디폴트에 만듬 추후수정가능)

- 용량 

오토 스케일링 그룹 

환경 유형 

- 단일인스턴스 

* ( 밸런싱된 로드 최소 최대(4대) 가능)

* ( 최소값 2이상 선택시 로드밸런서 옵션 나옴 )

* ( 인스턴스는 EC2를말함 )

- 인스턴스 유형 

필요 시 t3.small 체크해제 (돈나감) 

- 나머지 default 설정 


# 업데이트, 모니터링 및 로깅 구성

- 전체 default 설정 > 다음 

(환경속성은 집어넣을수있지만 이번엔 선택 안함)  


# 검토 

- 서비스 엑세스 확인 > 제출 

( 완료까지 잠시 대기 > 완료 후 도메인 누르면 브라우저가 접속이 되어야함 )


# 오류 발생 

- 환경 생성 중 오류발생 

(환경과 연결된 aws-elasticbeanstalk-ec2-role 인스턴스 프로파일이 존재하지 않습니다.)


2. AWS IAM 정책 및 역할 생성

## EC2 인스턴스 프로파일 만들기 

# 정책 생성 

- IAM > 엑세스관리 > 정책 > 정책 생성 



- 권한지정 

JSON 탭 선택 > 아래 내용으로 대체 ( 와일드카드로 전채 정책에 대한 권한 지정 ) > 다음

{

    "Version": "2012-10-17",

    "Statement": [

        {

            "Effect": "Allow",

            "Action": "*",

            "Resource": "*"

        }

    ]

}

* ( 와일드카드로 전체 권한이 아니게 설정 하려면 아래 링크 참고 )

https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/getting-started-create-iam-instance-profile.html#getting-started-create-iam-instance-profile-console

https://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/iam-instanceprofile.html



- 검토 및 생성 

정책 이름 : testPolish 

> 정책 생성



# 역할 생성 

- IAM > 역할 > 역할 생성 


- AWS 서비스 > 서비스 또는 사용사례 : EC2  > 다음 



- 권한 정책 : test 검색 > testPolish (생성한 정책) 선택 > 다음 



- 역할 이름 : testCustomerProfile > 역할 생성 



- IAM > 역할 > 생성한 역할 선택 > 권한 

- 권한추가 

AmazonEC2RoleforSSM

AWSElasticBeanstalkEnhancedHealth

AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy


- 권한 경계 

AdministratorAccess



- 신뢰 관계 

{

"Version": "2012-10-17",

"Statement": [

{

"Effect": "Allow",

"Principal": {

"Service": [

"elasticbeanstalk.amazonaws.com",

"ec2.amazonaws.com"

]

},

"Action": "sts:AssumeRole"

}

]

}



3. AWS Elastic BeanStalk 생성 (두번째 시도 : 다른부분만 체크) 

- 어플리케이션 > 새환경생성


# 환경 구성 

애플리케이션 이름 : springex01

도메인 springex1 > 다음

# 서비스 엑세스 구성 

서비스 역할 : aws-elasticbeanstalk-service-role

EC2 키페어 : AWS_TEST_KEY

EC2 인스턴스 프로파일 : testCustomerProfile (생성한 역할) 선택


# 네트워킹 및 데이터베이스

퍼블릭 IP 주소 : 활성화 체크 

인스턴스 서브넷 전부선택 

데이터베이스 서브넷 전부선택

데이터베이스 활성화 



# 나머지 기본설정 > 검토 > 제출 


4. AWS Elastic BeanStalk 테스트

# 대기 (대기 중 만들어졌는지 궁금하면 EC2에서 인스턴스 뜨는지 확인) > 완료 후 도메인 선택 


# 상태 ok 확인

상태탭에서는 향상된 인스턴스 상태를 보면 ok가 있는데

주기적으로 신호를 보내서 응답이 200이 떨어지면 살아있다고 판단함


# 완료되면 도메인아래 링크로 들어가서 파란색 화면이 뜨는지 확인



5. DB 연결

# 디비서버 연결설정 

- 엘라스틱 빈스톡 > 환경 들어가기 > 구성 

네트워킹 및 데이터베이스 편집 

엔드포인트 복사 (포트빼고 복사)

awseb-e-wgvgx6ebvp-stack-awsebrdsdatabase-4oxwabdh9w1f.cjyiuckgsss2.ap-northeast-2.rds.amazonaws.com


server01 접속 

root-context.xml 수정 

url에 jdbc:mysql:/엔드포인트집어넣기:3306 ~~~

user springex

paaswd paassord


bash ./gradlew build


생성된 war파일 로컬에 저장 


환경 > 레코드선택 > 업로드 배포 

war파일 선택 > 배포 


도메인 링크 선택 

404에러 나옴 (테이블이 없다)

로그확인 

로그탭 선택 

로그요청 > 마지막 100줄 (로그다운로드 생김)


- 엘라스틱빈으로 생성한 ec2 인스턴스에 원격연결 및 db설치 및 db설정

리모트하나추가 (엘라스틱빈 환경도메인 : 생성된 ec2 private ipv4 )

호스트네임 : 환경개요 도메인 


  Host EB-EC2

    HostName springex001.ap-northeast-2.elasticbeanstalk.com

    User ec2-user

    Port 22

    IdentityFile C:\key-pair\EC2forLinux.pem


ping 테스트 root-context에서 복사 

ping awseb-e-wgvgx6ebvp-stack-awsebrdsdatabase-4oxwabdh9w1f.cjyiuckgsss2.ap-northeast-2.rds.amazonaws.com

sudo yum search mariadb105

sudo yum install mariadb105 -y


mysql -u springex -p -h awseb-e-wgvgx6ebvp-stack-awsebrdsdatabase-4oxwabdh9w1f.cjyiuckgsss2.ap-northeast-2.rds.amazonaws.com

비번 password0729

use webdb 


지난번에 주신 dump파일 sql 전부 실행 


show tables 확인


엘라스틱 빈스톡 > 환경 > 작업 > 앱서버 다시시작


도메인 접속 > http://springex001.ap-northeast-2.elasticbeanstalk.com/todo/register


# 요금 나가니 삭제하기


* EB-EC2

ifconfig 

172.31.45.175 (ec2 인스턴스 private ipv4) 


* 생성된 rds 주소 ip는? 아마존 서울리전에 설치되어있으며, 엔드포인트는(출발지혹은 도착지) 

awseb-e-wgvgx6ebvp-stack-awsebrdsdatabase-4oxwabdh9w1f.cjyiuckgsss2.ap-northeast-2.rds.amazonaws.com

설치되어있는 아마존서버의 서브넷

subnet-0c32ba16cef28d23a

subnet-0c623302dc9aff629

subnet-00cfb8084170e2205

subnet-0067563e2bb46bb6c


* 왜 퍼블릭ip가없는가?

db는 퍼블릭ip설정 없음 ec2 내부ip로만 통신함 

통신할때 dns 도메인을 사용 (엘라스톡빈 서비스 > 환경 > 레코드선택 > 도메인)

springex001.ap-northeast-2.elasticbeanstalk.com  (ex2 퍼블릭 dns 주소) 


rds 데이터베이스 > 레코드선택 > 엔드포인트 

awseb-e-wgvgx6ebvp-stack-awsebrdsdatabase-4oxwabdh9w1f.cjyiuckgsss2.ap-northeast-2.rds.amazonaws.com (rds dns주소)

* (ex2 퍼블릭 dns 주소) 와 (rds dns주소) 가 통신함




# 서버02 배포 테스트(aws 아님)

- 서버01

- 서버01에서 jdbc설정 


<property name="jdbcUrl" value="jdbc:mysql://192.168.100.178/webdb?serverTimezone=Asia/Seoul"></property>

<property name="username" value="spring"></property>

<property name="password" value="spring"></property>


- HealthController 생성


package com.zerock.springex.controller;


import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.RestController;


@RestController

public class HealthController  {

    

    @GetMapping("/")  //GET방식일 때...

    public String health() {

        return "this server is running";

    }

}



user1@myserver01:~/springex-main$ sudo ./gradlew test

user1@myserver01:~/springex-main$ sudo ./gradlew build

user1@myserver01:~/springex-main$ scp ./build/libs/springex-1.0-SNAPSHOT.war user1@192.168.15.102:~


서버02 

- ll로 war파일확인 

- 기존배포파일삭제 

sudo rm -rf /usr/local/lib/tomcat/webapps/* 

- war파일 이동 

sudo mv springex-1.0-SNAPSHOT.war /usr/local/lib/tomcat/webapps/ROOT.war

- 톰캣 중지 

sudo /usr/local/lib/tomcat/bin/shutdown.sh

- 톰캣 재시작 

sudo /usr/local/lib/tomcat/bin/startup.sh


* 톰캣 오류 확인 시 

cd /usr/local/lib/tomcat/logs/

ll

sudo vim localhost.2024-07-31.log 

sudo vim catalina.out 

netstat -antup | grep 80


#돈안나갈려면 삭제필요

eb에서 환경만 중지하면 다른것도 중지됨 (다음날확인필요)

댓글

T O P