AWS_웹 애플리케이션 배포
by 현생사는갓생지망생AWS 상에 웹 애플리케이션 배포
다중 AWS 서비스를 사용하여 웹 애플리케이션을 배포한다.
* 웹 애플리케이션은 PHP를 사용하여 Amazon EC2 인스턴스에서 호스팅 된다.
* 데이터는 Amazon DynamoDB 테이블에 저장된다.
* 이미지는 Amazon S3에서 제공된다.
위와 같은 애플리케이션 환경을 배포한다.
본 실습을 완료하면 다음과 같은 작업을 수행할 수 있다.
1. Amazon EC2 인스턴스에서 사용할 IAM Role 생성
2. Amazon S3 버킷 생성
3. Amazon DynamoDB 테이블 생성
4. 인터넷 게이트웨이와 퍼블릭 서브넷을 갖춘 VPC 생성
5. Amazon EC2 상에 웹 애플리케이션 배포
작업 1: IAM 역할 생성
IAM Role을 생성하고 Amazon S3 및 Amazon DynamoDB에 액세스할 수 있는 권한을 부여한다.
이 역할을 추후 웹 애플리케이션을 실행할 Amazon EC2 인스턴스에 할당된다.
AWS 서비스를 호출할 권한이 있다는 점에서 IAM Role은 사용자와 비슷하다.
그렇지만, 1인 전용이 아니기 때문에 인증된 사용자나 서비스, 애플리케이션도 역할을 맡을 수 있다.
이 작업이 완료되면 AWS 서비스에
대한 API 호출에 사용할 수 있는 액세스 자격 증명이 동적으로 생성된다.
이것이 Amazon EC2 인스턴스에서 실행되는 애플리케이션이 AWS 서비스
(예: Amazon S3 및 Amazon DynamoDB)를 호출할 수 있는 자격 증명을 획득하는 방식이다.
AWS Management Console의 Services 메뉴에서 IAM을 선택한다.
왼쪽 탐색 창에서 Roles을 클릭 후 Create role을 클릭한다.
AWS Service를 선택한 후 EC2를 클릭한다.
EC2를 선택한다.
EC2 인스턴스가 사용자를 대신하여 AWS 서비스에 접근하는 것을 허용한다.
목록에서 AmazonS3FullAccess, AmazonDynamoDBFullAccess 두 역할을 선택한다.
그대로 Next: Review를 클릭한다.
Role name : WebServerRole
Create role을 클릭한다.
이 역할은 추후 실습에서 Amazon EC2 인스턴스를 시작할 때 사용한다.
그 다음에는 해당 인스턴스에서 실행 중인 웹 애플리케이션에 Amazon S3 및
Amazon DynamoDB 사용 권한이 부여된다.
방금 생성한 Role을 확인한다.
작업 2: Amazon S3 버킷 생성
웹 애플리케이션에서 이 버킷을 사용하여 웹 페이지의 이미지 및 기타 정적 파일을 제공한다.
Services 메뉴에서 S3를 클릭 후 Create bucket을 클릭한다.
Bucket name은 반드시 webapp- 으로 시작해야 한다. 그렇지 않으면 애플리케이션이 버킷을 찾지 못한다.
Create를 클릭한다. 추후 웹 애플리케이션이 이 버킷에 파일을 복사하게 된다.
생성한 버킷을 확인한다.
작업 3: Amazon DynamoDB 테이블 생성
웹 애플리케이션 데이터를 보유하게 될 Amazon DynamoDB 테이블을 생성한다.
Services 메뉴에서 DynamoDB를 선택하여 Create table을 클릭한다.
Table name : AWS-Services
Partition key아래의 텍스트 상자에 Category 입력하고 ‘Add sort key’ 체크 후 Name을 입력한다.
DynamoDB 테이블이 생성되었다.
추후 웹 애플리케이션이 이 테이블에 데이터를 복사하게 된다.
작업 4: Amazon VPC 생성
단일 퍼블릭 서브넷이 있는 기본 Amazon Virtual Private Cloud(VPC)를 생성한다.
VPC의 리소스가 인터넷과 통신할 수 있도록 인터넷 게이트웨이를 VPC에 연결한다.
작업 4.1: VPC 생성
Services 메뉴에서 VPC 선택 후 Your VPCs를 클릭한다.
Create VPC를 클릭한다.
Name tag : Lab VPC
IPv4 CIDR block : 10.200.0.0/16
설정을 완료했다면 Create를 클릭한다.
VPC가 잘 생성되었다.
작업 4.2: 서브넷 생성
Subnet은 VPC의 세그먼트로 Amazon EC2 인스턴스와 같은 리소스를 포함한다.
각 서브넷은 VPC에 할당된 IP 주소 범위의 하위 집합을 수신한다.
왼쪽 탐색 창에서 Subnets 선택 후 Create subnet을 클릭한다.
Name tag : Public Subnet 1
VPC : Lab VPC
Availability zone : 첫 번째 가용 영역
IPv4 CIDR block : 10.200.10.0/24
설정을 완료했다면 Create를 클릭한다.
퍼블릭 서브넷은 인터넷과 통신할 수 있는 서브넷이다. 공개적으로 액세스할 수 있어야 하는
리소스를 배치할 수 있는 영역이다. 서브넷 이름이 Public Subnet 1일뿐 아직 퍼블릭 서브넷이 아니다.
퍼블릭 서브넷으로 만들려면 VPC를 인터넷 게이트웨이에 연결해야 한다.
Public Subnet 1의 이름으로 서브넷이 생성되었다.
작업 4.3: 인터넷 게이트웨이 생성
VPC와 인터넷 간의 인터페이스인 Internet Gateway를 생성한다.
왼쪽 탐색 창에서 Internet Gateway 선택 후 Create Internet gateway를 선택한다.
Name tag : Lab Gateway
새로 생성된 Lab Gateway를 선택하고 Actions 메뉴에서 Attach to VPC를 클릭한다.
Lab VPC를 선택한다.
Lab Gateway의 State가 attached로 변경된다.
이제 인터넷 게이트웨이가 VPC에 연결되었지만, 아직 사용할 수는 없다.
라우팅 테이블을 구성하여 네트워크 트래픽 경로를 인터넷 게이트웨이로 지정해야 한다.
작업 4.4: 퍼블릭 라우팅 테이블 생성
Route Table에는 Routes라는 규칙 세트가 포함되어 있다.
Routes는 서브넷으로 들어오고 나가는 네트워크 트래픽 경로를 지정한다.
새로운 VPC는 VPC 내부의 네트워크 트래픽만 라우팅하는 라우팅 테이블을 자동으로 수신한다.
이를 프라이빗 라우팅 테이블이라 한다.
인터넷 게이트웨이를 통해 리소스를 인터넷과 통신하도록 해주는 퍼블릭 라우팅 테이블을 생성한다.
왼쪽 탐색 창에서 Route Tables를 선택하여 Create route table을 클릭한다.
Name tag : Public Route Table
VPC : Lab VPC
설정을 완료했다면 Create를 클릭한다.
새로 생성된 Public Route Table을 선택하고 Routes 탭을 클릭한다.
Edit routes를 클릭한다.
인터넷 게이트웨이를 통해 인터넷 트래픽(와일드 카드 0.0.0.0/0으로 식별)을 보내도록
라우팅 테이블을 구성한다.
Destination : 0.0.0.0/0
Target : Lab Gateway (igw- 로 시작하는 ID)
이제 이전에 생성한 서브넷에 퍼블릭 라우팅 테이블을 연결할 수 있다.
Public Route Table이 선택된 상태에서 Subnet Associations 탭을 클릭한다.
Edit subnet associations를 클릭한다.
Public Subnet 1을 선택하고 Save를 클릭한다.
이제 서브넷이 퍼블릭 서브넷이 되었다. 즉, 서브넷의 리소스가 인터넷과 통신할 수 있다.
작업 5: Amazon EC2 인스턴스 시작
퍼블릭 서브넷에서 Amazon EC2 인스턴스를 생성한다. 인스턴스란 용어는 클라우드에서 실행되는 가상 머신을 나타낸다.
시작 시 웹 애플리케이션을 설치하도록 인스턴스를 구성한다.
애플리케이션은 Amazon S3 Bucket 및 Amazon DynamoDB table과 통신하게 된다.
이 세 가지 서비스는 웹 애플리케이션에 컴퓨팅, 스토리지 및 데이터베이스 서비스를 제공한다.
Services 메뉴에서 EC2를 선택하고 Launch Instance를 클릭한다.
새 인스턴스를 시작할 때, 클라우드 내에 있는 인스턴스 용 사전 구성
템플릿인 Amazon 머신 이미지(AMI)를 선택해야 한다.
Linux 운영 체제가 포함된 이미지를 선택한다.
인스턴스에 할당할 RAM과 CPU의
양을 결정하는 인스턴스 유형을 선택한다.
Network : Lab VPC
Subnet : Public Subnet 1
Auto-assign Public IP : Enable
IAM role : WebServerRole
설정이 잘못되면 웹 애플리케이션이 제대로 작동하지 않으니 주의해야 한다.
User data 필드에 스크립트가 제공되면 Amazon EC2 인스턴스가 처음 시작될 때 자동으로 스크립트를 실행한다.
소프트웨어를 설치하고 인스턴스를 구성하는 간편한 방법이다.
웹 애플리케이션을 자동으로 로드하고 구성하는 스크립트를 사용하게 된다.
이런
유형의 스크립트는 정확한 버전 추적 및 저장을 위해 일반적으로
Amazon CodeCommit과 같은 소스 코드 리포지토리에서 유지 관리된다.
스크립트는 다음 단계를 수행한다.
1. Apache 웹 서버(httpd) 및 PHP 언어 설치
2. 웹 애플리케이션용 스크립트가 포함된 파일 다운로드 및 압축 해제
3. PHP용 AWS SDK 다운로드 및 설치
4. 이름이 webapp-으로 시작하는 Amazon S3 버킷에 파일 복사
5. DynamoDB 테이블에 데이터 복사
6. 웹 서버 실행
사용자 데이터 스크립트는 인스턴스를 처음 시작할 때만 실행되므로 초기 데이터를 로드하고
인스턴스를 구성하기에 이상적인 방법이다.
yum install -y httpd
amazon-linux-extras install -y php7.2
wget https://us-west-2-tcprod.s3.amazonaws.com/courses/ILT-TF-100-ARCHIT/v5.5.6/lab-1-webapp/scripts/lab1src.zip
unzip lab1src.zip -d /tmp/
mv /tmp/lab1src/*.php /var/www/html/
wget https://github.com/aws/aws-sdk-php/releases/download/3.62.3/aws.zip
unzip aws -d /var/www/html
AZ=`curl --silent http://169.254.169.254/latest/meta-data/placement/availability-zone/`
REGION=${AZ::-1}
BUCKET=`aws s3api list-buckets --query "Buckets[?starts_with(Name, 'webapp-')].Name | [0]" --output text`
aws s3 cp /tmp/lab1src/jquery/ s3://$BUCKET/jquery/ --recursive --acl public-read --region $REGION
aws s3 cp /tmp/lab1src/images/ s3://$BUCKET/images/ --recursive --acl public-read --region $REGION
aws s3 ls s3://$BUCKET/ --region $REGION --recursive
sed -i "2s/%region%/$REGION/g" /var/www/html/*.php
sed -i "3s/%bucket%/$BUCKET/g" /var/www/html/*.php
aws dynamodb batch-write-item --request-items file:///tmp/lab1src/scripts/services1.json --region $REGION
aws dynamodb batch-write-item --request-items file:///tmp/lab1src/scripts/services2.json --region $REGION
aws dynamodb batch-write-item --request-items file:///tmp/lab1src/scripts/services3.json --region $REGION
chkconfig httpd on
service httpd start
이 인스턴스에서는 추가 스토리지가 필요 없으므로, 설정은 기본값으로 유지한다.
Key : Name
Value : Web Server
태그는 인스턴스와 관련된 메타데이터이다. 태그는 인스턴스 이름 지정 및 비용 센터 연결,
목적 식별에 사용될 수 있다.
Security group name : Web Server
Description : Web Server Security Group
보안 그룹은 인스턴스로 가는 트래픽을 제어하는 가상 방화벽 역할을 한다.
인스턴스는 웹 서버가 되므로 포트 80(HTTP)을 통한 액세스를 허용해야 한다.
기존 SSH 규칙은 그대로 둔다.
Type : HTTP
Source : Anywhere
Review and Launch를 클릭하여 설정을 확인 후 Launch를 클릭한다.
qwikLABS 키 페어를 수락하고 승인 확인란을 선택한 후 Launch Instances를 클릭한다.
View Instances를 클릭한다.
Amazon EC2 인스턴스를 시작하는 데 몇 분 정도 소요된다.
시작 후 사용자 데이터 스크립트를 실행하여 소프트웨어를 설치하고 웹 애플리케이션을 활성화한다.
Status Checks : 2/2 checks passed가 표시될 때까지 기다린다.
이제 인스턴스에 액세스할 수 있다.
작업 6: 리소스 검사
웹 애플리케이션에 액세스하고 사용자 데이터 스크립트가 로드한 리소스를 검사한다.
34.233.120.227
Web Server 인스턴스를 선택하여 Description 탭에서 IPv4 Public IP를 복사한다.
추가로, VPCs > Edit DNS hostnames 에서 DNS hostnames의 Enable 체크해본다.
그럼 DNS hostname도 사용 가능하다.
새로운 브라우저 탭을 열고 IP 주소를 붙여 넣는다.
현재 이미지가 안보이는 에러가 보인다.
위에서 생성했던 Bucket의 Permissions 모두 체크를 해제한다.
아까와 달리 웹 애플리케이션이 이상 없이 표시된다.
웹 애플리케이션에서 아무 카테고리나 클릭하면 서비스 아이콘이 나타난다.
다음과 같은 내용이 보일 것이다.
- 기존에 생성한 DynamoDB 테이블에서 검색된 서비스 목록
- 기존에 생성한 Amazon S3 버킷에서 제공되는 서비스 아이콘
웹 애플리케이션에 표시되는 이미지는 Amazon S3 버킷에서 직접 제공된다.
아이콘에서 마우스 오른쪽 클릭하고 ‘이미지 주소 복사’ 선택한다.
새 브라우저에 링크를 붙여 넣고 URL이 Amazon S3 버킷을 참조하는지 확인한다.
URL은 다음과 같은 형식이어야 한다.
webapp-[지정한 이름].s3.amazonaws.com/images/Developer-Tools_AWSCodeDeploy.png
서비스 이름은 Amazon DynamoDB 테이블에서 검색되었다.
AWS Management Console 탭으로 돌아가 Services 메뉴에서 DynamoDB를 클릭한다.
왼쪽 탐색 창에서 Tables 클릭 후 AWS-Services 테이블에서 Items 탭을 클릭한다.
DynamoDB 테이블의 항목들이 표시된다.
인스턴스를 시작했을 때 사용자 데이터 스크립트가 로드한 항목들이다.
'AWS 공부기록 > 종합 실습' 카테고리의 다른 글
AWS_Auto Scaling 및 Load Balancer를 이용한 고가용성 환경 구축(2) (0) | 2019.01.02 |
---|---|
AWS_Auto Scaling 및 Load Balancer를 이용한 고가용성 환경 구축(1) (0) | 2019.01.02 |
AWS_Elastic Load Balancing(ELB) 및 Auto Scaling (0) | 2019.01.02 |
AWS_Amazon Relational Database Service(RDS) (0) | 2018.12.28 |
AWS_VPC 구축 및 웹 서버 시작 (0) | 2018.12.27 |
블로그의 정보
현생이네
현생사는갓생지망생