创建 EC2 实例并安装 Web 服务器 - Amazon Aurora
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

创建 EC2 实例并安装 Web 服务器

在此步中,创建连接到您在创建 Amazon Aurora 数据库集群中创建的 Amazon Aurora 数据库集群的 Web 服务器。

启动 EC2 实例

首先在您的 VPC 的公有子网中创建 Amazon EC2 实例。

启动 EC2 实例

  1. 登录 AWS 管理控制台并通过以下网址打开 Amazon EC2 控制台:https://console.amazonaws.cn/ec2/

  2. 选择 EC2 控制面板,然后选择启动实例,如下所示。

    
                                EC2 Dashboard
  3. 选择 Amazon Linux AMI,如下所示。

    
                                选择一个 Amazon 系统映像
    重要

    请勿选择 Amazon Linux 2 AMI,因为它没有此教程所需的软件包。

  4. 选择下面所示的 t2.small 实例类型,然后选择 Next: Configure Instance Details (下一步: 配置实例详细信息)

    
                                选择一个实例类型
  5. 在下面所示的 Configure Instance Details (配置实例详细信息) 页面上,设置以下值并将其他值保留为其默认值:

    
                                配置实例详细信息
  6. 选择 Next: Add Storage

  7. Add Storage (添加存储) 页面上,保留默认值并选择 Next: Add Tags (下一步: 添加标签)

  8. 在下面所示的 Add Tags (添加标签) 页面上,选择 Add Tag (添加标签),然后为 Key (密钥) 输入 Name,并为 Value (值) 输入 tutorial-web-server

    
                                Tag Instance
  9. 选择 Next: Configure Security Group

  10. 在下面所示的 Configure Security Group (配置安全组) 页面上,选择 Select an existing security group (选择一个现有的安全组)。然后选择一个现有的安全组,如在 为公共 Web 服务器创建 VPC 安全组中创建的 tutorial-securitygroup。确保您选择的安全组包括 Secure Shell (SSH) 和 HTTP 访问的入站规则。

    
                                配置安全组
  11. 选择 Review and Launch

  12. 在下面所示的 Review Instance Launch 页面上,确认您的设置,然后选择 Launch

    
                                核查实例启动
  13. 在下面所示的 Select an existing key pair or create a new key pair (选择现有密钥对或创建新密钥对) 页面上,选择 Create a new key pair (创建新密钥对),并将 Key pair name (密钥对名称) 设置为 tutorial-key-pair。选择 Download Key Pair,然后在您的本地计算机上保存密钥对文件。使用此密钥对文件连接到 EC2 实例。

    
                                选择“Existing Key Pair(现有密钥对)”或“Create a New Key Pair(创建新的密钥对)”
  14. 要启动 EC2 实例,请选择 Launch Instances。在下面所示的 Launch Status 页面上,记下新 EC2 实例的标识符,例如:i-0288d65fd4470b6a9

    
                                启动状态
  15. 选择 View Instances (查看实例) 来查找实例。

  16. 一直等到实例的 Instance Status (实例状态) 显示为 running (正在运行) 才能继续。

使用 PHP 安装 Apache Web 服务器

接着连接到 EC2 实例并安装 Web 服务器。

连接到 EC2 实例并安装带有 PHP 的 Apache Web 服务器

  1. 按照连接到您的 Linux 实例中的步骤连接到之前创建的 EC2 实例。

  2. 通过更新 EC2 实例上的软件,获取最新的错误修复和安全更新。要执行此操作,请使用以下命令。

    注意

    -y 选项安装更新时不提示确认。要在安装前检查更新,请忽略该选项。

    [ec2-user ~]$ sudo yum update -y
  3. 更新完成后,使用 yum install 命令安装带有 PHP 软件包的 Apache Web 服务器。此命令同时安装多个软件包和相关依赖项。

    [ec2-user ~]$ sudo yum install -y httpd24 php56 php56-mysqlnd

    如果您收到错误消息 No package package-name available,则表示实例不是使用 Amazon Linux AMI 启动的。您可能使用的是 Amazon Linux 2 AMI。您可以使用以下命令查看 Amazon Linux 的版本。

    cat /etc/system-release

    有关更多信息,请参阅更新实例软件

  4. 使用下面所示的命令启动 Web 服务器。

    [ec2-user ~]$ sudo service httpd start

    您可以测试 Web 服务器是否已正确安装和启动。为此,请在 Web 浏览器的地址栏中输入 EC2 实例的公有域名系统 (DNS) 名称,例如:http://ec2-42-8-168-21.us-west-1.compute.amazonaws.com。如果 Web 服务器正在运行,您将看到 Apache 测试页面。

    如果您没有看到 Apache 测试页面,请检查您在教程:创建 Amazon VPC 以用于数据库实例中创建的 VPC 安全组的入站规则。确保入站规则包含允许用于连接到 Web 服务器的 IP 地址进行 HTTP(端口 80)访问的规则。

    注意

    Apache 测试页面仅在文档根目录 /var/www/html 中无内容时才显示。将内容添加到文档根目录后,您的内容将显示在 EC2 实例的公有 DNS 地址中,而不显示在 Apache 测试页面。

  5. 使用 chkconfig 命令配置 Web 服务器以使其在每次系统启动时启动。

    [ec2-user ~]$ sudo chkconfig httpd on

