AWS CI/CD之二:配置CodeDeploy

问题

前面一篇文章介绍了CodeBuild中构建一个Java的Maven项目。在这个基础上面,我们继续AWS CI/CD工作流构建之路。

1.配置CodePipeline简配版

这里主要是利用CodePipeline配置之前的CodeBuild项目,以便生产出需要部署的jar文件和CodeDeploy需要用到相关脚本文件。打开CodePipeline主页,开始创建管道,如下图:
创建CodePipeline
这次创建CodePipeline只涉及到CodeBuild,也就是只配置到Build阶段。下面开始管道设置,如下图:
管道设置
下一步,设置源代码,如下图:

设置源代码
下一步,设置构建阶段,这里选择,之前CodeBuild设置的构建项目,如下图:
设置build阶段
下一步,设置部署阶段,这次我们先跳过,这个步骤,具体如下图:
跳过部署阶段设置
跳过部署阶段
点击创建管道,如下图:
创建管道
配置成功后,如下图:
构建中

等待一段时间后,等这个管道构建jar文件完成后,就可以去s3页面查看,构建好的压缩包,如下图:
构建完成
这样就可以去s3页面,查看管道生产的构件文件了,如下图:
构件zip文件
将该构件zip文件下载,到本地检查查看如下图:
zip构件文件
这里涉及到的脚本文件,我们在启动模板里面再解释。

2.创建EC2实例的IAM角色

这里使用的IAM角色,是提供给EC2实例使用的角色。打开IAM主页,点击角色,点击创建角色,如下图:
创建角色
选择AWS服务,使用EC2服务实例,点击下一步,如下图:
创建EC2角色
配置ec2实例角色,需要的aws托管权限策略,添加AmazonAPIGatewayInvokeFullAccess,如下图:
AmazonAPIGatewayInvokeFullAccess托管权限
设置角色名称和描述,如下图:

设置ec2角色名称
点击编辑,继续添加aws托管权限策略,添加AmazonSSMManagedInstanceCore,如下图:
AmazonSSMManagedInstanceCore托管权限策略
在依次添加AmazonSSMReadOnlyAccess,CloudWatchAgentServerPolicy策略,具体托管策略如下图:
所有托管策略
点击创建角色,得到如下结果图:

角色结果图
再添加两种自定义权限策略,一种是读取指定s3桶策略;一种是读取配置中心的secretsmanager策略。

GetSecretValue

打开策略主页,开始创建新策略,如下图:
IAM策略主页

读取配置中心的secretsmanager策略,内容如下:

{"Version": "2012-10-17","Statement": [{"Sid": "secretsmanagerRead","Effect": "Allow","Action": "secretsmanager:GetSecretValue","Resource": "arn:aws:secretsmanager:*:账户ID:secret:*"}]
}

具体设置如下图:
配置中心读权限策略
创建策略,如下图:
创建配置中心读权限

dev-s3

按照上述方法,创建读取指定s3桶读策略。策略内容如下:

{"Version": "2012-10-17","Statement": [{"Sid": "ListObjectsInBucket","Effect": "Allow","Action": ["s3:ListBucket","s3:Get*","s3:List*"],"Resource": ["arn:aws:s3:::dev-xxx-data","arn:aws:s3:::codepipeline-us-east-1-414194568564","arn:aws:s3:::codepipeline-us-east-1-414194568564/*"]},{"Sid": "AllObjectActions","Effect": "Allow","Action": "s3:*Object","Resource": ["arn:aws:s3:::dev-xxx-data/*"]}]
}

这里主要设定s3桶和桶中的读权限,其中一个codepipeline桶是上面codepipeline构件生成位置。

CodeDeployCLI策略

方便EC2实例调用codedeploy命令权限策略,具体内容如下:

{"Version": "2012-10-17","Statement": [{"Action": ["codedeploy-commands-secure:GetDeploymentSpecification","codedeploy-commands-secure:PollHostCommand","codedeploy-commands-secure:PutHostCommandAcknowledgement","codedeploy-commands-secure:PutHostCommandComplete"],"Effect": "Allow","Resource": "*"}]
}

然后,将这上述自定义的权限策略添加到ec2角色中去,具体如下图:
添加自定义权限策略
getsv自定义权限策略
依次添加上述自定义权限策略,最终结果如下图:
所有自定义权限策略

3.配置spring服务日志组

打开CloudWatch主页,开始创建日志组,如下图:
开始创建日志组
设置日志组名称,点击创建,如下图:

创建日志组

4.Spring中配置日志服务

只需要配置application.yaml即可,具体如下类似内容:

spring:application:name: demo
logging:file:name: ${user.home}/log/demo.loglevel:root: infoorg.springframework.web: debugorg.hibernate: errorlogback:rollingpolicy:total-size-cap: 1GB

这里主要是要确定spring的日志文件输出位置。

5.配置EC2启动模板

