本文通过一个简单的例子说明中国区使用 CodeDeploy 和国际版的一些区别。
背景是这样的
我在Youtube 上看到一个视频在讲 AWS 的 CodeDeploy,但跟着做的时候发现中国区不能直接套用。
为了让刚刚接触 CodeDeploy 的用户可以更顺利的使用这个工具,我把原来的教材改编一下。如果你想看修改过好的代码,可以去 github。
创建 CodeDeploy 的第一个 Application
本文分为几个小节,但核心只有一个,填补使用 code deploy 需要的资料。那如何知道我们缺少哪些资料呢,就是直接去创建一个CodeDeploy的 Application。
进入 code deploy 这个工具的页面后,点击「创建应用」。
如果你之前从没有创建过code deploy 的应用,迎接你的将是一个很好看的欢迎页,但你也会看到一个「创建应用」的按钮。点进去。
进去之后的第一屏会让你给自己的应用起个名字。这两个名字不用起的很严肃:
然后选择「就地部署」(英文是「In-Place Deploy」)。这是为了让我们的教程更简单。当你掌握了就地部署,可以再去尝试蓝绿部署。
然后往下拉,进入第二屏:
这里我们想要往一个 EC2 上部署,但是我们没有一个能连接CodeDeploy 的 EC2。所以我们暂时离开,去往 EC2 界面,创建一个主机。
创建一个能连接 CodeDeploy 的EC2
进入到 EC2 管理页面后点击「启动实例」:
之后会有几步连续的,对 EC2 的配置:
第一步,选择启动的服务器:
我们选择第一个,也就是Amazon Linux AMI 2017.03.1 (HVM), SSD Volume Type
第二步,选择实例类型:
我们选择最便宜的t2.micro 作为实验。aws 已经默认选择了这种类型,我们无需修改,直接点右下角的「下一步:配置实例」。
第三步,配置实例,是我们的重点:
这个配置我们需要改一个关键的地方,IAM角色(英文 IAM role),但是因为我们还没有符合我们要求的 IAM 角色,所以我们点击「创建新的 IAM角色」,也就是图中红框部分。
创建能控制 CodeDeploy 的 IAM 角色
现在我们来到 IAM 的管理页面。这里说一下,IAM 的全称是 Identity and Access Management,可以理解为用户权限管理。
既然是管理权限,那我们最好能创建一个权限刚刚好能部署的角色,不要太大,也不要太小。
在最左边栏找到「角色」或者「Roles」,然后点进去。我们开始创建 Role。
点击了「创建角色」后,我们会有3步需要做:
第一步,选择角色类型——选择第一个里面的「Amazon EC2」;然后点击下一步
第二步,附加策略——在附加策略里面搜索 CodeDeploy;然后选择AmazonEC2RoleforAWSCodeDeploy
第三步,给角色命名,推荐设定为 CodeDeployExampleInstanceRole,因为我们的教程接下来就会用这个名字。在角色描述中你可以写Allows EC2 to get code from S3
,这也是这个角色的真实用途。之后点右下角的「创建角色」。
另外,我们还要在这里建立一个 CodeDeploy 的应用使用的角色。再次点击「创建角色」。选择角色策略依然为「Amazon EC2」,在附加策略时依然搜索 CodeDeploy,但是这次选择的策略叫做:AWSCodeDeployRole
最后,我们这个角色起名为 CodeDeployExampleRole。描述可以写Allows CodeDeploy to manage target EC2.
,这也是这个角色的真是用途。之后点右下角的「创建角色」。
在离开 IAM 之前,我们需要改变一下,CodeDeployExampleRole 这个角色的身份提供者(一个 AWS 中的特殊的术语,但这里不用理解,只需要知道是一个权限标记),不然 CodeDeploy 这个工具会报错。那么怎么更改这个角色的身份提供者呢?
点击进入你刚刚得到的角色:
在信任关系(英文 Trust Relationships)中找到「编辑信任关系」(英文 Trust Relationships)。
之后你就进入了编辑页面,把红框标注的那一行,双引号里的内容换成codedeploy.cn-north-1.amazonaws.com.cn
这是国际版和中国版的第一个重要不同。改完之后点击右下角的更新。之后你会在浏览器中看到身份提供者已经变成了我们刚刚修改过的内容:
回到 EC2
现在我们可以回来把EC2的角色填好了,就选择我们刚刚的CodeDeployExampleInstanceRole:
如果你之前用过 vpc,请给这个 EC2附加一个能自动分配 ip 的 vpc,如果没用过vpc,请忽略这一段。
然后点击下一步,就到了增加存储这一页,不过这里使用默认配置就可以;继续点击下一页,就到了增加标签,这里我们给 EC2,起个名字,也就是在 Name 对应的那一行填入 CodeDeployExampleInstance。之后再点下一步,进入设置安全组的页面,我们需要添加一个 http 的端口,如下图:
点击添加规则,找到一个叫 HTTP 的选项就可以了。然后进点击右下角的审核和启动。并且在下一页也点击启动。启动时记得下载 key pair。
在 EC2 上安装 CodeDeploy
用你的 key pair 登录服务器,我们需要在上面安装一些东西。
首先切换到 root 用户。我们的 codedeploy 用 root 的身份运行,然后安装 aws 的命令行工具。命令如下:
sudo su
yum -y update
因为我们使用的是 Amazon Linux 这种实例,已经默认自带 aws 命令行工具,无须再次下载,而因为我们刚刚已经设定了实例的角色,可以直接从 aws 的 s3 里下载code deploy。命令如下:
aws s3 cp s3://aws-codedeploy-cn-north-1/latest/install . --region cn-north-1 # 这是下载了一个安装脚本
chmod +x ./install # 把这个脚本设为可执行文件
./install auto # 执行这个安装脚本
这样我们就安装好了服务器上的 codedeploy。请注意,这里的 region 是 cn-north-1,这是和其他地区的不同。
开始使用 CodeDeploy
现在我们已经满足了使用CodeDeploy的前提条件,回到刚刚让我们停下来的CodeDeploy第二屏。现在选择一个我们要部署的机器,也就是我们安装了 code deploy 的 EC2:
之后在负载均衡器那里选择了不使用,这样可以简化我们的教程。之后滑到最后一屏。
在这里选择部署策略,因为我们只有一台机器,选择什么都是一样的,不过你可以读一读这几个策略,以后会用到的。
更重要的是选择角色。你还记得我们刚刚创建了两个 IAM 角色吧。CodeDeployExampleInstanceRole 是给 EC2用的,另外一个 CodeDeployExampleRole 就是给 CodeDeploy 用的:
之后点右下角的创建应用,或者Create Application。恭喜你已经有了第一个 CodeDeploy 的应用。
部署第一个版本
选中你刚刚设立的部署组,我的叫 CodeDeployExampleGroup,就是图中1的位置。选中。
然后在 Actions 那里(图中2位置),就可以看到部署新版本了。点击。
进入之后,就是上传代码的部分了,我们选择用 Github比较方便。其中要在2的位置手动输入你的 github 账号,然后点击3位置的连接 github。连接完成之后需要填入你要部署的代码库,以及要部署的版本(也就是在2位置写入 commit id[1])。
之后滑到最下面选择部署,就可以了。如果看到这个画面,就说明你成功了,恭喜!
也恭喜我竟然写完了这个教程。
参考
abel30567/AWS_CodeDeploy_Example
-
想找到 Commit ID 可以搜索 how to find commit id on Github ↩