要允许 ec2-user 在 Apache Web 服务器的默认根目录中管理文件,请修改 /var/www 目录的所有权和权限。在本教程中,您将一个名为 www 的组添加到 EC2 实例。然后为该组授予 /var/www 目录的所有权,并为该组添加写入权限。随后,该组的所有成员都能够为 Web 服务器添加、删除和修改文件。

设置 Apache Web 服务器的文件权限

  1. 使用以下命令将 www 组添加到 EC2 实例。

    [ec2-user ~]$ sudo groupadd www
  2. ec2-user 用户添加到 www 组。

    [ec2-user ~]$ sudo usermod -a -G www ec2-user
  3. 注销以刷新您的权限并包含新的 www 组。

    [ec2-user ~]$ exit
  4. 再重新登录并使用 www 命令验证 groups 组是否存在。

    [ec2-user ~]$ groups ec2-user wheel www
  5. www 目录的组所有权及其内容更改到 /var/www 组。

    [ec2-user ~]$ sudo chgrp -R www /var/www
  6. 更改 /var/www 及其子目录的目录权限,以添加组写入权限并设置未来创建的子目录上的组 ID。

    [ec2-user ~]$ sudo chmod 2775 /var/www [ec2-user ~]$ find /var/www -type d -exec sudo chmod 2775 {} +
  7. 递归地更改 /var/www 目录及其子目录中的文件的权限,以添加组写入权限。

    [ec2-user ~]$ find /var/www -type f -exec sudo chmod 0664 {} +

将您的 Apache Web 服务器连接到数据库实例

接着,将内容添加到连接到 Amazon Aurora 数据库集群的 Apache Web 服务器。

将内容添加到连接到数据库集群的 Apache Web 服务器

  1. 在仍连接到 EC2 实例时,将目录更改到 /var/www 并创建名为 inc 的新子目录。

    [ec2-user ~]$ cd /var/www [ec2-user ~]$ mkdir inc [ec2-user ~]$ cd inc
  2. 在名为 incdbinfo.inc 目录中新建文件,然后通过调用 nano(或您选择的编辑器)编辑文件。

    [ec2-user ~]$ >dbinfo.inc [ec2-user ~]$ nano dbinfo.inc
  3. 将以下内容添加到 dbinfo.inc 文件。在这里,db_instance_endpoint 是不带端口的数据库集群写入器终端节点master password数据库集群的主密码。

    注意

    我们建议将用户名和密码信息放在不属于 Web 服务器的文档根目录的文件夹中。这样做会减少您的安全信息被泄露的可能性。

    <?php define('DB_SERVER', 'db_cluster_writer_endpoint'); define('DB_USERNAME', 'tutorial_user'); define('DB_PASSWORD', 'master password'); define('DB_DATABASE', 'sample'); ?>
  4. 保存并关闭 dbinfo.inc 文件。

  5. 将目录更改为 /var/www/html

    [ec2-user ~]$ cd /var/www/html
  6. 在名为 htmlSamplePage.php 目录中新建文件,然后通过调用 nano (或您选择的编辑器) 编辑文件。

    [ec2-user ~]$ >SamplePage.php [ec2-user ~]$ nano SamplePage.php
  7. 将以下内容添加到 SamplePage.php 文件:

    注意

    我们建议将用户名和密码信息放在不属于 Web 服务器的文档根目录的文件夹中。这样做会减少您的安全信息被泄露的可能性。

    <?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; } ?>
  8. 保存并关闭 SamplePage.php 文件。

  9. 通过打开 Web 浏览器并浏览到 http://EC2 instance endpoint/SamplePage.php 来验证 Web 服务器是否已成功连接到数据库集群,例如:http://ec2-55-122-41-31.us-west-2.compute.amazonaws.com/SamplePage.php

您可以使用 SamplePage.php 将数据添加到数据库集群。您添加的数据之后将显示在该页面上。

要确保数据库集群尽可能安全,请验证 VPC 外部的源是否无法连接到数据库集群