Azure의 AppService는 AWS의 ElasticBeanstalk과 비슷한 서비스이다.

사용자는 코드만 작성하고, 나머지 프로비저닝과 운영은 Azure에서 한다.

이러한 AppService를 통해 html 웹앱을 배포해보자.

 

1. portal에서 Azure Cloud Shell 사용

맨 위 상단 바에서

이 버튼을 누른다.

 

그럼 하단에 shell이 생기면서

스토리지를 생성하게 만든다.

 

2. 코드 git clone 및 AppService 시작.

html sample 코드를 받을 디렉터리를 만들자.

mkdir quickstart
cd quickstart
git clone https://github.com/Azure-Samples/html-docs-hello-world.git
cd html-docs-hello-world

그럼 이렇게 html-docs-hello-world가 clone 되었다.

 

이제 배포 코드를 입력한다.

현재 위치한 디렉터리를 zip으로 만들어 배포함으로,  html-docs-hello-world에 위치해야 한다.

az webapp up --location eastus --name samplepage1 --html

구성이 끝나면 아래와 같은 메시지가 나오는데, app_url로 들어가면 html웹앱을 볼 수 있다.

바로 클릭하면 %22가 붙는데 지우면 잘 보인다.

3. index.html을 조금 수정하여 다시 배포

index.html 파일을 고치고,

az webapp up --location eastus --name samplepage1 --html

이 코드를 한번 더 입력하면, 새로운 버전으로 배포된다.

(name 뒤에 오는 이름을 이전에 만들었던 것과 똑같이 해야 새로운 appservice를 만들지 않고 배포된다.)

Azure의 VM은 AWS의 EC2와 같은 것이다.

이름만 다르지 모든 것은 동일하다.

 

일단은 Azure의 서비스를 이용하기 위해 회원가입을 하자.

회원가입 시에 카드 정보가 필요한데, 해외 결제를 풀어놓아야 인증이 된다.

(이것 때문에 회원가입이 한참 걸렸다.)

 

1. 가입을 했다면 Azure portal로 가자.

2. Azure서비스의 가상머신에서 만들기 클릭

3. 원하는 옵션 입력

리소스 그룹의 경우 없을 경우, 만들 수 있다.

굳이 가용성은 필요없어서 선택을 하지 않았다.

크기는 제일 싼 것으로 했다.

특이한 것은 AWS의 ubuntu는 ec2-user로 사용자 이름이 정해져 있던 반면, Azure은 사용자 이름을 설정해 줄 수 있다.

연결은 AWS에서 하는 것처럼 발급받은 pem파일을 이용해 git bash를 통해서 하면 된다.

이건 디폴트로 두자.

디스크와 보안도 디폴트로 둔다.

AWS와 다르게 필요한 네트워크 인터페이스를 자동으로 만들어준다.

참 편하다.

로드밸런서 옵션도 있다.

AWS에서는 많은 과정이 필요한 것인데, 여기서는 간단하게 된다.

그 뒤의 과정도 디폴트로 두고 만들기를 누른다.

이렇게 필요한 리소스들이 프로비저닝되고 있다고 알려준다.

만들어졌다.

 

4. git bash를 통해 연결 및 nginx-server 설치

연결을 누르고

AWS에서 하던 것과 동일하게 git bash를 사용하여 연결한다.

ssh -i 라인에서 pem파일을 적어야 연결이 된다.

 

일단은 업데이트부터 하자.

그리고 nginx를 설치한다. nginx 서버도 시작해주자.

sudo apt-get -y update
sudo apt-get -y install nginx
sudo service nginx start

/var/www/html에 있는 파일을 우리는 공용 ip주소를 통해서 볼 수 있다.

html의 소유권을 옮겨오자.

기존에 있던 파일을 조금 고쳐서 동작되는 지 확인해보자.

일단 기존에 있던 파일을 카피한다.

공용 ip로 원래 있던 html파일을 보려고 하는데 안된다.

