AWS CodeDeploy 实验

AWS CodeDeploy 实验

背景

本笔记参考AWS峰会动手实验室Introduction to AWS CodeDeploy。

涵盖的内容包括:

验证是否已安装 CodeDeploy 代理。
配置要部署到 CodeDeploy 的应用程序源内容。
创建 Amazon S3 存储桶,然后将 WordPress 应用程序上传到该存储桶。
将 WordPress 应用程序部署到 Amazon EC2 实例。
监控 WordPress 应用程序部署。
更新 WordPress 应用程序,然后对其进行重新部署。

配置应用程序源的内容

通过这步,我们会:

配置要部署的源应用程序内容。
创建将在部署应用程序时运行的脚本。
创建 CodeDeploy AppSpec 文件。

下载workpress代码

wget https://s3-us-west-2.amazonaws.com/us-west-2-aws-training/courses/spl-82/v1.4.5.prod-2bbeba30/scripts/WordPress-master.zip
unzip WordPress-master.zip -d /tmp/WordPress_Temp
mkdir -p /tmp/WordPress

#将其解压后的内容复制到 /tmp/WordPress 目标文件夹中。
cp -paf /tmp/WordPress_Temp/WordPress-master/* /tmp/WordPress

#删除临时 /tmp/WordPress_Temp 文件夹和主文件。
rm -rf /tmp/WordPress_Temp
rm -f WordPress-master.zip

创建校本来运行应用程序

在 WordPress 源代码的副本中创建脚本目录。

mkdir -p /tmp/WordPress/scripts

通过运行以下命令创建 install_dependencies.sh 脚本:

nano /tmp/WordPress/scripts/install_dependencies.sh
#!/bin/bash
yum install -y httpd php mariadb-server php-mysqlnd

Ctrl+x然后键入y回车保存退出。

install_dependencies.sh 脚本将安装 Apache、MariaDB 和 PHP。它还会将 MySQL 支持添加到 PHP 中。

通过运行以下命令创建 start_server.sh 脚本:

nano /tmp/WordPress/scripts/start_server.sh
#!/bin/bash
service httpd start
service mariadb start

Ctrl+x然后键入y回车保存退出。

通过运行以下命令创建 stop_server.sh 脚本:

nano /tmp/WordPress/scripts/stop_server.sh
#!/bin/bash
isExistApp=`pgrep httpd`
if [[ -n  $isExistApp ]]; then
   service httpd stop
fi
isExistApp=`pgrep sql`
if [[ -n  $isExistApp ]]; then
    service mariadb stop
fi

通过运行以下命令创建 create_test_db.sh 脚本:

nano /tmp/WordPress/scripts/create_test_db.sh
#!/bin/bash
mysql -uroot <<CREATE_TEST_DB
CREATE DATABASE IF NOT EXISTS test;
CREATE_TEST_DB

通过运行以下命令创建 change_permissions.sh 脚本:

nano /tmp/WordPress/scripts/change_permissions.sh
#!/bin/bash
chmod -R 777 /var/www/html/WordPress

使所有脚本都可执行,并列出脚本。

chmod +x /tmp/WordPress/scripts/*
ls -la /tmp/WordPress/scripts

创建 CodeDeploy AppSpec 文件

AWS CodeDeploy 将使用 appspec.yml 文件执行以下操作:

  • 将应用程序修订中的源文件映射到目标 Amazon EC2 实例上的目标。
  • 指定已部署文件的自定义权限。
  • 指定部署期间要在目标 Amazon EC2 实例上运行的脚本。

AppSpec 文件必须命名为 appspec.yml。它必须放置在应用程序源代码的根目录中。在本实验中,根目录为 /tmp/WordPress

AppSpec 文件对于 AWS CodeDeploy 来说是唯一的。它定义了您希望 AWS CodeDeploy 执行的部署操作。您可以将可部署的内容和 AppSpec 文件捆绑成一个归档文件,然后将其上传到 Amazon S3 存储桶或 GitHub 存储库。此归档文件称为应用程序修订(或简称修订)。

/tmp/WordPress 中创建特定于应用程序的文件。

nano /tmp/WordPress/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/change_permissions.sh
      timeout: 300
      runas: root
  ApplicationStart:
    - location: scripts/start_server.sh
    - location: scripts/create_test_db.sh
      timeout: 300
      runas: root
  ApplicationStop:
    - location: scripts/stop_server.sh
      timeout: 300
      runas: root

该 appspec.yaml 文件中,可以看到之前创建的5个脚本。这些脚本将在部署应用程序时运行。

部署 WordPress 应用程序

创建 CodeDeploy 应用程序

aws deploy create-application --application-name WordPress_App

预置Amazon S3 存储桶

aws s3 mb s3://codedeploybucketleoyu

将 WordPress 应用程序上传到 Amazon S3

cd /tmp/WordPress
aws deploy push --application-name WordPress_App --description "This is a revision for the application WordPress_App" --ignore-hidden-files --s3-location s3://codedeploybucketleoyu/WordPressApp.zip --source.

部署应用程序

aws deploy create-deployment-group --application-name WordPress_App --deployment-config-name CodeDeployDefault.AllAtOnce --deployment-group-name WordPress_DG --ec2-tag-filters Key=Name,Value=CodeDeploy,Type=KEY_AND_VALUE --service-role-arn ROLE

ROLE 替换为位于这些说明左侧的 CodeDeployRoleARN 的值 arn:aws:iam::173207358131:role/codedeploy-service-role

aws deploy create-deployment-group --application-name WordPress_App --deployment-config-name CodeDeployDefault.AllAtOnce --deployment-group-name WordPress_DG --ec2-tag-filters Key=Name,Value=CodeDeploy,Type=KEY_AND_VALUE --service-role-arn arn:aws:iam::173207358131:role/codedeploy-service-role

上述操作将创建 CodeDeploy 部署组。

aws deploy create-deployment --application-name WordPress_App --s3-location bucket=codedeploybucketleoyu,key=WordPressApp.zip,bundleType=zip --deployment-group-name WordPress_DG  --description "This is a revision for the application WordPress_App"

上述操作将部署 WordPress 应用程序。

监控部署

此时访问链接 http://34.220.66.22/WordPress/ 可见WordPress页面

更新和重新部署WordPress应用程序

完成WordPress网站设置

然后登陆,查看网站

修改和重新部署 WordPress 网站

在此任务中,我们将修改 WordPress 站点,然后使用 CodeDeploy 对其进行重新部署。

在部署 WordPress 应用程序期间,change_permissions.sh 脚本更新了 /tmp/WordPress 文件夹的权限,以便所有人都可以对其进行写入。

现在运行以下命令来限制权限,以便只有所有者可以对其进行写入。

sudo chmod -R 755 /var/www/html/WordPress

在 wp-content/themes/twentyfifteen/style.css 文件中修改站点的一些颜色。

cd /tmp/WordPress
sed -i 's/#fff/#768331/g' wp-content/themes/twentyseventeen/style.css

sed 命令将此颜色 (#fff) 更改为 #768331。

调用 AWS CodeDeploy push 命令,将更新后的文件捆绑在一起,将修订上传到 Amazon S3,然后通过以下方式向 AWS CodeDeploy 注册有关上传的修订的信息:

aws deploy push --application-name WordPress_App --s3-location s3://codedeploybucketleoyu/WordPressApp.zip --ignore-hidden-files

此时页面由白色变为绿色了。

结束。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注