인프라/클라우드
AWS EC2, RDS, VPC 및 배포 자동화 구성하기
jwKim96
2022. 6. 20. 05:09
위 그림과 같은 인프라 구조를 구성하는것이 목표 입니다.
1. VPC 설정
- 이름 : issue-tracker-vpc
- IPv4 CIDR : 10.0.0.0/16
- 태그 : project, issue-tracker
1.1 private subnet 2개 생성
- 이름 : issue-tracker-private-subnet-1-ap-northeast-2a
- private subnet 1 :
10.0.0.0/24
- 가용 영역 : ap-northeast-2a
- 태그 : project, issue-tracker
- private subnet 1 :
- 이름 : issue-tracker-private-subnet-2-ap-northeast-2b
- private subnet 1 :
10.0.1.0/24
- 가용 영역 : ap-northeast-2b
- 태그 : project, issue-tracker
- private subnet 1 :
1.1.1 라우팅 테이블 생성
- 이름 : issue-tracker-private-rtb-ap-northeast-2
- VPC(issue-tracker-vpc-ap-northeast-2) 에 연결
- 태그 : project, issue-tracker
1.2 public subnet 2개 생성
- 이름 : issue-tracker-public-subnet-1-ap-northeast-2a
- public subnet 1 :
10.0.10.0/24
- 가용 영역 : ap-northeast-2a
- 태그 : project, issue-tracker
- public subnet 1 :
- 이름 : issue-tracker-public-subnet-2-ap-northeast-2b
- public subnet 1 :
10.0.11.0/24
- 가용 영역 : ap-northeast-2b
- 태그 : project, issue-tracker
- public subnet 1 :
1.3 IGW 생성
- 이름 : issue-tracker-igw-ap-northeast-2
- VPC(issue-tracker-vpc-ap-northeast-2) 에 연결
- 태그 : project, issue-tracker
1.4 IGW 연결
1.4.1 라우팅 테이블 생성
- 이름 : issue-tracker-public-rtb-ap-northeast-2
- VPC(issue-tracker-vpc-ap-northeast-2) 에 연결
- 태그 : project, issue-tracker
- 라우팅 편집
0.0.0.0/0
->issue-tracker-igw-ap-northeast-2
- 서브넷 연결 편집
issue-tracker-pub-subnet-1-ap-northeast-2
연결issue-tracker-pub-subnet-2-ap-northeast-2
연결
2. NAT Instance
2.1. 보안그룹 생성
- 이름 : issue-tracker-sg-nat
- 인바운드 규칙
모든 트래픽
,issue-tracker-private-subnet-1-ap-northeast-2 의 CIDR
모든 트래픽
,issue-tracker-private-subnet-2-ap-northeast-2 의 CIDR
- 인바운드 규칙
2.2. 인스턴스 생성
- 이름 : issue-tracker-ec2-nat-ap-northeast-2
- 태그 : project, issue-tracker
- OS : Amazon Linux 2 AMI (HVM) - Kernel 5.10
- 아키텍처 : 64bit
- 인스턴스 유형 : t2.micro
- 키페어 생성
- 이름 : issue-tracker-ec2-key
- 유형 : RSA
- 형식 : .pem
- VPC :
issue-tracker-public-subnet-1-ap-northeast-2
- 퍼블릭 IP 자동 할당 : 활성화
- 보안그룹 :
issue-tracker-sg-nat
- 스토리지 : 8G
- 고급 세부 정보
- 사용자 데이터
#!/bin/sh
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects
/sbin/iptables -t nat -A POSTROUTING -o eth0 -s 0.0.0.0/0 -j MASQUERADE
/sbin/iptables-save > /etc/sysconfig/iptables
mkdir -p /etc/sysctl.d/
cat < /etc/sysctl.d/nat.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.eth0.send_redirects = 0
EOF
2.3 소스 대상 확인 변경 Disable
- EC2 인스턴스 리스트에서 NAT(
issue-tracker-ec2-nat-ap-northeast-2
)선택 - 작업 > 네트워킹 > 소스/대상 확인 변경
- 중지 선택 후 저장
2.4. NAT 인스턴스 정상 동작 확인
2.4.1 ssh 접속
chmod 400 issue-tracker-ec2-key.pem
ssh -i issue-tracker-ec2-key.pem ec2-user@서버ip
2.4.2 인터넷 접속 테스트
ping ietf.org
PING ietf.org (4.31.198.44) 56(84) bytes of data.
64 bytes from mail.ietf.org (4.31.198.44): icmp_seq=1 ttl=45 time=111 ms
64 bytes from mail.ietf.org (4.31.198.44): icmp_seq=2 ttl=45 time=111 ms
2.5. 라우팅 테이블 설정
VPC - 라우팅테이블 메뉴로 이동
issue-tracker-private-rtb-ap-northeast-2
라우팅 편집
0.0.0.0/0
->issue-tracker-ec2-nat-ap-northeast-2
3. WAS Instance
3.1. 보안그룹 생성
- 이름 : issue-tracker-sg-was
- 규칙 추가 없이 그냥 생성
- 태그 : project, issue-tracker
3.2. 인스턴스 생성
- 이름 : issue-tracker-ec2-was-ap-northeast-2
- 태그 : project, issue-tracker
- OS : Amazon Linux 2 AMI (HVM) - Kernel 5.10
- 아키텍처 : 64bit
- 인스턴스 유형 : t2.micro
- 기존 키페어 선택
issue-tracker-ec2-key
- VPC :
issue-tracker-private-subnet-1-ap-northeast-2
- 퍼블릭 IP 자동 할당 : 비활성화
- 보안그룹 :
issue-tracker-sg-was
- 스토리지 : 8G
3.2.1 (선택) 사용자 데이터 추가
#!/bin/sh
# code deploy install
yum install -y ruby
yum install -y wget
CODEDEPLOY_BIN="/opt/codedeploy-agent/bin/codedeploy-agent"
$CODEDEPLOY_BIN stop
yum erase codedeploy-agent -y
cd /home/ec2-user
wget https://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/install
chmod +x ./install
./install auto
systemctl start codedeploy-agent
systemctl enable codedeploy-agent
# mysql install
yum -y install mysql
# java 11 install
yum install -y java-11-amazon-corretto.x86_64
# nginx install
amazon-linux-extras install -y nginx1
echo "
server {
listen 80;
listen [::]:80;
server_name localhost;
location /api {
proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
}
" > /etc/nginx/conf.d/isuse-tracker.conf
systemctl start nginx
systemctl enable nginx
EOF
3.3 ssh 키 NAT 에 전송 및 접속
mac> ssh-add -K issue-tracker-ec2-key.pem
mac> ssh -A -i issue-tracker-ec2-key.pem ec2-user@NAT퍼블릭IP
3.4 WAS 인스턴스 접속
nat> ssh ec2-user@WAS프라이빗IP
3.5 인터넷 접속 테스트
ping ietf.org
PING ietf.org (4.31.198.44) 56(84) bytes of data.
64 bytes from mail.ietf.org (4.31.198.44): icmp_seq=1 ttl=45 time=111 ms
64 bytes from mail.ietf.org (4.31.198.44): icmp_seq=2 ttl=45 time=111 ms
3.6 필요 소프트웨어 설치
3.6.1 Java 설치
was> sudo yum list | grep jdk
was> sudo yum install java-11-amazon-corretto.x86_64
was> java -version
3.6.2 MySQL 설치
was> sudo yum -y install mysql
was> mysql --version
was> mysql -h SERVER_IP -u USER_ID -p DATABASE_NAME
enter password: PASSWORD
3.6.3 CodeDeploy Agent 설치
was> sudo yum update
was> sudo yum install ruby
was> sudo yum install wget
was> #!/bin/bash
CODEDEPLOY_BIN="/opt/codedeploy-agent/bin/codedeploy-agent"
$CODEDEPLOY_BIN stop
yum erase codedeploy-agent -y
was> cd /home/ec2-
was> wget https://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/install
was> chmod +x ./install
was> sudo ./install auto
was> sudo service codedeploy-agent start
was> sudo service codedeploy-agent status
4. RDS 설정
4.1 서브넷 그룹 생성
- 이름 : issue-tracke-rds-subnet-group
- 서브넷 추가(가용 영역)
- ap-northeast-2a
- ap-northeast-2b
- 태그 : project, issue-tracker
- 서브넷 추가(가용 영역)
4.2 파라미터 그룹 생성
- 이름 : issue-tracker-rds-param-group
- timezone :
Asia/Seoul
- collation_database :
utg8mb4
- default_collation_for_utf8mb4 :
utf8mb4_general_ci
- character_set_database :
utf8mb4
- timezone :
- 태그 : project, issue-tracker
4.3. 데이터데이스 생성
- Engine : MySQL
- Version : 8.0.x
- 템플릿 : 프리티어
- 이름(식별자) : issue-tracker-rds-ap-northeast-2
- 태그 : project, issue-tracker
- 자격 증명 설정
- user : root
- password : issue-tracker
- 연결
- VPC :
issue-tracker-vpc-ap-northeast-2
- 서브넷 그룹 :
issue-tracke-rds-subnet-group
- 가용 영역 :
ap-northeast-2a
- VPC :
- 추가 구성
- DB 파라미터 그룹 :
issue-tracker-rds-param-group
- DB 파라미터 그룹 :
5. S3 버킷
5.1. Front-end 배포용 버킷
- 이름 : issue-tracker-s3-frontend-deploy
- 태그 : project, issue-tracker
- AWS 리전 :
ap-northeast-2a
- 모든 퍼블릭 엑세스 차단 : 체크 해제
- 바로 아래 주의사항 체크
5.1.1 권한 설정
생성된 정책의 "Resource"
에서 "arn:aws:s3:::jwkim-public-test"
를 "arn:aws:s3:::jwkim-public-test/*"
로 변경
5.1.2 정적 리소스 호스팅 설정
속성
탭의 최하단으로 이동
)
)
가린 부분에 엔드포인트가 나옴
참고 : https://kukim.tistory.com/144
5.2. Back-end 배포용 버킷
- 이름 : issue-tracker-s3-backend-deploy
- 태그 : project, issue-tracker
- AWS 리전 :
ap-northeast-2a
- 모든 퍼블릭 엑세스 차단 : 체크
5.3 ALB 설정
5.3.1 타겟 그룹 생성
- 이름 : issue-tracker-target-group
- 태그 : project, issue-tracker
- Target type : Instance
- Protocol : HTTP, 80
- VPC : `issue-tracker-vpc
다음(next) 를 누르고
issue-tracker-ec2-was-ap-northeast-2
체크 후Include as Pending below
클릭
5.3.2 ALB 생성
Application Load Balancer 설정
- 이름 : issue-tracker-alb
- scheme : internet-facing
- IP Address type : IPv4
- VPC :
issue-tracker-vpc
- Mappings
- ap-northeast-2a
issue-tracker-subnet-public1-ap-northeast-2a
- ap-northeast-2b
issue-tracker-subnet-public1-ap-northeast-2b
- ap-northeast-2a
- SecurityGroup
- 생성
- 이름 : issue-tracker-sg-alb
- 인바운드 : HTTP,
0.0.0.0/0
- 생성
- Listeners and routing
- HTTP, 80,
issue-tracker-target-group
- HTTP, 80,
5.3.2 WAS ALB 인바운드 허용
EC2 > 보안그룹 > issue-tracker-sg-was
> 인바운드 규칙 편집
- 규칙 추가 : HTTP,
issue-tracker-sg-alb
5.4 CloudWatch log 전송 설정
6. IAM 설정
6.1 Github Action 사용자 생성
사용자 추가
- 이름 : issue-tracker-iam-github-action
- 엑세스 유형 : 엑세스 키
- 권한
- AmazonS3FullAccess
- AWSCodeDeployFullAccess
- CloudFrontFullAccess
- 태그 : project, issue-tracker
사용자 만들기가 완료되면 꼭!!! .csv 다운로드 하기
(완료 페이지를 나가면 더 이상 엑세스 키 ID
, 비밀 엑세스 키
볼 수 없음)
6.2 EC2 가 사용할 역할 생성
6.2.1 정책 생성
정책 json 에 아래와 같이 입력
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"codedeploy-commands-secure:GetDeploymentSpecification",
"codedeploy-commands-secure:PollHostCommand",
"codedeploy-commands-secure:PutHostCommandAcknowledgement",
"codedeploy-commands-secure:PutHostCommandComplete"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
- 이름 : issue-tracker-iam-policy-codedeploy-agent
- 태그 : project, issue-tracker
6.2.2 역할 생성
- 이름 : issue-tracker-iam-role-ec2-deploy-agent
- 권한
AmazonS3FullAccess
issue-tracker-iam-policy-codedeploy-agent
- 태그 : project, issue-tracker
6.3 CodeDeploy 가 사용할 역할 생성
- 이름 : issue-tracker-iam-role-codedeploy
- 권한
AWSCodeDeployRole
- 태그 : project, issue-tracker
6.4 CodeDeploy
6.4.1 애플리케이션
- 이름 : issue-tracker-application
- 컴퓨팅 플랫폼 : EC2/온프레미스
6.4.2 Back-end 배포 그룹 생성
- 이름 : issue-tracker-be-dg
- 태그 : project, issue-tracker
- 역할 :
issue-tracker-iam-role-ec2-deploy-agent
- 환경 구성 : Amazon EC2 인스턴스
- 태그 그룹 1
- 키 :
Name
,issue-tracker-ec2-was-ap-northeast-2
- 키 :
- 태그 그룹 1
- 로드 밸런서 : 체크 해제