自动化迁移步骤

概述

您正在帮助公司从数据中心迁移到AWS。在迁移过程中,通常需要一些重新配置步骤,从数据库端点或代理设置到程序包部署。这些步骤可能容易出错,而且很耗时,因此自动化它们对于扩展迁移是必要的。

您的挑战是使用AWS Sytems Manager在迁移的服务器上执行一些重新配置。

在这里输入答案

解决这个挑战

您的挑战是执行一些应用程序重新配置,以将Web服务器与应用程序数据库重新连接。

使用AWS Systems Manager,您应该能够在迁移的服务器上执行某些任务,而无需手动连接到该服务器。

完成挑战后,网站应显示答案。该网站地址为:http:// [您的ec2公共IP地址]

在您的实验室环境中,您会发现:

公开的EC2实例

/ var / www / html中的config.php文件,其中包含设置

MySQL RDS数据库

线索

罚分:8分

线索1:从哪里开始?

AWS Systems Manager包含多种功能。今天有趣的是Run Command和Parameter Store(可选)。

Run Command使您可以针对托管服务器运行文档。文档是运行管理任务(例如执行脚本,安装补丁或执行软件安装)的一种简单方法。文档可以是客户托管的,也可以是AWS托管的。看一下已经可用的文档。

参数存储是一种方便的键值存储,可以帮助您存储应用程序的设置,例如连接字符串,用户名或密码。

对于该解决方案,您应该运行两个脚本,一个用于在/ var / www / html文件夹中发现配置文件config.php的内容,第二个通过系统管理器来调整配置文件。请勿使用S3或CloudWatch解决此解决方案。

罚款:10分

线索2:使用SSM获取配置文件

让我们从获取当前配置文件开始

使用RunCommand,执行AWS-RunShellScript文档,您可以在实例上执行任意脚本:

从系统管理器菜单中选择运行命令

在运行命令屏幕上,按按钮运行命令

从文档列表中选择AWS-RunShellScript(您需要滚动页面)

在“命令参数”*文本上,将bash脚本复制粘贴到下面

#!/bin/bash

cat /var/www/html/config.php

然后,您可以创建您的自定义文档,或AWS-RunShellScript再次使用它来进行一些修改;在此示例中,我们使用了bash脚本。

在目标部分,手动选择实例,然后从列表中选择您的EC2实例

在输出部分,取消选中S3和CloudWatch Logs,运行命令后将显示输出

继续并按下运行按钮,这将执行脚本

脚本成功运行后,转到“目标和输出”部分,按链接,您将能够看到输出部分

转到输出部分并将其展开,在那里您可以看到连接字符串配置

您已准备好进行下一步。

罚则:12分

线索3:让我们明白这一点

完整答案

连接到实例“公共IP”以查看应用程序的当前状态。它应该返回该应用程序仍指向旧数据库。

使用AWS Systems Manager,您可以在托管实例上运行任意代码,而无需SSH访问。在我们的例子中,我们需要找出当前的配置文件并替换数据库连接字符串。RunCommand与AWS-RunShellScript文档一起使用并将参数设置为:

 #!/bin/bash

 cat /var/www/html/config.php

使用命令的输出,您应该看到当前的文件配置。请查看线索2,以获取逐步说明。

查看文件,您应该看到该变量$db_host = "onprem.legacy.local";需要修改。关于如何执行更改,您有很多选择,以下是两个选择:

首先,您可以再次使用AWS-RunShellScript文档执行sed来替换罪魁祸首字符串。以下一行命令将创建一个备份文件,并将当前的$ db_host替换为somedb.rds.amazonaws.com。

sed -i.bak -E 's/\$db_host = "(.*)";/\$db_host = "somedb.rds.amazonaws.com";/g' /var/www/html/config.php

需要通过使用正确的连接字符串替换“ somedb.rds.amazonaws.com”来修改以上脚本。要获得正确的连接字符串,请查看参数存储,这是系统管理器选项中的另一个输入菜单。

请参阅线索2,以获取有关如何运行Shell脚本命令的分步示例,您也应使用相同的步骤来运行上述命令。

(如果完成了选项1,则跳过此步骤)第二个选项是两个创建自定义文档,然后将其针对实例运行。该文档包含与选项一几乎相同的内容。

---

schemaVersion: '2.2'

description: >

  This document should solve the challenge

parameters:

  RDSEndpoint:

    type: String

    default: "someendpoint.rds.amazonaws.com"

    description: "RDS"

mainSteps:

- action: aws:runShellScript

  precondition:

    StringEquals:

      - platformType

      - Linux

  name: ReconfigureDBEndpoint

  inputs:

    runCommand:

    - "#!/bin/bash"

    - echo "ENDPOINT = {<!-- -->{RDSEndpoint}}"

    - sed -i.bak -E 's/\$db_host = "(.*)";/\$db_host = "{<!-- -->{RDSEndpoint}}";/g' /var/www/html/config.php

现在,您应该刷新实例网页以获取挑战的答案。实例页面将为http://[your ec2 public IP adress],您应该获得连接成功的消息以及挑战的答案。

上一篇:aws lambda 限额


下一篇:AWS DynamoDB实战之表的创建