打开EC2启动模板主页,开始进行创建启动模板,如下图:
启动模板主页
先简单配置启动模板,如下图:
启动模板简单配置
注意这里,还需要设置密钥文件和IAM实例配置文件,如下图:
IAM角色

在用户数据部分设置,启动ec2实例的关键脚本,如下图:
用户数据
具体内容参考如下:

#!/bin/bash
# 安装CodeDeploy 代理程序
sudo yum -y update
sudo yum -y install ruby
sudo yum -y install wget
cd ~
aws s3 cp s3://aws-codedeploy-us-east-1/latest/install . --region us-east-1
chmod +x ./install
sudo ./install auto
# 调整codedeploy使用IAM授权
echo -e "\n:enable_auth_policy: true" | sudo tee -a /etc/codedeploy-agent/conf/codedeployagent.yml
sudo systemctl restart codedeploy-agent.service
# 安装Corretto17
sudo yum -y install java-17-amazon-corretto
java -version
# 设置环境变量
echo "export SPRING_PROFILES_ACTIVE=dev" | sudo tee /etc/profile.d/load_env.sh
echo "export SPRING_APPLICATION_NAME=xxxc" | sudo tee -a /etc/profile.d/load_env.sh
export SPRING_PROFILES_ACTIVE=dev
export SPRING_APPLICATION_NAME=xxxc
echo "export DEPLOYMENT_GROUP_NAME=dev" | sudo tee -a /etc/profile.d/load_env.sh
echo "export APPLICATION_NAME=xxxc" | sudo tee -a /etc/profile.d/load_env.sh
export DEPLOYMENT_GROUP_NAME=dev
export APPLICATION_NAME=xxxc
# 下载构建文件
cd ~
buildArtif=$(aws s3 ls s3://codepipeline-us-east-1-414194568564/dev-xxxc/BuildArtif/ --recursive --region us-east-1 | sort | tail -n 1 | awk '{print $4}') 
aws s3 cp s3://codepipeline-us-east-1-414194568564/$buildArtif . --region us-east-1
fileName=$(basename $buildArtif)
unzip ~/$fileName
chmod +x ~/*.sh
source ~/install_dependencies.sh
source ~/change_permissions.sh
source ~/start_server.sh

上述脚本,主要就是安装CodeDeploy代理程序,并开启CodeDeploy的IAM角色授权,安装JDK运行环境和相关环境变量设置,最后,就是下载CodePipeline构建好的jar和相关启动脚本,运行相关启动脚本。
最后点击创建启动模板。最终,结果如下图:
启动模板
到这里可以手动测试一下这个启动模板,能否正常工作,具体如下图:
EC2启动模板
EC2启动模板第二步

6.配置负责均衡器ELB

6.1创建ELB安全组

创建ELB安全组

6.2创建目标组

创建目标组
下一步,挑选一个之前用启动模板创建的EC2实例,进行创建目标组,如下图:
创建目标组2
等待一段时间,如下图:
目标组注册ec2

6.3. 配置NLB

开始创建LB,如下图:
开始创建LB
选择创建NLB,如下图:
创建NLB
详细设置如下:
NLB详细设计
创建完NLB一段时间后,回到目标组,查看注册目标状态,如下图,表示NLB创建成功了:
目标组成功

7.配置Auto Scaling组

开始创建Auto Scaling组,设置组名称,选择之前创建的启动模板,如下图:
启动模板

选择实例启动选项,如下图:
启动选项
配置高级选项,如下图:
配置高级选项
配置组大小和扩展策略,如下图:
配置组大小和扩展策略
跳过通知设置,直接开始设置标签,如下图:
标签设置
下一步,审核通过后,直接创建即可。审核页面,如下图:
autoscaling审核页面
等待一段时间后,auto scaling组就创建好了。如下图:
autoscaling组创建完成

8.配置CodeDeploy

8.1 创建应用程序

开始创建CodeDeploy的应用程序,如下图:
codedeploy应用程序开始创建
创建应用程序,如下图:
创建codedeploy应用程序

8.2 创建AutoScalingForCodeDeploy自定义策略

打开策略主页,开始创建AutoScalingForCodeDeploy策略,如下图:
打开策略主页
点击创建策略,将下面内容复制进去,如下:

{"Version": "2012-10-17","Statement": [{"Sid": "AutoScalingForCodeDeploy","Effect": "Allow","Action": ["iam:PassRole","ec2:CreateTags","ec2:RunInstances"],"Resource": "*"}]
}

点击下一步,如下图:

创建AutoScalingForCodeDeploy自定义策略
点击创建策略,如下图:

创建策略

8.3 创建角色

打开角色主页,开始创建新角色,如下图:

新建角色主页
点击创建角色,选中相关服务,如下图:

codedeploy角色服务
点击下一步,如下图:
codedeploy角色下一步
点击创建角色,如下图:
创建角色
找到刚才创建的CodeDeployServiceRole角色,点击进入详情,如下图:
进行角色详情
开始添加自定义权限策略,如下图:
添加自定义策略
添加AutoScalingForCodeDeploy自定义策略,如下图:
添加自定义策略
最终角色的权限策略,如下图:
最终角色权限策略

8.4 创建部署组

打开CodeDeploy之前创建的应用程序的部署组部分,我们开始创建dev环境的部署组,如下图:
部署组主页
设置基本设置后,开始创建部署组,如下图:
创建部署组主要配置
到这里就创建部署组成功了。

总结

这个CodeDeploy是AWS CI/CD里面比较复杂一个部分,只要我们保证CodeBuild和CodeDeploy没问题的前提下面,我们就可以开始AWS CI/CD最后一个核心服务CodePipeline。

参考:

  • 使用 CodeDeploy 亚马逊 Virtual Private Cloud
  • Amazon Corretto 17 Installation Instructions for Amazon Linux 2 and Amazon Linux 2023

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/415112.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器视觉系统在汽车车轮毂检测上的应用

将机器视觉用于轮毂检测,可以利用图像分析的方法来测量轮毂特征尺寸、判断轮毂形状,并获取其位置坐标等信息,从而能够辨识流水生产线上的各种款式和型号的汽车轮毂。 市面上对汽车车轮毂具体检测要求如下 : 1.为了分辨流水线上…

UI设计中的插画运用优势(上)

1. 插画是设计的原创性和艺术性的基础 无论是印刷品、品牌设计还是UI界面,更加风格化的插画能够将不同的风格和创意加入其中,在激烈的竞争中更容易因此脱颖而出。留下用户才有转化。 2. 插画是视觉触发器,瞬间传达大量信息 我们常说「一图胜千…

时光之美,摩登π:复古韵味,智能生活,感受独特时代氛围

在这个充满时光之美的时代,格力大胆地借助复古外观产品,为年轻人创造出一种摩登π的空调体验。时光流转,摩登主义的复古风潮如期而至。摩登π挂机以仿时光表盘和金属感齿轮等特色呈现时光之美,将岁月的磨砺融入产品设计中&#xf…

基于ssm+vue的宠物医院系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目背景…

浪潮信息与英特尔联合发布全球首个全液冷冷板服务器参考设计

1月18日,浪潮信息与英特尔联合发布全球首个全液冷冷板服务器参考设计,并面向业界开放,为全球液冷产业链上下游提供极具价值的参考样板,推动先进全液冷冷板解决方案在全球数据中心的大规模部署应用,实现数据中心更加绿色…

深入浅出关于go web的请求路由

文章目录 前言一、是否一定要用框架来使用路由?二、httprouter2.1 httprouter介绍2.2 httprouter原理2.3 路由冲突情况 三、gin中的路由四、hertz中的路由总结 前言 最近重新接触Go语言以及对应框架,想借此机会深入下对应部分。 并分享一下最近学的过程…

北斗卫星赋能南海渔业,助力渔船科学防灾避险

北斗卫星赋能南海渔业,助力渔船科学防灾避险 面向建设海洋强国战略、确保渔民生产生活安全等需求,海南气象部门运用北斗卫星技术创新打造海洋气象服务。 北斗船载系统创新应用是远海安全作业的坚实保障。聚焦远洋渔船获取天气信息难的问题,…

2024 前端高频面试题之 JS 篇

JS 篇(持续更新中) 1、什么是原型、原型链?2、什么是继承?说一说有哪些?继承组合的原理及优点?3、new 操作符具体干了什么?4、js 有哪些方法改变 this 指向?5、bind 有哪些实现的注意…

nginx代理本机多个端口应用

应用带根路径的情况 应用1请求为:http://localhost:8090/app1应用2请求为:http://localhost:8091/app2 将根路径直接去掉,即 / 应用1请求为:http://localhost:8090/应用2请求为:http://localhost:8091/ 最后的/…

CSS常见元素类型 盒子模型

文章目录 常见元素类型块元素内联元素空元素修改元素类型测试元素类型 盒子模型标准文本流:外边距和内边距测试盒子模型 常见元素类型 块元素 常见块元素: div p h1~h6 ul li img 这些元素结束之后自带换行,一行只能存在一个元素,无法横向排列&#xf…

时序分解 | Matlab实现CEEMDAN+PE自适应噪声完备集合经验模态分解+排列熵计算

时序分解 | Matlab实现CEEMDANPE自适应噪声完备集合经验模态分解排列熵计算 目录 时序分解 | Matlab实现CEEMDANPE自适应噪声完备集合经验模态分解排列熵计算效果一览基本介绍程序设计参考资料 效果一览 基本介绍 CEEMDANPE自适应噪声完备集合经验模态分解排列熵计算 运行环境m…

数据分析-Pandas如何整合多张数据表

数据分析-Pandas如何整合多张数据表 数据表,时间序列数据在数据分析建模中很常见,例如天气预报,空气状态监测,股票交易等金融场景。数据分析过程中重新调整,重塑数据表是很重要的技巧,此处选择Titanic数据…