介绍

我们通过在EC2上设置Auto Scaling并引入Cl/CD(GitHub + CodePipeline + CodeDeploy + AMI自动更新)实现了自动化部署,下面总结一下流程。

此外,在 CodeDeploy 之后,我们创建了 最新のソースを反映したEC2のAMIを作成し、Auto Scaling の起動テンプレートにAMIを反映するLambda 并将其添加到 Codepipeline 阶段以自动化 AMI 的反射。

施工图

EC2 に Auto Scaling の設定 と Cl/CD (CodePipeline + CodeDeploy + LambdaによるAMIの自動更新) を導入 ①

预建

  • 网络层创建,例如vpc和subnet
  • EC2 或 elb 可能会创建,也可能不会。
    • 这一次,为了更容易理解,我们将制作一个简单的服务器,将 Nginx 放在 EC2 上。
      • 已经创建的 EC2 没问题。它不一定是 nginx。

EC2 に Auto Scaling の設定 と Cl/CD (CodePipeline + CodeDeploy + LambdaによるAMIの自動更新) を導入 ①

安装 EC2 nginx

// ssh接続
% ssh -i xxxx.pem ec2-user@パブリックIP(またはDNS)

// nginxをインストール
$ sudo amazon-linux-extras install nginx1

// nginxを起動
$ sudo systemctl start nginx

// 自動起動設定
$ sudo systemctl enable nginx

$ cd /usr/share/nginx/html

$ ls
404.html  50x.html  icons  index.html  nginx-logo.png  poweredby.png

当您从具有 EC2 的公共 IP 的浏览器访问该网站时,您可以看到该网站。
EC2 に Auto Scaling の設定 と Cl/CD (CodePipeline + CodeDeploy + LambdaによるAMIの自動更新) を導入 ①

创建 IAM 角色

创建两个 IAM 角色,一个用于附加到 CodeDeploy,一个用于附加到 EC2。

创建要在创建 CodeDeploy 时使用的 IAM 角色

  • 常见用例:CodeDeploy
    EC2 に Auto Scaling の設定 と Cl/CD (CodePipeline + CodeDeploy + LambdaによるAMIの自動更新) を導入 ①

  • 要附加的 AWS 托管策略

    • AWSCodeDeployRole
      EC2 に Auto Scaling の設定 と Cl/CD (CodePipeline + CodeDeploy + LambdaによるAMIの自動更新) を導入 ①

创建 CodeDeploy 时选择此角色。

创建一个 IAM 角色以附加到 EC2

  • 常见用例:EC2
    EC2 に Auto Scaling の設定 と Cl/CD (CodePipeline + CodeDeploy + LambdaによるAMIの自動更新) を導入 ①
  • 要附加的 AWS 托管策略
    • AmazonS3FullAccess
    • AWSCodeDeployRole
      EC2 に Auto Scaling の設定 と Cl/CD (CodePipeline + CodeDeploy + LambdaによるAMIの自動更新) を導入 ①

使用 Codepipeline 将日志上传到 S3 时需要AmazonS3FullAccess,因此请将其附加到 EC2。

创建 IAM 角色后,让我们将其附加到 EC2。

在 EC2 上安装 CodeDeploy 代理并创建 AMI

请参考以下文章在 EC2 上安装 CodeDeploy 代理。

$ cd

$ sudo yum install -y ruby

$ sudo yum install -y wget
読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd
パッケージ wget-1.14-18.amzn2.1.x86_64 はインストール済みか最新バージョンです
何もしません

$ wget https://aws-codedeploy-ap-northeast-1.s3.ap-northeast-1.amazonaws.com/latest/install

$ chmod +x ./install

$ sudo ./install auto

$ sudo service codedeploy-agent status
The AWS CodeDeploy agent is running as PID 3246
sudo service codedeploy-agent status

对于以下命令,URL 适用于 EC2 位于东京地区时的情况。

  • wget https://aws-codedeploy-ap-northeast-1.s3.ap-northeast-1.amazonaws.com/latest/install