http를 인바운드 포트 규칙에서 안 열어 놔서 그런가 보다.

네트워킹에 들어가서 열어주자

샘플 페이지가 잘 나온다.

 

이제 저 샘플페이지를 조금만 바꿔서 동작을 확인해보자.

index.html을 고친다.

 

(참고로 VM을 지울 때는 리소스 그룹에서 한번에 지우면 편하다.)

Azure 구독, 관리 그룹, 리소스 및 지역

- Azure의 리소스에 대한 구조: management groups - subscriptions - resource groups - resources

- resource - 가상 머신, 스토리지, SQL DataBase (사용자가 만든 서비스 instance)

- resource group - resource가 배포, 관리되는 논리적 컨테이너

(resource group이라는 것이 정말 편하다. AWS는 무언가 하나를 만들고 지울 때, 그에 필요한 부수적인 것들을 하나씩 찾아다니며 지워야 하지만, Azure은 resource group이라는 것을 지우면 관련된 모든 하위 리소스들이 지워진다.)

- subscription - 만들고 사용가능한 리소스 양에 대한 제한/할당량 -> 팀/프로젝트별 비용 관리

- 관리 그룹 - 여러 구독에 대한 액세스, 정책 등을 관리

 

Azure subscription

- Azure 제품/서비스에 대한 인증되고 권한이 부여된 액세스 제공

- 리소스 프로비저닝

- Azure AD(Active Driectory)에 있는 ID인 Azure 계정과 연결된 Azure서비스의 논리적 단위

(AWS의 IAM과 IAM Group과 비슷한 개념인 듯)

 

Azure 리소스 그룹

- 리소스를 보관하는 컨테이너: 리소스를 간편하게 구성, 관리

- Azure 플랫폼의 기본 요소

- 모든 리소스는 리소스 그룹에 있어야 함.

- 하나의 리소스는 하나의 resource group의 멤버여야 함(여러 개에 포함 x)

- 논리적 그룹화가 중요

- 수명주기 - resource group을 삭제하면 모든 resource가 삭제됨

- Azure Resource Manager

배포 및 관리 서비스

리소스 생성, 업데이트, 삭제 등의 관리 기능

액세스 제어, 잠금, 태그 등의 관리 기능

 

Azure 지역/가용성 영역- 중복된 하드웨어 환경 구축 -> 중복성 설정 -> 높은 가용성- 가용성 영역(AZ)Azure 지역 내에서 물리적으로 분리된 데이터 센터독립된 전원, 냉각 및 네트워크를 갖춘 하나 이상의 데이터 센터고속 프라이빗 광 네트워크를 통해 연결됨

 

Azure 지역 쌍- 각 지역은 300 mile 이상 떨어진 동일한 지리적 위치 내의 다른 Azure 지역과 항상 쌍을 이룸

 

Azure이란?

- Azure은 2010년에 런칭한 마이크로소프트사의 클라우드 컴퓨팅 플랫폼이다.

- 완전한 클라우드 컴퓨팅 플랫폼: 응용 프로그램 개발, 테스트, 배포, 관리를 위한 클라우드 서비스를 통합

- 좋아하는 도구(ex. word, powerpoint), 프레임워크를 사용하여 글로벌 네트워크(클라우드 환경)에서 application을 자유롭게 빌드, 관리, 배포할 수 있음

- 기존 응용 프로그램을 호스트

- 새 응용 프로그램 개발 간소화

- on-premise 응용 프로그램 향상

- AI 및 기계 학습 서비스 제공(Cognitive Services)

- 저장소 솔루션 제공

 

Application 호스팅

- 인프라 세부 정보에 대한 걱정 없이 application을 실행할 수 있는 다양한 클라우드 기반 컴퓨팅 제공 사항을 지원

- 응용 프로그램 호스트 방법 결정

전체 인프라를 vm으로 관리

Azure에서 제공하는 플랫폼 관리 기능 사용

코드 실행만 호스트하는 서버를 사용하지 않는 프레임워크(serverless)

