【AWS】CloudFormation을 통한 웹 서비스 구축 ③(RDS편)
12867 단어 CFnWebAWSaws-cliCloudFormation
본 투고는 아래 보도의 속편이다.
【AWS】CloudFormation을 통한 웹 서비스 구축①(NW편)
【AWS】CloudFormation을 통한 웹 서비스 구축 ②(EC2편)
이 투고를 처음 보신 분은 이쪽 기사부터 읽어주세요.
2. RDS 편 개요
이번'AWS'클라우드 포메이션은 웹 서비스 ③(RDS편)를 구축하고 웹 서비스의 데이터 관리를 목적으로 하는 데이터베이스 관리 시스템, 아마존 RDS의 템플릿을 제작한다.
구체적인 서비스는 다음과 같다.
2.1 "Database.yml"에 등장하는 서비스
RDS 편이 작성한 템플릿 환경의 구성도는 다음 그림과 같습니다.
3. RDS 템플릿 만들기
다음은 RDS 섹션의 템플릿입니다.
명명 규칙 등 필요하면 자신의 환경에 따라 수정하세요.
수정이 완료되면 작업 디렉터리에 '데이터베이스.yml' 파일 이름으로 저장하십시오.
database.yml
AWSTemplateFormatVersion: "2010-09-09"
Description: Web2tier-database-Template
# ------------------------------------------------------------#
# Input Parameters
# ------------------------------------------------------------#
Parameters:
### Project Prefix ###
PJPrefix:
Type: String
### RDS Name ###
DBEngineName:
Type: String
Default: "web2tier-rds-mysql"
### RDS Database type & Major version ###
MySQLMajorVersion:
Type: String
Default: "5.7"
AllowedValues: [ "5.5", "5.6", "5.7" ]
### RDS Database type & Minor version ###
MySQLMinorVersion:
Type: String
Default: "22"
### Instnce Options ###
DBInstanceClass:
Type: String
Default: "db.m4.large"
DBEngineStorageSize:
Type: String
Default: "30"
DBEngineStorageType:
Type: String
Default: "gp2"
### Database name ###
DBName:
Type: String
Default: "testdb"
### User Options ###
DBMasterUserName:
Type: String
Default: "dbuser"
NoEcho: true
MinLength: 1
MaxLength: 16
AllowedPattern: "[a-zA-Z][a-zA-Z0-9]*"
ConstraintDescription: "must begin with a letter and contain only alphanumeric characters."
DBPassword:
Default: "DBPassword"
NoEcho: true
Type: String
MinLength: 8
MaxLength: 41
AllowedPattern: "[a-zA-Z0-9]*"
ConstraintDescription: "must contain only alphanumeric characters."
### AZ options ###
MultiAZ:
Default: "false"
Type: String
AllowedValues: [ "true", "false" ]
### Resources ###
Resources:
# ------------------------------------------------------------#
# DB - Engine
# ------------------------------------------------------------#
DBEngine:
Type: "AWS::RDS::DBInstance"
Properties:
DBInstanceIdentifier: !Sub "${DBEngineName}"
Engine: MySQL
EngineVersion: !Sub "${MySQLMajorVersion}.${MySQLMinorVersion}"
DBInstanceClass: !Ref DBInstanceClass
AllocatedStorage: !Ref DBEngineStorageSize
StorageType: !Ref DBEngineStorageType
DBName: !Ref DBName
MasterUsername: !Ref DBMasterUserName
MasterUserPassword: !Ref DBPassword
DBSubnetGroupName: !Ref DBSubnetGroup
PubliclyAccessible: false
MultiAZ: !Ref MultiAZ
PreferredBackupWindow: "18:00-18:30"
PreferredMaintenanceWindow: "sat:19:00-sat:19:30"
AutoMinorVersionUpgrade: false
DBParameterGroupName: !Ref DBParameterGroup
VPCSecurityGroups:
- { "Fn::ImportValue": !Sub "${PJPrefix}-rds-sg" }
CopyTagsToSnapshot: true
BackupRetentionPeriod: 7
Tags:
- Key: "Name"
Value: !Ref DBEngineName
DeletionPolicy: "Delete"
# ------------------------------------------------------------#
# DB - SubnetGroup
# ------------------------------------------------------------#
DBSubnetGroup:
Type: "AWS::RDS::DBSubnetGroup"
Properties:
DBSubnetGroupName: !Sub "${DBEngineName}-subnet"
DBSubnetGroupDescription: "-"
SubnetIds:
- { "Fn::ImportValue": !Sub "${PJPrefix}-private-subnet-a" }
- { "Fn::ImportValue": !Sub "${PJPrefix}-private-subnet-c" }
# ------------------------------------------------------------#
# DB - ParameterGroup
# ------------------------------------------------------------#
DBParameterGroup:
Type: "AWS::RDS::DBParameterGroup"
Properties:
Family: !Sub "MySQL${MySQLMajorVersion}"
Description: !Sub "${DBEngineName}-parm"
3.1 RDS 템플릿 구축작성된 CFn 템플릿의 구성
다음 명령을 실행하십시오.
※ 스택 이름, 접두사, 또는 추가로 지정하려는 매개 변수 등이 있으면 자신의 환경에 따라 수정하십시오.
RDS 템플릿 구성 명령
$ aws cloudformation create-stack \
--stack-name web2tier-RDS-stack \
--template-body file://./databse.yml \
--parameters ParameterKey=PJPrefix,ParameterValue=web2tier
↓ 문법 오류가 없으면 다음 결과를 출력합니다.실행 결과
{
"StackId": "arn:aws:cloudformation:ap-northeast-1:xxxxxxx:stack/<スタックネーム>/<メタ番号>"
}
3.2 SSM을 사용한 Apache와 MySQL(RDS) 협업지금까지의 단계는 웹 서비스의 기초 환경을 구축했다.
이후 마지막 완성요건인'RDS를 통해 작성된 DB 기록의 브라우저 열람'을 달성하기 위해 아파치와 RDS 합동 작업을 진행한다.
작업은 다음 절차에 따라 진행된다.
① SSM을 통해 웹 서버에 연결
② MySQL(RDS)에 웹 서버 연결
③ 테스트 기록 작성
④ 웹 서버에서 MySQL과 공동 작업 설정
그럼 바로 일을 시작하겠습니다.
3.2.1 세션 관리자를 통해 SSM과 웹 서버에 연결
Amazon Systems Manager의 세션 관리자 기능을 사용하여 웹 서버에 연결하여 콘솔 작업을 수행합니다.
※ 연결 대상 웹 서버는 AZ-a, c 중 임의
자세한 순서는 생략하겠습니다. 하지만 Google 등과 AWS SSM EC2 연결 연결로 검색하면 순서가 기재된 기사가 많기 때문에 그쪽을 참조하십시오.
3.2.2 MySQL에 연결
웹 서버를 기준으로 MySQL에 연결합니다.
세션 관리자가 웹 서버에 연결된 상태인 것 같습니다. 콘솔에서 다음 절차를 수행하십시오.
# DB操作の為のMySQLをインストール
$ sudo yum -y install mysql
# WebサーバーのMySQLクライアントからRDSに接続
# ※下記コマンド実行後、パスワードを聞かれますので、RDS作成時に設定したパスワードを入力してください
$ mysql -h <RDSのエンドポイント> -P 3306 -u <ユーザー名> -p
↓ 연결 후 아래와 같이 힌트를 주면 MySQL 연결이 완료됩니다mysql [{none}]>
3.2.3 테스트 기록의 제작MySQL에서 브라우저에 표시할 테스트 레코드를 만듭니다.
손 순서대로 실행하세요.
# テスト用のデータベースの作成
mysql [{none}]> create database testdb;
# テーブルの作成(テーブル名:user)
mysql [{none}]> create table testdb.user(id int , country varchar(20));
# 作成したテーブルにデータを挿入
mysql [{none}]> INSERT INTO testdb.user
(id, country)
VALUES
(1, 'Japan'),
(2, 'Argentina'),
(3, 'Italy'),
(4, 'India'),
(5, 'Australia'),
(6, 'Czech'),
(7, 'Portugal'),
(8, 'Mongolia'),
(9, 'Germany'),
(10, 'Belgium');
# データが登録できたことを確認する
mysql [{none}]> select * from testdb.user;
# MySQLから抜ける
mysql [{none}]> quit
3.2.4 웹 서버에서 PHP와 MySQL의 공동 작업 설정웹 서버의 브라우저에서 방금 작성한 테스트 레코드를 표시하기 위한 설정을 수행합니다.
PHP를 재설치하고 MySQL과 공동 작업을 위한 설정 파일을 수정합니다.
마찬가지로 명령줄에서 다음 절차를 수행하십시오.
참고: 이 프로그램을 두 개의 웹 서버(ZA-a, AZ-C)에 구현하십시오.
① 웹 서버에 PHP 및 MySQL 처리 모듈 설치
$ sudo yum -y install php php-mysql
② 확장자.php 파일을 php 파일로 읽기 설정하기vim 편집기에서 httpd.conf 열기
$ sudo vim /etc/httpd/conf/httpd.conf
IfModule mime module로 표시된 영역에 다음 코드를 추가합니다.코드: AddType application/x-httpd-php.php
httpd.conf- 편집 전
<IfModule mime_module>
~~ 略 ~~
</IfModule>
↓ 영역의 끝에 있는 코드: AddType application/x-httpd-php.추기 phphttpd.conf- 편집 후
<IfModule mime_module>
~~ 略 ~~
AddType application/x-httpd-php .php
</IfModule>
그런 다음 Apache를 다시 시작하고 구성 파일을 다시 로드합니다.다음 명령을 실행하십시오.
$ sudo systemctl restart httpd
③ 아파치에서 PHP를 읽는지 확인PHP 버전 정보 indexphp에서 추기를 실행하여 브라우저에서 이 버전의 정보를 열람할 수 있는지 확인합니다.
다음 명령을 실행하십시오.
$ sudo sh -c "echo '<?php phpinfo(); ?>' >> /var/www/html/index.php"
브라우저에서 다음 URL을 사용하여 검색합니다.URL: www.<도메인 이름>/index.php
아래 화면이 표시되면 PHP가 쉽게 읽을 수 있습니다.
④ index.php를 DB 정보를 참조하는 코드로 수정
아까 index.php에 추가되었습니다. 이번에는 RDS에서 만들어지고 DB 기록을 참조한 코드를 기록합니다.
비디오 편집기의 index입니다.php 파일을 시작합니다.
$ sudo vim /var/www/html/index.php
다음 코드는 index입니다.php에 붙여 주세요.<>에 둘러싸인 다음 부분을 수정하십시오.
・
・<사용자 이름>
암호
<?php
try
{
$dbs = "mysql:host=<RDSのエンドポイント>;dbname=testdb;charset=utf8";
$user='<ユーザー名>';
$password='<パスワード>';
$dbh=new PDO($dbs, $user, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql='SELECT * FROM user';
$stmt=$dbh->prepare($sql);
$dbh=null;
//実行
$stmt->execute();
$all = $stmt->fetchAll();
//配列を表示
foreach($all as $loop){
echo $loop['id']." ".$loop['country'].'<br>';
}
}
catch (Exception $e)
{
print '接続失敗';
exit();
}
?>
Apache를 아까처럼 다시 시작하고 구성 파일을 다시 로드합니다.다음 명령을 실행하십시오.
$ sudo systemctl restart httpd
4. 동작 확인 - RDS를 통한 DB 레코드 찾아보기그러면 마지막 남은 완성 조건[RDS를 통해 제작된 DB 기록의 브라우저 조회]을 확인하는 동작입니다.
브라우저에서 다음 URL을 사용하여 검색합니다.
URL: www.<도메인 이름>/index.php
RDS에서 작성한 DB 테이블이 표시되는지 확인합니다.
5. 요약
이상, 본 보도는 모두 끝났습니다.
CFn과 최소한의 수동 조작을 통해 웹 서버 제작을 간단하게 끝냈다.
또한 이번 편에서 공개한 CFn 코드에는 최소한의 코드만 기재되어 있다.
여기에 소개되지 않은 삽입식 함수와 문법은 CFn에도 많다.
어쨌든 이 기사가 CFn에 관심을 가질 수 있는 좋은 기회가 됐으면 좋겠습니다.
- 기사 목록 -
①[AWS] 클라우드 포메이션을 통한 웹 서비스 구축 ①(NW편)
②[AWS] 클라우드 포메이션을 통한 웹 서비스 구축 ②(EC2편)
③[AWS] 클라우드 포메이션을 통한 웹 서비스 구축 ③(RDS편)
Reference
이 문제에 관하여(【AWS】CloudFormation을 통한 웹 서비스 구축 ③(RDS편)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/chibiharu/items/dc42c6a7ac9cb6740bce텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)