请参阅此处以获取该地区的 URL

创建启动模板

在创建启动模板之前,请使用安装了 Nginx 的 EC2 AMI。
EC2 に Auto Scaling の設定 と Cl/CD (CodePipeline + CodeDeploy + LambdaによるAMIの自動更新) を導入 ①

创建启动模板。

  • 描述启动模板名称和模板版本
    对于 AMI,指定您之前创建的 AMI。
    EC2 に Auto Scaling の設定 と Cl/CD (CodePipeline + CodeDeploy + LambdaによるAMIの自動更新) を導入 ①

  • 指定实例类型和密钥对。
    EC2 に Auto Scaling の設定 と Cl/CD (CodePipeline + CodeDeploy + LambdaによるAMIの自動更新) を導入 ①

  • 为子网选择起動テンプレートの設定に含めない

  • 选择现有的安全组。

  • 添加网络接口。

    • @987654363 有効化这是为了检查在 CodeDeploy 之后是否反映了源。其他保留为默认值。
      EC2 に Auto Scaling の設定 と Cl/CD (CodePipeline + CodeDeploy + LambdaによるAMIの自動更新) を導入 ①
  • 对于存储,保留默认值,因为它应该是 AMI 的 EBS。
    EC2 に Auto Scaling の設定 と Cl/CD (CodePipeline + CodeDeploy + LambdaによるAMIの自動更新) を導入 ①

  • 高度の詳細からIAM 角色选择附加到 EC2 的角色。其他保留为默认值。
    EC2 に Auto Scaling の設定 と Cl/CD (CodePipeline + CodeDeploy + LambdaによるAMIの自動更新) を導入 ①

保留其他默认值并创建启动模板。

创建 Auto Scaling 组

  • Auto Scaling 组名:nginx
  • 启动模板:nginx
  • 版本:Latest
    • 确保使用最新,而不是默认值。它现在将反映最新版本的启动模板。
      EC2 に Auto Scaling の設定 と Cl/CD (CodePipeline + CodeDeploy + LambdaによるAMIの自動更新) を導入 ①
  • 选择 VPC 和子网。
    EC2 に Auto Scaling の設定 と Cl/CD (CodePipeline + CodeDeploy + LambdaによるAMIの自動更新) を導入 ①
  • 如果您尚未创建负载平衡器和目标组,请立即创建。
  • 健康检查类型不检查ELB
    启动 AutoScaling 而不检查一次。只有成功了才可以检查。
    • 为负载平衡器方案选择internet-facinginternal(内部) 不好。
    • 对于子网,选择一个公共子网。
      EC2 に Auto Scaling の設定 と Cl/CD (CodePipeline + CodeDeploy + LambdaによるAMIの自動更新) を導入 ①
  • 组大小和扩展策略是任意决定的。
    • 这一次,当 CPU 超过 50% 时,实例数会增加。
      EC2 に Auto Scaling の設定 と Cl/CD (CodePipeline + CodeDeploy + LambdaによるAMIの自動更新) を導入 ①
  • 这次没有通知。
    EC2 に Auto Scaling の設定 と Cl/CD (CodePipeline + CodeDeploy + LambdaによるAMIの自動更新) を導入 ①它也没有添加
  • 标记。
    EC2 に Auto Scaling の設定 と Cl/CD (CodePipeline + CodeDeploy + LambdaによるAMIの自動更新) を導入 ①

这应该启动一个实例。

从具有 elb 的 DNS 名称的浏览器 (nginx-elb-account-id.ap-northeast-1.elb.amazonaws.com)
让我们检查一下我们访问时是否显示了nginx默认值。

如果您在浏览器中看不到它,请检查您的 EC2 和 ELB 安全组。

目标群体修改

默认目标组中登録解除の遅延是300秒,影响CodeDeploy速度,所以改成10秒。
EC2 に Auto Scaling の設定 と Cl/CD (CodePipeline + CodeDeploy + LambdaによるAMIの自動更新) を導入 ①

