本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
CLI 教程:部署 Tier and Tie WordPress 网站
本节介绍如何使用 AMS CLI 将高可用性 (HA) WordPress 站点部署到 AMS 环境中。这组说明包括创建必要的 WordPress CodeDeploy兼容软件包(例如 zip)文件的示例。
注意
本部署演练专为在 AMZN Linux 环境中使用而设计。
基本变量参数标注为replaceable;但是,您可能需要修改其他参数以适应您的情况。
任务和所需任务摘要 RFCs:
创建基础架构:
创建负载均衡器
创建 Auto Scaling 组并将其绑定到负载均衡器
为 CodeDeploy 应用程序创建 S3 存储桶
创建 WordPress 应用程序包(不需要 RFC)
使用以下命令部署 WordPress 应用程序包 CodeDeploy:
创建 CodeDeploy 应用程序
创建 CodeDeploy 部署组
将您的 WordPress 应用程序包上传到 S3 存储桶(不需要 RFC)
部署 CodeDeploy 应用程序
验证部署
拆除部署
在经过身份验证的账户中,按照命令行中的所有步骤进行操作。
使用 CLI 创建 RFC
有关创建的详细信息 RFCs,请参阅创建 RFCs;有关常见 RFC 参数的说明,请参阅 RFC 常用参数。
为创建 WordPress 应用程序包 CodeDeploy
本节提供了创建应用程序部署包的示例。
下载 WordPress、解压缩文件并创建. /scripts 目录。
Linux 命令:
wget https://github.com/WordPress/WordPress/archive/master.zipWindows:粘贴
https://github.com/WordPress/WordPress/archive/master.zip到浏览器窗口并下载 zip 文件。创建用于组装软件包的临时目录。
Linux:
mkdir /tmp/WordPressWindows:创建一个 “WordPress” 目录,稍后将使用该目录路径。
将 WordPress 源代码解压缩到 “WordPress” 目录并创建一个。 /scripts 目录。
Linux:
unzip master.zip -d /tmp/WordPress_Temp cp -paf /tmp/WordPress_Temp/WordPress-master/* /tmp/WordPress rm -rf /tmp/WordPress_Temp rm -f master cd /tmp/WordPress mkdir scriptsWindows:转到你创建的 “WordPress” 目录并在那里创建一个 “脚本” 目录。
如果您在 Windows 环境中,请务必将脚本文件的中断类型设置为 Unix (LF)。在 Notepad ++ 中,这是窗口右下角的一个选项。
在 WordPress 目录中创建 CodeDeploy appsec.yml 文件(如果复制示例,请检查缩进,每个空格都很重要)。重要:确保将 WordPress 文件(在本例中为 WordPress 目录中)复制到预期目标 (/var/www/html/WordPress) 的 “源” 路径是正确的。在示例中,appsec.yml 文件位于文件所在的目录中,因此只需要使用 “/”。 WordPress 另外,即使你在 Auto Scaling 组中使用了 RHEL AMI,也要保留 “操作系统:linux” 一行不变。appspec.yml 文件示例:
version: 0.0 os: linux files: - source: / destination: /var/www/html/WordPress hooks: BeforeInstall: - location: scripts/install_dependencies.sh timeout: 300 runas: root AfterInstall: - location: scripts/config_wordpress.sh timeout: 300 runas: root ApplicationStart: - location: scripts/start_server.sh timeout: 300 runas: root ApplicationStop: - location: scripts/stop_server.sh timeout: 300 runas: root-
在中创建 bash 文件脚本。 WordPress /scripts 目录。
首先,
config_wordpress.sh使用以下内容创建(如果您愿意,可以直接编辑 wp-config.php 文件)。注意
DBName替换为 HA 堆栈 RFC 中给出的值(例如,wordpress)。DB_MasterUsername替换为 HA 堆栈 RFC 中给出的MasterUsername值(例如,admin)。DB_MasterUserPassword替换为 HA 堆栈 RFC 中给出的MasterUserPassword值(例如,p4ssw0rd)。在 HA 堆栈 RFC 的执行输出中替换
DB_ENDPOINT为终端节点 DNS 名称(例如srt1cz23n45sfg.clgvd67uvydk.us-east-1.rds.amazonaws.com)。你可以通过GetRfc操作(CLI:get-rfc--rfc-id RFC_ID)或者在你之前提交的 HA Stack RFC 的 AMS 控制台 RFC 详情页面中找到它。#!/bin/bash chmod -R 755 /var/www/html/WordPress cp /var/www/html/WordPress/wp-config-sample.php /var/www/html/WordPress/wp-config.php cd /var/www/html/WordPress sed -i "s/database_name_here/DBName/g" wp-config.php sed -i "s/username_here/DB_MasterUsername/g" wp-config.php sed -i "s/password_here/DB_MasterUserPassword/g" wp-config.php sed -i "s/localhost/DB_ENDPOINT/g" wp-config.php 在同一个目录中创建
install_dependencies.sh包含以下内容的内容:#!/bin/bash yum install -y php yum install -y php-mysql yum install -y mysql service httpd restart注意
HTTPS 是在启动时作为用户数据的一部分安装的,以便运行状况检查从一开始就起作用。
在同一个目录中创建
start_server.sh包含以下内容的内容:对于亚马逊 Linux 实例,请使用以下命令:
#!/bin/bash service httpd start对于 RHEL 实例,请使用以下命令(额外的命令是允许 SELINUX 接受的策略): WordPress
#!/bin/bash setsebool -P httpd_can_network_connect_db 1 setsebool -P httpd_can_network_connect 1 chcon -t httpd_sys_rw_content_t /var/www/html/WordPress/wp-content -R restorecon -Rv /var/www/html service httpd start
在同一个目录中创建
stop_server.sh包含以下内容的内容:#!/bin/bash service httpd stop创建 zip 捆绑包。
Linux:
$ cd /tmp/WordPress $ zip -r wordpress.zip .Windows:前往 “WordPress” 目录选择所有文件并创建一个 zip 文件,一定要将其命名为 wordpress.zip。
使用部署 WordPress 应用程序捆绑包 CodeDeploy
CodeDeploy 是一项 AWS 部署服务,可自动将应用程序部署到 Amazon EC2 实例。该过程的这一部分包括创建 CodeDeploy 应用程序、创建 CodeDeploy 部署组,然后使用部署应用程序 CodeDeploy。
创建 CodeDeploy 应用程序
CodeDeploy 应用程序只是 AWS CodeDeploy 使用的名称或容器,用于确保在部署期间引用正确的修订版、部署配置和部署组。在本例中,部署配置就是您之前创建的 WordPress 捆绑包。
所需数据:
VpcId:您正在使用的 VPC,应与之前使用的 VPC 相同。CodeDeployApplicationName: 账户中必须是唯一的。查看 CodeDeploy 控制台以检查现有的应用程序名称。ChangeTypeIdandChangeTypeVersion:本演练的更改类型 ID 是ct-0ah3gwb9seqk2,要找出最新版本,请运行以下命令:aws amscm list-change-type-version-summaries --filter Attribute=ChangeTypeId,Value=ct-0ah3gwb9seqk2
将 CodeDeploy 应用程序 CT 的执行参数 JSON 架构输出到当前文件夹中的一个文件中;示例将其命名为 Create CDApp params.json。
aws amscm get-change-type-version --change-type-id "ct-0ah3gwb9seqk2" --query "ChangeTypeVersion.ExecutionInputSchema" --output text > CreateCDAppParams.json按如下方式修改和保存 JSON 文件;您可以删除和替换其中的内容。
{ "Description": "Create WordPress CodeDeploy App", "VpcId": "VPC_ID", "StackTemplateId": "stm-sft6rv00000000000", "Name": "WordPressCDApp", "TimeoutInMinutes": 60, "Parameters": { "CodeDeployApplicationName": "WordPressCDApp" } }将的 JSON 模板输出 CreateRfc 到当前文件夹中的一个文件中;示例将其命名为 Create CDApp rfc.json。
aws amscm create-rfc --generate-cli-skeleton > CreateCDAppRfc.json按如下方式修改和保存 JSON 文件;您可以删除和替换其中的内容。请注意,
RequestedStartTime和现在RequestedEndTime是可选的;排除它们会导致 RFC 在获得批准后立即执行(这通常是自动发生的)。要提交 “计划的” RFC,请添加这些值。{ "ChangeTypeVersion": "1.0", "ChangeTypeId": "ct-0ah3gwb9seqk2", "Title": "CD-App-For-WP-Stack-RFC" }创建 RFC,指定创建 CDApp Rfc 文件和执行参数文件:
aws amscm create-rfc --cli-input-json file://CreateCDAppRfc.json --execution-parameters file://CreateCDAppParams.json您将在响应中收到新 RFC 的 RFC ID。保存 ID 以供后续步骤使用。
提交 RFC:
aws amscm submit-rfc --rfc-idRFC_ID如果 RFC 成功,则不会收到任何输出。
提交 RFC:
aws amscm get-rfc --rfc-idRFC_ID
创建 CodeDeploy 部署组
创建 CodeDeploy 部署组。
CodeDeploy 部署组定义了一组以部署为目标的单个实例。
所需数据:
VpcId:您正在使用的 VPC,应与之前使用的 VPC 相同。CodeDeployApplicationName:使用您之前创建的值。CodeDeployAutoScalingGroups:使用您之前创建的 Auto Scaling 组的名称。CodeDeployDeploymentGroupName:部署组的名称。此名称对于与部署组关联的每个应用程序来说必须是唯一的。CodeDeployServiceRoleArn:使用示例中给出的公式。ChangeTypeIdandChangeTypeVersion:本演练的更改类型 ID 是ct-2gd0u847qd9d2,要找出最新版本,请运行以下命令:aws amscm list-change-type-version-summaries --filter Attribute=ChangeTypeId,Value=ct-2gd0u847qd9d2
将执行参数 JSON 架构输出到当前文件夹中的一个文件中;示例将其命名为 Cre CDDep GroupParams ate.json。
aws amscm get-change-type-version --change-type-id "ct-2gd0u847qd9d2" --query "ChangeTypeVersion.ExecutionInputSchema" --output text > CreateCDDepGroupParams.json按如下方式修改和保存 JSON 文件;您可以删除和替换其中的内容。
{ "Description": "CreateWPCDDeploymentGroup", "VpcId": "VPC_ID", "StackTemplateId": "stm-sp9lrk00000000000", "Name": "WordPressCDAppGroup", "TimeoutInMinutes": 60, "Parameters": { "CodeDeployApplicationName": "WordPressCDApp", "CodeDeployAutoScalingGroups": ["ASG_NAME"], "CodeDeployDeploymentConfigName": "CodeDeployDefault.HalfAtATime", "CodeDeployDeploymentGroupName": "UNIQUE_CDDepGroupNAME", "CodeDeployServiceRoleArn": "arn:aws:iam::ACCOUNT_ID:role/aws-codedeploy-role" } }将的 JSON 模板输出 CreateRfc 到当前文件夹中的一个文件中;示例将其命名为 Cre CDDep GroupRfc ate.json。
aws amscm create-rfc --generate-cli-skeleton > CreateCDDepGroupRfc.json按如下方式修改和保存 JSON 文件;您可以删除和替换其中的内容。请注意,
RequestedStartTime和现在RequestedEndTime是可选的;排除它们会导致 RFC 在获得批准后立即执行(这通常是自动发生的)。要提交 “计划的” RFC,请添加这些值。{ "ChangeTypeVersion": "1.0", "ChangeTypeId": "ct-2gd0u847qd9d2", "Title": "CD-Dep-Group-For-WP-Stack-RFC" }创建 RFC,指定创建CDDepGroupRfc 文件和执行参数文件:
aws amscm create-rfc --cli-input-json file://CreateCDDepGroupRfc.json --execution-parameters file://CreateCDDepGroupParams.json您将在响应中收到新 RFC 的 RFC ID。保存 ID 以供后续步骤使用。
提交 RFC:
aws amscm submit-rfc --rfc-idRFC_ID如果 RFC 成功,则不会收到任何输出。
检查 RFC 状态:
aws amscm get-rfc --rfc-idRFC_ID
上传 WordPress 应用程序
您可以自动访问自己创建的任何 S3 存储桶实例。您可以通过 Bastions(请参阅访问实例)或 S3 控制台访问它,然后上传 CodeDeploy 捆绑包。要继续部署堆栈,捆绑包需要准备就绪。该示例使用先前创建的存储桶名称。
aws s3 cp wordpress/wordpress.zip s3://ACCOUNT_ID-codedeploy-bundles/
使用部署 WordPress 应用程序 CodeDeploy
部署 CodeDeploy 应用程序。
拥有 CodeDeploy 应用程序包和部署组后,使用此 RFC 部署应用程序。
所需数据:
VPC-ID:您正在使用的 VPC,应与之前使用的 VPC 相同。CodeDeployApplicationName:使用您之前创建的 CodeDeploy 应用程序的名称。CodeDeployDeploymentGroupName:使用您之前创建的 CodeDeploy 部署组的名称。S3Location(您上传应用程序包的位置):S3Bucket: 您之前创建的,S3BundleType以及S3Key:您放在 S3 商店中的捆绑包的类型和名称。 BucketNameChangeTypeIdandChangeTypeVersion:本演练的更改类型 ID 是ct-2edc3sd1sqmrb,要找出最新版本,请运行以下命令:aws amscm list-change-type-version-summaries --filter Attribute=ChangeTypeId,Value=ct-2edc3sd1sqmrb
将 CodeDeploy 应用程序部署 CT 的执行参数 JSON 架构输出到当前文件夹中的一个文件中;示例将其命名为 Deploy P CDApp arams.json。
aws amscm get-change-type-version --change-type-id "ct-2edc3sd1sqmrb" --query "ChangeTypeVersion.ExecutionInputSchema" --output text > DeployCDAppParams.json按如下方式修改 JSON 文件;您可以删除和替换其中的内容。对于
S3BucketBucketName,请使用您之前创建的。{ "Description": "Deploy WordPress CodeDeploy Application", "VpcId": "VPC_ID", "Name": "WP CodeDeploy Deployment Group", "TimeoutInMinutes": 60, "Parameters": { "CodeDeployApplicationName": "WordPressCDApp", "CodeDeployDeploymentGroupName": "WordPressCDDepGroup", "CodeDeployIgnoreApplicationStopFailures":false, "CodeDeployRevision": { "RevisionType": "S3", "S3Location": { "S3Bucket": "ACCOUNT_ID.BUCKET_NAME", "S3BundleType": "zip", "S3Key": "wordpress.zip" } } } }将的 JSON 模板输出 CreateRfc 到当前文件夹中的一个文件中;示例将其命名为 Deploy CDApp rfc.json:
aws amscm create-rfc --generate-cli-skeleton > DeployCDAppRfc.json修改并保存 Deplo CDApp y rfc.json 文件;您可以删除和替换其中的内容。
{ "ChangeTypeVersion": "1.0", "ChangeTypeId": "ct-2edc3sd1sqmrb", "Title": "CD-Deploy-For-WP-Stack-RFC", "RequestedStartTime": "2017-04-28T22:45:00Z", "RequestedEndTime": "2017-04-28T22:45:00Z" }创建 RFC,指定执行参数文件和 Deploy CDApp Rfc 文件:
aws amscm create-rfc --cli-input-json file://DeployCDAppRfc.json --execution-parameters file://DeployCDAppParams.json您会在回复 RfcId 中收到新 RFC 的信息。保存 ID 以供后续步骤使用。
提交 RFC:
aws amscm submit-rfc --rfc-idRFC_ID如果 RFC 成功,则不会收到任何输出。
验证应用程序部署
导航到先前创建的负载均衡器的终端节点 (ELB CName), WordPress 部署的路径为:/WordPress。例如:
http://stack-ID-FOR-ELB.us-east-1.elb.amazonaws.com/WordPress
拆除应用程序部署
要取消部署,您需要提交针对 RDS 数据库堆栈、应用程序负载均衡器、Auto Scaling 组、S3 存储桶以及 Code Deploy 应用程序和组(总共六个)的删除堆栈 C RFCs T。此外,您可以提交服务请求以删除 RDS 快照(它们将在十天后自动删除,但在此期间确实会花费少量费用)。收集所有 IDs 人的堆栈,然后按照以下步骤操作。
本演练提供了使用 AMS 控制台删除 S3 堆栈的示例;此过程适用于使用 AMS 控制台删除任何堆栈。
注意
如果删除 S3 存储桶,则必须先将其中的对象清空。
所需数据:
StackId: 要使用的堆栈。你可以通过查看 AMS Console Stack s 页面来找到它,该页面可通过左侧导航栏中的链接获得。使用 AMS SKMS API/CLI 运行有关 AMS SKMS API 参考,请参阅 AWS Artifact 控制台中的 “报告” 选项卡。操作(在 CLI 中list-stack-summaries)。本演练的更改类型 ID 为
ct-0q0bic0ywqk6c,版本为 “1.0”,要查找最新版本,请运行以下命令:aws amscm list-change-type-version-summaries --filter Attribute=ChangeTypeId,Value=ct-0q0bic0ywqk6c
内联创建:
使用内联提供的执行参数发出 create RFC 命令(内联提供执行参数时使用转义引号)。E
aws amscm create-rfc --change-type-id "ct-0q0bic0ywqk6c" --change-type-version "1.0" --title "Delete My Stack" --execution-parameters "{\"StackId\":\"STACK_ID\"}"使用创建 RFC 操作中返回的 RFC 编号提交 RFC。在提交之前,RFC 仍处于该
Editing状态,不会被付诸行动。aws amscm submit-rfc --rfc-idRFC_ID监控 RFC 状态并查看执行输出:
aws amscm get-rfc --rfc-idRFC_ID
模板创建:
将 RFC 模板输出到当前文件夹中的一个文件中;示例将其命名为 DeleteStackRfc .json:
aws amscm create-rfc --generate-cli-skeleton > DeleteStackRfc.json修改并保存 DeleteStackRfc .json 文件。由于删除堆栈只有一个执行参数,因此执行参数可以在 DeleteStackRfc .json 文件本身中(无需创建带有执行参数的单独的 JSON 文件)。
ExecutionParameters JSON 扩展中的内部引号必须使用反斜杠 (\) 进行转义。没有开始和结束时间的示例:
{ "ChangeTypeVersion": "1.0", "ChangeTypeId": "ct-0q0bic0ywqk6c", "Title": "Delete-My-Stack-RFC" "ExecutionParameters": "{ \"StackId\":\"STACK_ID\"}" }创建 RFC:
aws amscm create-rfc --cli-input-json file://DeleteStackRfc.json您会在回复 RfcId 中收到新 RFC 的信息。例如:
{ "RfcId": "daaa1867-ffc5-1473-192a-842f6b326102" }保存 ID 以供后续步骤使用。
提交 RFC:
aws amscm submit-rfc --rfc-idRFC_ID如果 RFC 成功,则不会在命令行收到任何确认。
要监控请求的状态并查看执行输出,请执行以下操作:
aws amscm get-rfc --rfc-idRFC_ID--query "Rfc.{Status:Status.Name,Exec:ExecutionOutput}" --output table