- IaaS (전문지식이 있을 경우 이용)

호스팅에 대한 모든 권한 제공

코드가 실행되는 VM을 자세히 제어할 경우

- PaaS -앱을 지원하는 데 필요한 완전히 관리되는 서비스 제공

App Service - 대부분의 웹 사이트, 웹 응용프로그램 호스팅

Service Fabric - 마이크로 서비스 아키텍처의 경우(작은 단위로 개발하여 함수를 함침)

- Serverless - 코드만 작성 - Functions (=Lambda)

 

Azure Virtual Machines

- windows/LinuxVM 배포 지원

- 사용자가 컴퓨터 구성을 완전히 제어

- 사용자가 모든 서버 SW 설치, 구성, 유지 관리, OS 패치 담당

- VM 특징

Size, Region, Network...., Resource Group = 논리적 컨테이너 (리소스들이 하나의 컨테이너로 관리됨)

- 언제 사용하는가?

Application 인프라를 완전히 제어할 때

on-premise application workload를 변경하지 않고 Azure에 마이그레이션 할 때

 

Azure App Service

- 웹 기반 프로젝트를 가장 빠른 경로로 게시할 때 이용

- 인프라를 관리할 필요 없이 선택한 프로그래밍 언어로 웹 응용프로그램을 빌드하고 호스팅 할 수 있음.

- 웹앱, 모바일 앱 백엔드, API 앱 개발- DevOps를 염두에 두고 설계(Github 등 게시 및 연속 통합 배포를 위한 다양한 도구 지원)

- 웹 응용 프로그램, REST API 및 모바일 백엔드를 호스팅 하는 서비스

- 보안, 부하 분산(=LB), 자동 크기 조정(=AS) 등 Aure의 기능을 응용 프로그램에 추가

- 언제 사용하는가?기존 웹 애플리케이션을 Azure로 마이그레이션 할 때앱에 대해 완전히 관리되는 호스팅 플랫폼이 필요할 때앱에서 모바일 클라이언트를 지원할 때

 

Azure Functions (=Lambda)

- 코드를 실행하기 위해 전체 프로그램 또는 인프라를 빌드, 관리하지 않아도 됨.

- 이벤트 or 일정에 대한 응답으로 실행할 때 (서버가 필요할 때 만들어짐)

- 서버를 사용하지 않는 스타일 제공 -> 필요한 코드만 작성

- Http요청, 클라우드 서비스 event 또는 일정에 따라 코드 실행이 트리거 됨

- 언제 사용하는가?

웹 기반 이벤트 또는 일정에 따라 트리거 되는 코드가 있을 때

완전히 호스트 된 프로젝트의 오버헤드가 필요하지 않을 때

 

Azure Service Fabric (마이크로 아키텍처 사용)

- 마이크로 서비스를 관리하는 분산된 시스템 플랫폼

- 배포된 응용 프로그램의 프로비전, 배포, 모니터링, 업그레이드/패치 및 삭제 등 관리 기능 제공

- 언제 사용하는가?

응용 프로그램 개발

마이크로 서비스 아키텍처를 사용하도록 기존 애플리케이션을 다시 작성

 

 

RDS 같은 데이터베이스는 사실 외부에서 직접 접속하는 것을 막는 것이 좋다.

그러기 위해서는 private subnet을 이용하여 vpc내의 ec2가 접근하는 것은 허용하고, 나머지 접근은 허용하지 않으면 된다.

그림을 그리면 이런 느낌이다.

우리는 EC2에 외부에서 접속하여 RDS에 데이터를 올리고 조회할 수 있게 만들 것이다.

 

1. Public/Private Subnet 만들기

VPC마법사를 이용하여 만든다.

퍼블릭 및 프라이빗 서브넷이 있는 VPC 선택

2단계에서 vpc이름과 프라이빗, 퍼블릭 서브넷의 이름과 가용 영역을 설정한다.

탄력적 ip도 적용한다.