此外,出于同样的原因,健康检查正常と非正常のしきい値 从 5 次变为最少 2 次。
EC2 に Auto Scaling の設定 と Cl/CD (CodePipeline + CodeDeploy + LambdaによるAMIの自動更新) を導入 ①

这使得 CodeDeploy 期间的部署速度更快。
我用这篇文章作为参考。

在负载下检查 Auto Scaling 的运行情况

这是一个验证过程,因此您可以跳过它。

将 Auto Scaling 组大小的最大容量设置为 3,
使用 yes 命令应用负载后,让我们检查 EC2 实例的数量是否为 3。
准备两个终端选项卡,并将两个选项卡通过 SSH 连接到 EC2。
一个运行以下命令:

$ yes dev/null &

确认 EC2 实例数为 3 后,让我们用 kill 命令停止另一个终端。
$顶部
// yesコマンドのPIDを確認します。

$杀

その後、EC2がスケールインし、EC2インスタンスが1になっているか確認します。

# GitHubにappspec.ymlをアップ

元々Githubのリポジトリにあるものは、index.htmlのみです。
```html:index.html
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8" />
    <title>Document</title>
  </head>
  <body>
    <p>CodeDeploy success!!</p>
  </body>
</html>

appspec.yml 添加到此存储库。
appspec.yml 将是 CodeDeploy 说明。
这一次,我会写以下内容。

应用规范.yml
version: 0.0
os: linux
files:
  - source: /
    destination: /usr/share/nginx/html
file_exists_behavior: OVERWRITE
permissions:
  - object: /usr/share/nginx/html
    pattern: '**'
    owner: ec2-user
    group: nginx
    mode: 644
    type:
      - file
  - object: /usr/share/nginx/html
    pattern: '**'
    owner: ec2-user
    group: nginx
    mode: 755
    type:
      - directory

比如EC2上的Laravel + apache,appspec.yml如下。

应用规范.yml
version: 0.0
os: linux
files:
  - source: /
    destination: /usr/share/nginx/html
file_exists_behavior: OVERWRITE
permissions:
  - object: /usr/share/nginx/html
    pattern: "**"
    owner: ec2-user
    group: apache
    except: [/usr/share/nginx/html/storage]
    type:
      - file
    mode: 644
  - object: /usr/share/nginx/html
    pattern: "**"
    owner: ec2-user
    group: apache
    except: [/usr/share/nginx/html/storage]
    type:
      - directory
    ode: 755
  - object: /usr/share/nginx/html/storage
    pattern: "**"
    owner: ec2-user
    group: apache
    type:
      - file
    mode: 775
  - object: /usr/share/nginx/html/storage
    pattern: "**"
    owner: ec2-user
    group: apache
    type:
      - directory
    mode: 775
  • source 指定要部署的存储库的路径。

  • destination 指定将修订版(GitHub 源)部署到服务器时的服务器路径。

  • file_exists_behavior: OVERWRITE 覆盖您部署到的源。
    如果部署目标是 EC2,您可能希望将 CodeDeploy 的修订目标设为在部署修订之前就已存在的文件。但是,如果您保持原样,部署将失败并显示“已经存在”的错误,但此描述将覆盖它并避免错误。

详情请看这篇文章

上传 appspec.yml 后,GitHub 仓库会有如下配置。很简单,不是吗?
EC2 に Auto Scaling の設定 と Cl/CD (CodePipeline + CodeDeploy + LambdaによるAMIの自動更新) を導入 ①

配置 CodeDeploy

应用程序创建

单击为 CodeDeploy 创建应用程序。
填写应用名称并选择 EC2 作为平台。

EC2 に Auto Scaling の設定 と Cl/CD (CodePipeline + CodeDeploy + LambdaによるAMIの自動更新) を導入 ①

创建部署组

  • 部署组名称:nginx
  • 服务角色:CodeDeployRole(在 IAM 角色创建中创建的角色。)
  • 部署类型:インプレース
    EC2 に Auto Scaling の設定 と Cl/CD (CodePipeline + CodeDeploy + LambdaによるAMIの自動更新) を導入 ①
  • 首选项:检查Amazon EC2 Auto Scaling グループ 并选择nignx
  • 部署设置:CodeDeployDefault.OneAtTime
    • 一一部署到EC2。
  • 检查负载均衡器:ロードバランシングを有効にする
    • 同时选择一个目标组。
      EC2 に Auto Scaling の設定 と Cl/CD (CodePipeline + CodeDeploy + LambdaによるAMIの自動更新) を導入 ①

创建部署

  • 部署组:先程作成したデプロイグループ名
  • 修订类型:Github
    1. 对于 GitHub 令牌名称,输入适当的名称并单击 Githubに接続
      EC2 に Auto Scaling の設定 と Cl/CD (CodePipeline + CodeDeploy + LambdaによるAMIの自動更新) を導入 ①
    2. 点击Authorize aws-codesuite
      EC2 に Auto Scaling の設定 と Cl/CD (CodePipeline + CodeDeploy + LambdaによるAMIの自動更新) を導入 ①
    3. 点击確認
      EC2 に Auto Scaling の設定 と Cl/CD (CodePipeline + CodeDeploy + LambdaによるAMIの自動更新) を導入 ①
    4. 连接完成后,系统将提示您输入存储库和提交 ID。
      • 存储库名称是Githubのアカウント名 / リポジトリ名
        EC2 に Auto Scaling の設定 と Cl/CD (CodePipeline + CodeDeploy + LambdaによるAMIの自動更新) を導入 ①
    5. 检查其他部署行为设置:コンテンツの上書き
      EC2 に Auto Scaling の設定 と Cl/CD (CodePipeline + CodeDeploy + LambdaによるAMIの自動更新) を導入 ①

成功部署后,尝试 SSH 连接到 EC2。

$ cd /usr/share/nginx/html

//デプロイ前
$ ls -la
-rw-r--r-- 1 root root 3665  7月 12 01:09 404.html
-rw-r--r-- 1 root root 3708  7月 12 01:09 50x.html
drwxr-xr-x 2 root root   27  8月 24 15:20 icons
-rw-r--r-- 1 root root 3520  7月 12 01:09 index.html
-rw-r--r-- 1 root root  368  7月 12 01:09 nginx-logo.png
lrwxrwxrwx 1 root root   14  8月 24 15:20 poweredby.png -> nginx-logo.png

//デプロイ後
$ ls -la
-rw-r--r-- 1 root     root  3665  7月 12 01:09 404.html
-rw-r--r-- 1 root     root  3708  7月 12 01:09 50x.html
-rw-r--r-- 1 ec2-user nginx  353  8月 25 14:09 appspec.yml
drwxr-xr-x 2 root     root    27  8月 24 15:20 icons
-rw-r--r-- 1 ec2-user nginx  168  8月 25 14:09 index.html
-rw-r--r-- 1 root     root   368  7月 12 01:09 nginx-logo.png
lrwxrwxrwx 1 root     root    14  8月 24 15:20 poweredby.png -> nginx-logo.png

可以看到index.html已经反映,appspec.yml已经添加。

从具有 elb 的 DNS 名称的浏览器 (nginx-elb-account-id.ap-northeast-1.elb.amazonaws.com)
当你访问它时,它不再是 nginx 默认值,并且 index.html 被反映。
EC2 に Auto Scaling の設定 と Cl/CD (CodePipeline + CodeDeploy + LambdaによるAMIの自動更新) を導入 ①

如果您在浏览器中看不到它,请检查您的 EC2 和 ELB 安全组。

CodePipelineを作成 将是下一次,因为它越来越长。

参考文章


原创声明:本文系作者授权爱码网发表,未经许可,不得转载;

原文地址:https://www.likecs.com/show-308624595.html

相关文章: