기존 ec2 만든 실습에서 연장해서 진행했는데, VPC의 구성을 좀 바꿔야 했다
RDS는 서브넷 그룹을 만들어서 지정해야 하는데, 서브넷 그룹은 2개 이상의 가용영역의 서브넷들이 존재해야 한다
그래서 private subnet을 하나 더 만들어주고, 그에 맞게 parameter도 바꿔주었다
Parameters:
AZprivate1:
Description: AvailabilityZone for private
Type: AWS::EC2::AvailabilityZone::Name
AZprivate2:
Description: AvailabilityZone for private
Type: AWS::EC2::AvailabilityZone::Name
PrivateSubnet1Cidr:
Description: Cidr Block for Private Subnet 1
Type: String
Default: 10.0.10.0/24
PrivateSubnet2Cidr:
Description: Cidr Block for Private Subnet 2
Type: String
Default: 10.0.20.0/24
Resources:
PrivateSubnet1:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref VPC
CidrBlock: !Ref PrivateSubnet1Cidr
AvailabilityZone: !Ref AZprivate1
Tags:
- Key: Name
Value: private subnet 1
PrivateSubnet2:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref VPC
CidrBlock: !Ref PrivateSubnet2Cidr
AvailabilityZone: !Ref AZprivate2
Tags:
- Key: Name
Value: private subnet 2
이제 RDS를 만들어보겠다
1. Subnet Group 생성
Resources:
SubnetGroup:
Type: AWS::RDS::DBSubnetGroup
Properties:
DBSubnetGroupDescription: SubnetGroup for MySQL RDS
DBSubnetGroupName: mySubnetGroup
SubnetIds:
- !Ref PrivateSubnet1
- !Ref PrivateSubnet2
RDS를 만들기 위해 필요한 서브넷 그룹을 생성해준다
포함된 서브넷들의 가용영역은 2개 이상이어야 하므로 스택을 생성할 때 프라이빗 서브넷들의 가용영역을 다르게 설정해주어야 한다
Description은 필수니까 안쓰면 안된다
2. 필요한 Parameter 생성
Parameters:
DBInstanceID:
Default: dbinstance
Description: Database Instance Name
Type: String
MinLength: 1
MaxLength: 64
AllowedPattern: '[a-zA-Z][a-zA-Z0-9]*'
ConstraintDescription: Must begin with a letter, Contain Only alphanumeric
DBName:
Default: db1
Description: Database Name
Type: String
MinLength: 1
MaxLength: 64
AllowedPattern: '[a-zA-Z][a-zA-Z0-9]*'
ConstraintDescription: Must begin with a letter, Contain Only alphanumeric
DBInstanceClass:
Default: db.m5.large
Description: DB instance class
Type: String
AllowedValues:
- db.m5.large
- db.m5.xlarge
- db.m5.2xlarge
- db.m5.4xlarge
- db.m5.8xlarge
DBUsername:
Description: Username for DB Access
Type: String
MinLength: 1
MaxLength: 64
AllowedPattern: '[a-zA-Z][a-zA-Z0-9]*'
ConstraintDescription: Must begin with a letter, Contain Only alphanumeric
DBPassword:
NoEcho: true
Description: Password for DB Access
Type: String
MinLength: 8
MaxLength: 40
AllowedPattern: '[a-zA-Z0-9]*'
ConstraintDescription: Contain Only alphanumeric
DBAllocatedStorage:
Default: 50
Description: Size of Database (GiB)
Type: Number
MinValue: 5
MaxValue: 1024
ConstraintDescription: between 20 and 65536 GiB
DB 인스턴스 ID, Database 이름, 인스턴스 클래스, UserName, Password, 스토리지 크기를 파라미터로 설정해줬다
Min/Max Length/Value, AllowedPattern는 파라미터를 설정할 때의 조건들이다
인스턴스ID, DB이름, User이름은 알파벳으로 시작하면서 알파벳과 숫자만을 사용할 수 있게 했고, Password는 그냥 알파벳과 숫자만 사용하도록 설정했다
스택 생성하면서 파라미터 입력할 때, 이 조건에 걸리면 ConstrainDescription의 문구가 뜨면서 RollBack된다
그리고 Password엔 NoEcho : true란 속성이 있는데, 이는 파라미터를 입력하고 확인할 때 *로 마스킹되어 나타나도록 한다
인스턴스 클래스는 MySQL용 클래스들 중 5가지만 적어놨는데, MySQL로 할게 아니거나 다른 클래스를 쓰고 싶으면 AllowdValue를 없애고 직접 입력하도록 하자
3. RDS 생성
Resources:
RDS:
Type: AWS::RDS::DBInstance
Properties:
DBInstanceIdentifier: !Ref DBInstanceID
DBName: !Ref DBName
DBInstanceClass: !Ref DBInstanceClass
Engine: MySQL
EngineVersion: 8.0.20
MasterUsername: !Ref DBUsername
MasterUserPassword: !Ref DBPassword
AllocatedStorage: !Ref DBAllocatedStorage
DBSubnetGroupName: !Ref SubnetGroup
VPCSecurityGroups:
- !Ref SGforDB
서브넷그룹과 파라미터들을 미리 다 만들어놨으므로 편하게 참조만 해주면 된다
Engine과 EngineVersion은 그냥 고정시켜버렸는데, 이것도 파라미터로 쓰고싶은 사람은 알아서 수정해보도록 하자
보안그룹도 VPC 만들 때 만든 DB용 보안그룹을 연결시켜줬다 (Web서버용 보안그룹의 트래픽만 허용)
4. 생성 후 확인
완성된 파일을 가지고 스택을 생성해보자
비번만 *로 마스킹된걸 확인할 수 있다
아무튼 모두 다 제약조건에 맞게 설정해준 후, 생성을 완료한다
RDS 인스턴스가 생성되는게 오래걸려서 좀 기다려야 한다
생성되면 서비스 > RDS > 데이터베이스 로 들어가 생성된 dbinstance를 눌러보자
원하는대로 잘 생성되었다
Web Server EC2에서 접속을 해보자
mysql -h [생성된 RDS 엔드포인트] -u [설정한 UserName] -p
접속도 잘 되고, db1이란 데이터베이스도 잘 만들어져있다
/var/www/html/ 에서 index.html을 만들면 웹 브라우저에도 잘 나타난다
cd /var/www/html/
echo "Hello" > index.html
DB Table들을 생성하고 html, php 파일을 만들어 연동하는건 알아서 하자
끝
'공부 > IaC' 카테고리의 다른 글
[AWS CloudFormation] #7 Auto Scaling Group 만들기 ( + Launch Configuration, ALB ) (0) | 2021.01.08 |
---|---|
[AWS CloudFormation] #6 IAM User, Policy 생성 (0) | 2021.01.06 |
[AWS CloudFormation] #4 mapping 사용하기 (EC2 AMI) (0) | 2021.01.06 |
[AWS CloudFormation] #3 웹서버용 EC2 만들기 (SG, EC2, UserData) (0) | 2021.01.05 |
[AWS CloudFormation] #2 파라미터 사용하기 (VPC 구성) (0) | 2021.01.05 |
댓글