CLI 教程:部署 Tier and Tie WordPress 网站 - AMS 高级应用程序开发者指南

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

CLI 教程:部署 Tier and Tie WordPress 网站

本节介绍如何使用 AMS CLI 将高可用性 (HA) WordPress 站点部署到 AMS 环境中。这组说明包括创建必要的 WordPress CodeDeploy兼容软件包(例如 zip)文件的示例。

注意

本部署演练专为在 AMZN Linux 环境中使用而设计。

基本变量参数标注为replaceable;但是,您可能需要修改其他参数以适应您的情况。

任务和所需任务摘要 RFCs:

  1. 创建基础架构:

    1. 创建 RDS 堆栈 (CLI)

    2. 创建负载均衡器

    3. 创建 Auto Scaling 组并将其绑定到负载均衡器

    4. 为 CodeDeploy 应用程序创建 S3 存储桶

  2. 创建 WordPress 应用程序包(不需要 RFC)

  3. 使用以下命令部署 WordPress 应用程序包 CodeDeploy:

    1. 创建 CodeDeploy 应用程序

    2. 创建 CodeDeploy 部署组

    3. 将您的 WordPress 应用程序包上传到 S3 存储桶(不需要 RFC)

    4. 部署 CodeDeploy 应用程序

  4. 验证部署

  5. 拆除部署

在经过身份验证的账户中,按照命令行中的所有步骤进行操作。

使用 CLI 创建 RFC

有关创建的详细信息 RFCs,请参阅创建 RFCs;有关常见 RFC 参数的说明,请参阅 RFC 常用参数。

为创建 WordPress 应用程序包 CodeDeploy

