반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 클라우드
- Python
- 도커 명령어
- 데브옵스
- boj
- 리눅스
- devops
- 도커 이미지
- 부스트코스
- centOS
- 네트워크
- 컨테이너
- swift 클로저
- NGINX
- k8s
- docker
- ios
- 쿠버네티스
- kubernetes
- centOS7
- 프로세스
- os
- 도커
- Swift
- 운영체제
- 인프라
- 도커 컨테이너
- AWS
- linux
- C++
Archives
- Today
- Total
귀염둥이의 메모
[AWS] 웹 서버에서 php 실행 및 MySQL 연동하기, RDS, EC2, VPC 본문
반응형
원래 하고 싶었던 것
- 이렇게 Multi AZ 를 이용해서 만들어 보고 싶지만
- RDS 프리티어는 다중 AZ 지원을 하지 않음!!!
실제 결과물
- 이렇게 같은 AZ 이거나 다른 AZ 에 만들어 보겠음
VPC 마법사를 이용해서 Public Subnet과 Private Subnet 만들기
탄력적 IP 먼저 할당
- VPC를 생성하기 전에 탄력적 IP를 할당해주자
VPC 마법사
- [VPC 마법사 시작]
- [퍼블릭 및 프라이빗 서브넷이 있는 VPC] > [선택]
- 퍼블릭과 프라이빗을 같은 가용 영역으로 지정해주고, 만들었던 탄력적 IP 할당하자
- 둘 다 가용 영역을 ap-northeast-2a 로 설정
- [VPC 생성]
RDS 네트워크 및 보안 설정
private subnet 2 생성
- 다른 가용 영역을 선택해줍니다 ap-northeast-2c
웹 서버용 보안 그룹 생성
- VPC를 우리가 만든 Tutorial VPC로 지정해주고
- 웹 서버용이니까 인바운드 규칙에 SSH랑 HTTP를 모두로 추가한다
- 원래 SSH 접속을 나만 허용해야 하는데 실습하고 삭제할 예정이니 모두로 해도 상관없다
RDS용 보안그룹 생성
- [서비스] > [RDS] > 좌측 메뉴 [서브넷 그룹] > [DB 서브넷 그룹 생성]
- Tutorial VPC로 지정하고
- MySQL을 사용할거니까 지정해주고
- 소스에 아까 만든 웹 서버용 보안그룹을 사용하는 것만 허용할 수 있게 선택해준다
- 어차피 웹 서버용 인스턴스 하나만 WebServer 보안 그룹을 사용할 것이다
DB 서브넷 그룹 생성
- 이름, VPC 설정
- Private Subnet 1, 2 가 포함 되어있는 가용 영역을 선택해 준다
- 그리고 Private Subnet 1, 2 를 선택해준다
RDS DB 인스턴스 생성
- [RDS] > [데이터베이스 생성]
- 표준 생성, MySql 선택
- 버전 정보 : MySQL 5.7.30
- 프리티어
-
- 프리티어는 Multi AZ 를 지원하지 않는다... 🤣
- ⭐️ 마스터 사용자 : tutorial_user
- ⭐️ 마스터 암호 : 12345678
- 사용자랑 암호는 꼭 기억하자
- 서브넷 그룹 아까 만든 거로 지정해준다
- 퍼블릭 액세스는 아니요 : 어차피 VPC 내부에서만 접근할 거다 외부에서 접근할 일 없음
- VPC 보안 그룹 : 아까 만든 tutorial-db-securitygroup
- 가용 영역 : 선택 없음으로 해도 상관없다 하지만 ap-northeast-2a 로 하겠음
- Multi AZ 를 하고 싶어서 가용 영역 여러 개를 설정했었는데 프리티어여서 의미가 없어졌다 😭
- 그래도 Multi AZ 배포를 한다고 생각하고 하자~
- 포트는 3306
- 추가 구성에서 초기 데이터 베이스 이름 sample 지정하자
- 그리고 마지막으로 [생성] 버튼을 누르고 5분~ 10분을 기다리자!!
- 기다릴 동안 ec2에 Apache랑 php 설치 고고
EC2 생성하고 Apache, php 설치하기
- EC2로 넘어가서 Amazon Linux -> t2.micro
- 3단계에서 Tutorial-VPC 지정
- 서브넷은 Public Subnet으로 지정
- 퍼블릭 IP 자동 할당 활성화
- 6단계 보안 그룹 구성으로 넘어가자
- 기존 보안 그룹 선택
- 아까 만들었던 WebServer용 보안 그룹을 선택하자
- [검토 및 시작]
EC2 접속해서 apache, php 설치
sudo yum -y update
sudo yum -y install httpd php php-mysqlnd
- update 해주고 설치 고고
sudo systemctl start httpd
sudo systemctl enable httpd
- 아파치 실행 고고
- 인스턴스 퍼블릭 IP로 접속해보자
- 그리고 RDS 생성되었는지 확인
웹 서버 루트 페이지 수정을 위한 설정
sudo groupadd www
sudo usermod -aG www ec2-user
exit
- 웹 서버 기본 루트 페이지 수정을 하기 위해 /var/www 디렉토리의 소유권 및 권한을 변경하자
- www 그룹을 추가해주고 ec2-user 보조 그룹으로 지정
- 재접속 후 groups로 확인
sudo chown -R root:www /var/www
sudo chmod 2775 /var/www
find /var/www -type d -exec sudo chmod 2775 {} +
find /var/www -type f -exec sudo chmod 0664 {} +
- /var/www 의 그룹 소유권을 www 그룹으로 변경
- /var/www 와 하위 디렉토리에 그룹 쓰기 권한을 추가하고, 나중에 생성될 하위 디렉토리에서 GID 설정
- /var/www 및 하위 디렉토리의 파일 권항을 변경
RDS DB 인스턴스에 Apache 웹 서버 연결
- /var/www 에 inc 디렉토리 생성
vi dbinfo.inc
<?php
define('DB_SERVER', 'tutorial-db-instance.c8mygpyjttdj.ap-northeast-2.rds.amazonaws.com');
define('DB_USERNAME', 'tutorial_user');
define('DB_PASSWORD', '12345678');
define('DB_DATABASE', 'sample');
?>
- vi 에디터로 해당 내용을 작성
- DB_SERVER 에는 자신의 RDS MySQL 인스턴스 엔드포인트
- 아까 RDS 설정했던 대로 작성해줍니다 그리고 저장
cd /var/www/html
vi SamplePage.php
<?php include "../inc/dbinfo.inc"; ?>
<html>
<body>
<h1>Sample page</h1>
<?php
/* Connect to MySQL and select the database. */
$connection = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD);
if(mysqli_connect_errno()) echo "Failed to connect to MySQL: " . mysqli_connect_error();
$database = mysqli_select_db($connection, DB_DATABASE);
/* Ensure that the Employees table exists. */
VerifyEmployeesTable($connection, DB_DATABASE);
/* If input fields are populated, add a row to the Employees table. */
$employee_name = htmlentities($_POST['Name']);
$employee_address = htmlentities($_POST['Address']);
if(strlen($employee_name) || strlen($employee_address)) {
AddEmployee($connection, $employee_name, $employee_address);
}
?>
<!-- Input form -->
<form action="<?PHP echo $_SERVER['SCRIPT_NAME'] ?>" method="POST">
<table border="0">
<tr>
<td>Name</td>
<td>Address</td>
</tr>
<tr>
<td>
<input type="text" name="Name" maxlength="45" size="30" />
</td>
<td>
<input type="text" name="Address" maxlength="90" size="60" />
</td>
<td>
<input type="submit" value="Add Data" />
</td>
</tr>
</table>
</form>
<!-- Display table data. -->
<table border="1" cellpadding="2" cellspacing="2">
<tr>
<td>ID</td>
<td>Name</td>
<td>Address</td>
</tr>
<?php
$result = mysqli_query($connection, "SELECT * FROM Employees");
while($query_data = mysqli_fetch_row($result)) {
echo "<tr>";
echo "<td>",$query_data[0], "</td>",
"<td>",$query_data[1], "</td>",
"<td>",$query_data[2], "</td>";
echo "</tr>";
}
?>
</table>
<!-- Clean up. -->
<?php
mysqli_free_result($result);
mysqli_close($connection);
?>
</body>
</html>
<?php
/* Add an employee to the table. */
function AddEmployee($connection, $name, $address) {
$n = mysqli_real_escape_string($connection, $name);
$a = mysqli_real_escape_string($connection, $address);
$query = "INSERT INTO `Employees`(`Name`, `Address`) VALUES('$n', '$a');";
if(!mysqli_query($connection, $query)) echo("<p>Error adding employee data.</p>");
}
/* Check whether the table exists and, if not, create it. */
function VerifyEmployeesTable($connection, $dbName) {
if(!TableExists("Employees", $connection, $dbName))
{
$query = "CREATE TABLE `Employees`(
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Name` varchar(45) DEFAULT NULL,
`Address` varchar(90) DEFAULT NULL,
PRIMARY KEY(`ID`),
UNIQUE KEY `ID_UNIQUE`(`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1";
if(!mysqli_query($connection, $query)) echo("<p>Error creating table.</p>");
}
}
/* Check for the existence of a table. */
function TableExists($tableName, $connection, $dbName) {
$t = mysqli_real_escape_string($connection, $tableName);
$d = mysqli_real_escape_string($connection, $dbName);
$checktable = mysqli_query($connection,
"SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_NAME = '$t' AND TABLE_SCHEMA = '$d'");
if(mysqli_num_rows($checktable)> 0) return true;
return false;
}
?>
- /var/www/html 로 이동해서 SamplePage.php 작성하고 저장
- http://ec2퍼블릭주소/SamplePage.php 접속
- 이름, 주소 등록 및 조회
- 잘 작동한다~
EC2에서 MySQL DB 인스턴스 접속해보기
sudo yum install -y https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
sudo yum install -y mysql-community-client
mysql --version
- 그냥 설치하면 낮은 버전이 설치될 수 있다
- 위에 처럼 mariadb 설치하고
- mysql 버전 확인
mysql -h [MySQL 인스턴스 엔드포인트] -P 3306 -u tutorial_user -p
- 비밀번호 12345678 입력
- sample 데이터 베이스 확인
- 테이블 조회하면 아까 우리가 넣었던 것들이 조회된다 😊
반응형
'Infra & Devops > AWS' 카테고리의 다른 글
[AWS] Amazon EKS(Elastic Kubernetes Service) (1) | 2021.10.12 |
---|---|
[AWS] Amazon CloudFront (0) | 2021.09.07 |
[AWS] VPC 네트워크 직접 구축하기 (0) | 2021.09.02 |
[AWS] VPC (Virtual Private Cloud) (0) | 2021.09.01 |
[AWS] 리전 (Region), 가용 영역 (Availability Zone), 엣지 로케이션 (Edge Location) (1) | 2021.08.31 |
Comments