node.js - 具有 ASG 和 ELB (bitbucket) 的 AWS CD/CI 管道
问题描述
我必须首先说我对 AWS 比较陌生,但发现它非常有用。让我描述一下我的场景......
我目前拥有的
- Auto Scaling 组 (ASG)
- 弹性负载均衡器 (ELB)
- 使用 CodeDeploy 和 Bitbucket 的 CD/CI 管道
- 在 EC2 实例上提供自定义 API 的 Node/Express 应用程序
- VPC 和子网运行良好
- 带有我的应用程序代码的 AMI
我的问题
当 ASG 决定使用我的启动模板和 AMI 扩展新的 EC2 实例时,它将使用 AMI 中的应用程序代码。但是,如果我在某个时候部署到 master,我的 AMI 将不会更新,但 ASG 中的实例会更新。确保 ASG 生成的新实例运行最新代码版本(主)的最佳方法是什么?
我最初的想法
我正在考虑在启动配置中包含一个 bash 脚本,该脚本将从 Bitbucket 中提取最新代码并运行任何以下步骤以使我的应用程序运行(例如“npm install”、“npm run start”等)。我确信有人有更优雅的解决方案,我很想听听一些建议。
解决方案
对于任何来这里的人,我确实解决了我的问题。一开始我是对的。一旦实例启动并运行,启动模板中的“用户数据”字段是引导我的应用程序的好地方。它基本上从远程仓库克隆,然后执行任何必要的步骤来启动应用程序。
例如,在 EC2 的启动配置中
#cloud-boothook
#!/bin/bash
git clone myremoterepo.git
cd myremoterepo
npm install
npm run start
此外,如果您运行的是经典负载均衡器,当您的 ASG 扩展 EC2 实例时,CodeDeploy 将尝试根据您在 S3 中的最新代码存储库启动部署。所以上述解决方案将是多余的。
推荐阅读
- azure - 使用 c# 检索要存储到 Cosmos 中的 Blob 存储文件名
- bash - 用于删除整个 csv 文件的自动换行的 Linux 命令
- python - Python日期时间和函数
- reactjs - React Redux Connect DefaultRootState 输入
- php - 在 PHP 中多次返回
- javascript - 我可以在创建后立即获取文档密钥吗?
- javascript - 抓取网站时在 NodeJs 上获取 POST 请求并将结果转换为 DOM
- reactjs - 如何用反应替换代理 API url?
- silverstripe - 在 SilverStripe 后端,有没有办法用模板呈现列?
- laravel - Laravel 中止()与返回响应()-> json()