vpc는 10.0.0.0/16의 cidr를 사용하고, 그 안에서 public subnet은 10.0.0.0/24, private subnet는 10.0.1.0/24를 할당받았고, 이후에 추가하는 private subnet은 10.0.2.0/24를 할당한다.

 

2. private subnet추가

서브넷에서 서브넷 생성을 누른다.

VPC는 기존에 있던 VPC를, cidr블록은 아까 언급한 것처럼 10.0.2.0/24를 넣어준다.

가용영역은 아까 만든 private과 다른 곳에 만든다. 

 

3. VPC 보안 그룹 만들기

VPC는 아까 만든 VPC로 설정하고, 인바운드 규칙은 0.0.0.0/0이나 본인의 ip로 둔다.

private도 비슷하게 진행하는데, 인바운드 규칙에서 유형에 mysql/aurora로 설정하고, 소스에 아까 만든 ec2-security를 넣는다. 

4. RDS Subnet group 생성

RDS를 어떤 가용 영역에 위치시킬지 설정한다.

아까 가용영역 b, c에 private 서브넷을 만들었으므로 b, c 선택

5. RDS DB instance 만들기

연결에서 우리가 지금까지 만든 것들을 모두 입력한다.

(VPC, subnet group, vpc보안 그룹)

퍼블릭 액세스는 허용하지 않는다.

이후에 진행할 과정에서 초기 데이터베이스 이름이 필요하다.

 

6. EC2 instance 생성 및 Webserver 설치

네트워크를 기존에 만든 vpc, 서브넷은 public으로 설정.

보안그룹도 ec2를 위해 열어둔 것으로 설정.

eip도 자동할당을 한다.

 

이제 연결을 하여 PHP가 포함된 Apache Webserver를 설치한다.

sudo yum update -y
sudo amazon-linux-extras install -y lamp-mariadb10.2-php7.2 php7.2
sudo yum install -y httpd
sudo systemctl start httpd
sudo systemctl enable httpd

업데이트를 진행하고

php software를 설치하고

webserver를 설치하고 시작, 그리고 system boot마다 시작하는 코드를 입력한다.

 

그러면 /var/www에 html 폴더가 생긴다.

이 폴더에 있는 파일을 우리는 웹에서 볼 수 있다.

하지만 지금 이 폴더의 소유권은 ec2-user가 가지고 있지 않다.

소유권을 옮겨오자.

그리고 inc라는 /var/www의 하위 디렉터리를 만든다.

이 디렉토리도 소유권을 옮겨오자.

그리고 dbinfo.inc파일을 inc 디렉터리에서 작성한다.

<?php
define('DB_SERVER', 'endpoint');
define('DB_USERNAME', 'tutorial_user');
define('DB_PASSWORD', 'master password');
define('DB_DATABASE', 'sample');
?>

위의 엔드포인트, tutorial_user 등에 자신의 환경에 맞게 입력한다.

/var/www/html에 SamplePage.php를 만든다.

아래의 코드를 이용하자.

출처-

https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/CHAP_Tutorials.WebServerDB.CreateWebServer.html

<?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) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
         NAME VARCHAR(45),
         ADDRESS VARCHAR(90)
       )";

     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;
}
?>

7. 탄력적 ip를 이용하여 SamplePage.php에 연결

이름과 주소를 입력해보자.

Lambda는 AWS의 서버리스 서비스이다.

처음에는 Blue print의 hello-world-python을 사용해보고,

그다음에는 palindrome을 판별해주는 node.js코드를 작성하여 lambda를 사용해보자.

 

Blue print의 hello-world-python 이용한 Lambda사용

1. Blueprint에서 hello-world-python선택

그리고 밑에 있는 파이썬 코드는 그대로 두고 함수를 생성한다.

그럼

이렇게 lambda가 생긴다.

이러한 lambda는 test를 해볼 수 있다.

 

2. Lambda test하기

test 메뉴에 들어가 input으로 들어갈 테스트 이벤트를 작성한다.

오른쪽 하단의 주황색 테스트 버튼을 누르면 실행 결과가 나오며, output을 볼 수 있다.

Lambda 코드를 바꿔서 실행해보자.

코드를 위와 같이 바꾸고, test 옆의 Deploy를 하고 저장을 한다.

test를 하면 output은 다음과 같다.

 

Palindrome을 판별해주는 node.js코드를 작성하여 lambda를 사용

(Palindrome은 앞으로 읽어도 뒤로 읽어도 같은 단어를 말한다.)

(ex.racecar)

우리는 lambda와 API gateway를 사용할 것이다.

 

1. Lambda 함수 생성

2. index.js 수정

exports.handler = async (event, context, callback) => {
 const string = event.key1;
 const reverse = string.split('').reverse().join('');
 const isPalindrome = (string == reverse);
 const result = isPalindrome ? `${string} is a palindrome` : `${string} is not a palindrome`;
 
 return result;
};

 

위와 같이 코드를 바꾸고, test에 값을 넣어보자.

내가 기대한 output은 racecar is a palindrome이다.

결과도 잘 나왔다.

그럼 이제 API Gateway로 가보자.

 

3. API Gateway 만들기

REST API를 구축한다.

설정을 위와 같이하고 API를 생성한다.

메서드에서 GET을 만들고 아까 만든 Palindrome Lambda함수를 설정한다.

그럼 다음과 같이 실행 과정을 도식화로 보여준다.

통합 요청을 눌러 URL에서 어떤 필드의 값을 Lambda로 전달할지 설정한다.

매핑 템플릿에서 URL?string=Value을 입력하면 Value를 Lambda로 전달하도록 설정.

근데 string : ~~~ 로 Lambda에 전달되기 때문에, Lambda코드를 살짝 수정한다.

key1에서 string으로 변경했다.

이제 API를 배포한다.

이 과정을 거치면 나오는 url을 통해 Lambda를 트리거할 수 있다.

url 뒤에 값을 붙이지 않아 string이 빈 채로 나왔다.

그럼 값을 넣어보자.

잘 실행된다. 끝

서버리스는 무엇인가?

1. 사용량에 따라 백엔드 서비스를 제공하는 방법

2. 물리적 서버는 사용되나 개발자는 서버를 알 필요가 없음(존재를 모르고 개발)

(EB와 비슷하나, EB는 EC2로 계속 서버가 돌아가고 있고, Serverless는 트래픽이 있을 때만 서버 생성 및 운영) 

3. 기존의 클라우드 컴퓨팅보다 더 비용절감 가능

(기존의 클라우드 컴퓨팅은 EC2 1대라는 단위가 있고, 이것을 기준으로 과금되는 단위가 올라가지만, 서버리스의 경우 EC2의 단위와 상관없이 백엔드 서비스 사용량만 비용이 청구됨.)

4. 운영상 책임을 클라우드로 전환 -> 민첩성과 혁신을 높이는 클라우드의 네이티브 아키텍처 (serverless가 알아서 서버 용량을 조절)

5. 거의 모든 application, 백엔드 서비스 구축 가능

6. 고가용성(서비스중단x) 실행/확장에 필요한 사항이 자동으로 처리됨

7. BaaS(Back-end as a Service) + FaaS(Function as a service)

 

BaaS

1. 단일 웹페이지나 모바일 앱 기반의 서비스에서 필요한 서버 기능들을 사용하기 위해 이용하는 써드파티 애플리케이션이나 클라우드 서비스

2. 백앤드 기능들을 개발자가 직접 개발하지 않고, 클라우드 공급자가 제공하는 서비스를 이용해 쉽고 안정적으로 구현하는 것

3. MBaaS - Mobile Backend as a Service

 

Faas

1. 사용자가 쓸 기능을 함수 단위로 나누어 구현하고 이를 서비스하는 형태

2. event-driven 구조 구현에 적합

3. 사용자가 원하는 기능을 미리 작성해놓고, 특정 이벤트(ex. Http Request, API 호출, 특정 조건 등)에 의해 실행됨

4. AWS Lambda, Azure Function, Google Cloud Function

 

왜 서버리스인가?

1. 민첩성, 낮은 비용으로 최신 application 개발

2. 개발자는 개발에 집중 가능

 

AWS의 서버리스 플랫폼

1. Serverless application 구축/실행을 위한 완전 관리형 서비스 제공

2. 백엔드 구성 요소 프로비저닝(웹서버 + DB 서버), 애플리케이션 내결함성/가용성(Request의 처리를 위한 구성 요소의 증가 및 감소)에 대해 고려하지 않아도 됨

Computing - Lambda

API Proxy - API Gateway

 

서버리스의 이점

1. 낮은 비용 -종량제 요금

2. 서버 관리 불필요, 생성 시에도 관리 X

3. 유연한 규모 조정 - 간편한 확장성

4. 자동화된 고가용성

5. 빠른 개발 - 복잡한 배포 과정, 버그 수정 대신 필요에 따라 코드 추가/수정

6. 함수 단위 개발(Micro Service Architecture) - 서비스를 더 빠르게 출시(민첩, 혁신 up)

 

서버리스의 제약 및 고려 사항

1. 빠른 응답이 필요한 제품의 경우 - 함수가 호출되기 위해 컨테이너가 실행되는 대기 시간을 고려해야함(콜드 스타트)

2. 무상태(stateless)적인 기능으로 구현됨(이전 데이터는 모름) - 변수, 데이터 공유 불가, 로컬스토리지 액세스 불가

3. 서비스 제공자의 제한 사항을 수용해야함. - 용량이 초과된다면 기능을 나누어 구현해야 함

(너무 큰 용량이면 위의 콜드 스타트 문제가 심해짐)

 

 

서버리스 이용 사례

- Lambda, API Gateway, S3, Dynamo DB 사용 사례

1. S3에 날씨 앱 프론트앤드 코드 배포

2. 유저가 지역 날씨정보를 얻기 위해서 프런트 앤드에서 클릭

3. API Gateway에서 요청을 적절한 Lambda로 보냄

4. Lambda에 업로드된 코드가 실행되고, DynamoDB에서 지역 날씨정보를 가져와 사용자에게 날씨 정보를 전송

 

클라우드 컴퓨팅의 진화

1. on-premise

2. IaaS

3. PaaS

4. SaaS

5. Serverless Architecture - SaaS 애플리케이션을 보다 효율적으로 구축하고 운영할 수 있도록 돕는 구조.

 

ElasticBeanstalk를 통해 정적 웹을 배포해보자.

php를 사용할 것이며, php코드는 아마존 학습서에 있는 내용을 사용할 것이다.

 

1. ElasticBeanstalk 웹앱 생성

ElasticBeanstalk 대시보드에서 Create Application클릭

학습서에는 플랫폼을 php7.4로 하라고 했지만, 위의 8.0도 문제가 없어 그냥 진행한다.

그리고 Sample Application을 선택하고 애플리케이션 생성을 누른다.

 

2. 기다리기

이런 식으로 배포에 필요한 환경이 순차적으로 만들어진다.

좀만 기다리면

이렇게 완료된다.

 

왼쪽 위에 있던 url에 들어가면 샘플페이지가 나온다.

 

3. php 파일 업로드 및 배포

학습서에 샘플로 환경과 index.php 파일을 올려놓았는데 이것을 사용할 것이다.

샘플로 들어있는 파일은 위에서 보여준 샘플페이지와 같다.

지금 올린 php파일과 원래 있던 샘플페이지가 같아서, 제대로 올라갔는지 모르겠다.

php 파일을 고쳐서 올려보자.

외국인과 처음 만날때 하는 말 국룰

Congratulations가 Hello! nice to meet you!로 바뀌었다.

 

 

+ Recent posts