本节提供了创建应用程序部署包的示例。

  1. 下载 WordPress、解压缩文件并创建. /scripts 目录。

    Linux 命令:

    wget https://github.com/WordPress/WordPress/archive/master.zip

    Windows:粘贴https://github.com/WordPress/WordPress/archive/master.zip到浏览器窗口并下载 zip 文件。

    创建用于组装软件包的临时目录。

    Linux:

    mkdir /tmp/WordPress

    Windows:创建一个 “WordPress” 目录,稍后将使用该目录路径。

  2. 将 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 scripts

    Windows:转到你创建的 “WordPress” 目录并在那里创建一个 “脚本” 目录。

    如果您在 Windows 环境中,请务必将脚本文件的中断类型设置为 Unix (LF)。在 Notepad ++ 中,这是窗口右下角的一个选项。

  3. 在 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
  4. 在中创建 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
  5. 在同一个目录中创建install_dependencies.sh包含以下内容的内容:

    #!/bin/bash yum install -y php yum install -y php-mysql yum install -y mysql service httpd restart
    注意

    HTTPS 是在启动时作为用户数据的一部分安装的,以便运行状况检查从一开始就起作用。

  6. 在同一个目录中创建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
  7. 在同一个目录中创建stop_server.sh包含以下内容的内容:

    #!/bin/bash service httpd stop
  8. 创建 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
  1. 将 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
  2. 按如下方式修改和保存 JSON 文件;您可以删除和替换其中的内容。

    { "Description": "Create WordPress CodeDeploy App", "VpcId": "VPC_ID", "StackTemplateId": "stm-sft6rv00000000000", "Name": "WordPressCDApp", "TimeoutInMinutes": 60, "Parameters": { "CodeDeployApplicationName": "WordPressCDApp" } }
  3. 将的 JSON 模板输出 CreateRfc 到当前文件夹中的一个文件中;示例将其命名为 Create CDApp rfc.json。

    aws amscm create-rfc --generate-cli-skeleton > CreateCDAppRfc.json
  4. 按如下方式修改和保存 JSON 文件;您可以删除和替换其中的内容。请注意,RequestedStartTime和现在RequestedEndTime是可选的;排除它们会导致 RFC 在获得批准后立即执行(这通常是自动发生的)。要提交 “计划的” RFC,请添加这些值。

    { "ChangeTypeVersion": "1.0", "ChangeTypeId": "ct-0ah3gwb9seqk2", "Title": "CD-App-For-WP-Stack-RFC" }
  5. 创建 RFC,指定创建 CDApp Rfc 文件和执行参数文件:

    aws amscm create-rfc --cli-input-json file://CreateCDAppRfc.json --execution-parameters file://CreateCDAppParams.json

    您将在响应中收到新 RFC 的 RFC ID。保存 ID 以供后续步骤使用。

  6. 提交 RFC:

    aws amscm submit-rfc --rfc-id RFC_ID

    如果 RFC 成功,则不会收到任何输出。

  7. 提交 RFC:

    aws amscm get-rfc --rfc-id RFC_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
  1. 将执行参数 JSON 架构输出到当前文件夹中的一个文件中;示例将其命名为 Cre CDDep GroupParams ate.json。

    aws amscm get-change-type-version --change-type-id "ct-2gd0u847qd9d2" --query "ChangeTypeVersion.ExecutionInputSchema" --output text > CreateCDDepGroupParams.json
  2. 按如下方式修改和保存 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" } }
  3. 将的 JSON 模板输出 CreateRfc 到当前文件夹中的一个文件中;示例将其命名为 Cre CDDep GroupRfc ate.json。

    aws amscm create-rfc --generate-cli-skeleton > CreateCDDepGroupRfc.json
  4. 按如下方式修改和保存 JSON 文件;您可以删除和替换其中的内容。请注意,RequestedStartTime和现在RequestedEndTime是可选的;排除它们会导致 RFC 在获得批准后立即执行(这通常是自动发生的)。要提交 “计划的” RFC,请添加这些值。

    { "ChangeTypeVersion": "1.0", "ChangeTypeId": "ct-2gd0u847qd9d2", "Title": "CD-Dep-Group-For-WP-Stack-RFC" }
  5. 创建 RFC,指定创建CDDepGroupRfc 文件和执行参数文件:

    aws amscm create-rfc --cli-input-json file://CreateCDDepGroupRfc.json --execution-parameters file://CreateCDDepGroupParams.json

    您将在响应中收到新 RFC 的 RFC ID。保存 ID 以供后续步骤使用。

  6. 提交 RFC:

    aws amscm submit-rfc --rfc-id RFC_ID

    如果 RFC 成功,则不会收到任何输出。

  7. 检查 RFC 状态:

    aws amscm get-rfc --rfc-id RFC_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 商店中的捆绑包的类型和名称。 BucketName

  • ChangeTypeIdandChangeTypeVersion:本演练的更改类型 ID 是ct-2edc3sd1sqmrb,要找出最新版本,请运行以下命令:

    aws amscm list-change-type-version-summaries --filter Attribute=ChangeTypeId,Value=ct-2edc3sd1sqmrb
  1. 将 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
  2. 按如下方式修改 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" } } } }
  3. 将的 JSON 模板输出 CreateRfc 到当前文件夹中的一个文件中;示例将其命名为 Deploy CDApp rfc.json:

    aws amscm create-rfc --generate-cli-skeleton > DeployCDAppRfc.json
  4. 修改并保存 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" }
  5. 创建 RFC,指定执行参数文件和 Deploy CDApp Rfc 文件:

    aws amscm create-rfc --cli-input-json file://DeployCDAppRfc.json --execution-parameters file://DeployCDAppParams.json

    您会在回复 RfcId 中收到新 RFC 的信息。保存 ID 以供后续步骤使用。

  6. 提交 RFC:

    aws amscm submit-rfc --rfc-id RFC_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-id RFC_ID
  • 监控 RFC 状态并查看执行输出:

    aws amscm get-rfc --rfc-id RFC_ID

模板创建

  1. 将 RFC 模板输出到当前文件夹中的一个文件中;示例将其命名为 DeleteStackRfc .json:

    aws amscm create-rfc --generate-cli-skeleton > DeleteStackRfc.json
  2. 修改并保存 DeleteStackRfc .json 文件。由于删除堆栈只有一个执行参数,因此执行参数可以在 DeleteStackRfc .json 文件本身中(无需创建带有执行参数的单独的 JSON 文件)。

    ExecutionParameters JSON 扩展中的内部引号必须使用反斜杠 (\) 进行转义。没有开始和结束时间的示例:

    { "ChangeTypeVersion": "1.0", "ChangeTypeId": "ct-0q0bic0ywqk6c", "Title": "Delete-My-Stack-RFC" "ExecutionParameters": "{ \"StackId\":\"STACK_ID\"}" }
  3. 创建 RFC:

    aws amscm create-rfc --cli-input-json file://DeleteStackRfc.json

    您会在回复 RfcId 中收到新 RFC 的信息。例如:

    { "RfcId": "daaa1867-ffc5-1473-192a-842f6b326102" }

    保存 ID 以供后续步骤使用。

  4. 提交 RFC:

    aws amscm submit-rfc --rfc-id RFC_ID

    如果 RFC 成功,则不会在命令行收到任何确认。

  5. 要监控请求的状态并查看执行输出,请执行以下操作:

    aws amscm get-rfc --rfc-id RFC_ID --query "Rfc.{Status:Status.Name,Exec:ExecutionOutput}" --output table