Docker Hub - AWS (Elastic Beanstalk) 연동
내가 원하는 프로세스:
travis CI가 push를 인식 -> 테스트 코드 실행 -> 성공하면 운영환경의 이미지 build -> 빌드된 이미지를 ->dockerhub에 보낸다
-> AWS EB에 dockerhub에 이미지를 보냈다고 알림 -> AWS EB에서 DockerHub에 있는 이미지를 가져온 후 배포
EB환경 생성
Elastic Beanstalk(EB)
apache, nginx와 같은 서버에서 java,net,node.js python, ruby, go 및 docker와 함께 개발된 웹 응용 프로그램을 배포및 확장하기 쉬운 서비스로써 환경을 구성및 관리해준다.
먼저 EB환경을 새로 만든다.
Elastic Beanstalk 관리 콘솔 (amazon.com)
https://ap-northeast-2.console.aws.amazon.com/elasticbeanstalk/home?region=ap-northeast-2#/welcome
ap-northeast-2.console.aws.amazon.com
도커 이미지를 실행하기 때문에 플랫폼을 Docker로 설정한다.
플랫폼 브랜치와 플랫폼 버전을 설정하고 생성
AWS RDS 생성
AWS RDS
아마존 관계형 데이터베이스 서비스 또는 아마존 RDS는 아마존 웹 서비스가 서비스하는 분산 관계형 데이터베이스이다. 애플리케이션 내에서 관계형 데이터베이스의 설정, 운영, 스케일링을 단순케 하도록 설계된 클라우드 내에서 동작하는 웹 서비스
서비스 검색에 rds를 입력하고 새 데이터베이스를 생성한다.
엔진 옵션은 mysql을 사용하기 때문에 mysql선택
db 인스턴스 식별자는 db 인스턴스의 이름,
마스터 사용자 이름은 docker-compose.yml에서 설정해준 MYSQL_USER
마스터 암호는 MYSQL_ROOT_PASSWORD를 입력한다.
추가구성에서 초기 데이터베이스 이름은 MYSQL_DATABASE 를 입력한다.
이제 AWS의 RDS(관계형 데이터베이스) 를 설정하기 위해 MYSQL을 어플리케이션과 연결시켜줘야한다.
이를 위해 VPC와 Security Group을 설정해줘야한다.
Amazon Virtual Private Cloud(VPC)
VPC를 사용하면 VPC별로 네트워크를 구성 할 수 있고 각각의 VPC에 따라 다르게 네트워크 설정을 줄 수 있다.
각각의 VPC는 완전히 독립된 네트워크 처럼 작동한다.
EB나 EC2등 환경을 생성 하면 기본적으로 default VPC가 적용되서 들어간다.
Security Group 생성하기
VPC -> 보안그룹으로 이동해서 보안그룹을 생성한다. 보안 그룹 이름은 DockerSequrityGroup (철자 틀렸는데 만들어서 어쩔수없이 진행 ㅠ)
인바운드 규칙을 편집해준다.
이제
AWS RDS로 이동해서 보안그룹을 지정해줘야한다.
즉시 적용에 체크하고 db인스턴스 수정을 클릭.
이제 EB에도 보안그룹을 추가해준다.
EB -> Docker-fullstack-app으로 이동 -> 구성-> 인스턴스 -> 편집 클릭
이제 보안 그룹 설정을 마쳤다.
하지만 EB 안에 있는 컨테이너들은 아직 mysql 인스턴스와 소통할때 환경변수를 인식하지 못한다.
따라서 해당 EB에 환경변수를 설정해준다.
먼저 aws rds로 가서 엔드포인트를 가져온다.
그리고 나서
Elastic Beanstalk -> 구성 -> 소프트웨어 편집 클릭
docker-compose.yml 부분에 작성한 환경변수를 입력해준다.
배포부분 설정을 위해 .travis.yml의 제일 밑에 deploy를 추가한다.
deploy:
#외부 서비스 표시(s3, elesticbeanstalk, firebase 등등)
provider: elasticbeanstalk
#현재 사용하고 있는 AWS의 서비스가 위치하고있는 물리 장소
region: "ap-northeast-2"
#생성된 어플리케이션의 이름
app: "nemo_test"
#elasticbeanstalk을 위한 s3 버켓이름
env: "Nemotest-env"
bucket_name: elasticbeanstalk-ap-northeast-2-291897759134
bucket_path: "nemo_test"
#특정 branch에만 해당 aws서버에 올릴 수 있게 설정해두었다.
on:
branch: main
# iam 계정으로 부터 생성해서 travis ci에 저장해둔 key
access_key_id: $AWS_ACCESS_KEY
secret_access_key: $AWS_SECRET_ACCESS_KEY
travis ci와 aws가 실질적으로 소통할 수 있게 api를 발급받아야 한다.
이를 IAM에서 발급한 access_key로 인증하고 진행한다.
access_key를 위해 IAM으로 이동해 계정을 생성한다.
IAM 계정은 root사용자가 부여한 권한만 사용할수 있다.
사용자 -> 사용자 추가 클릭
사용자 이름을 입력하고 액세스 키 체크 후 진행
그리고 AdministratorAccess-AWSElasticBeanstalk 정책에 체크 후 사용자를 만든다.
해당 액세스 키ID와 비밀 액세스 키 복사
travis ci로 이동해 환경변수로 넣어준다.
그리고 git push를 하면..
엥? 에러 발생.. rds 연결에 코드상 오류가 있었다.
config.js로 이동해 host 주소를 바꿔준다.
const dotenv = require("dotenv");
dotenv.config();
module.exports = {
"development": {
"username": "root",
"password": process.env.SQUARE_WITH_ME_DB_PASSWORD,
"database": "Square_with_me_database",
"host": "nemo-test-mysql.cgxqbbyivfqr.ap-northeast-2.rds.amazonaws.com",
"port": 3306,
"dialect": "mysql"
},
"test": {
"username": "root",
"password": process.env.SQUARE_WITH_ME_DB_PASSWORD,
"database": "Square_with_me_database",
"host": "nemo-test-mysql.cgxqbbyivfqr.ap-northeast-2.rds.amazonaws.com",
"port": 3306,
"dialect": "mysql"
},
"production": {
"username": "root",
"password": process.env.SQUARE_WITH_ME_DB_PASSWORD,
"database": "Square_with_me_database",
"host": "nemo-test-mysql.cgxqbbyivfqr.ap-northeast-2.rds.amazonaws.com",
"port": 3306,
"dialect": "mysql"
}
}
수정하고 다시실행..
에러 어서오고~
방화벽에 막히는건가 싶어서 아래 링크를 진행해봤다.
윈도우10 에서 특정포트 열기 - 인바운드 설정 편 : 네이버 블로그 (naver.com)
윈도우10 에서 특정포트 열기 - 인바운드 설정 편
안녕하세요. 얀씨(Lobe) 입니다. 윈도우7에서 인바운드 설정하는 포스팅을 한 적이 있습니다. 시대가 많이...
blog.naver.com
이거해보고 저거해보고 오버스택플로우에 글도 올려봤지만 마땅한 해결책을 못찾았다.
인바운드 규칙에서 소스를 anywhere 로 바꿔주니 일단 워크벤치랑 연결은 됐다..
travis에서도 잘 실행되는걸 볼 수 있다.
'[항해99]' 카테고리의 다른 글
항해 99 수료 후기 (0) | 2022.04.22 |
---|---|
배포 에러 해결 (dockerrun.aws.json수정) (0) | 2022.03.28 |
travis ci에서 ignore된 환경 변수(.env 파일) 사용하기 (0) | 2022.03.24 |
DOCKER, TRAVIS CI, GITHUB 연결 (1) (0) | 2022.03.24 |
프로젝트에 도커 도입 (0) | 2022.03.23 |
댓글