问题
前面一篇文章介绍了CodeBuild中构建一个Java的Maven项目。在这个基础上面,我们继续AWS CI/CD工作流构建之路。
1.配置CodePipeline简配版
这里主要是利用CodePipeline配置之前的CodeBuild项目,以便生产出需要部署的jar文件和CodeDeploy需要用到相关脚本文件。打开CodePipeline主页,开始创建管道,如下图:
这次创建CodePipeline只涉及到CodeBuild,也就是只配置到Build阶段。下面开始管道设置,如下图:
下一步,设置源代码,如下图:
下一步,设置构建阶段,这里选择,之前CodeBuild设置的构建项目,如下图:
下一步,设置部署阶段,这次我们先跳过,这个步骤,具体如下图:
点击创建管道,如下图:
配置成功后,如下图:
等待一段时间后,等这个管道构建jar文件完成后,就可以去s3页面查看,构建好的压缩包,如下图:
这样就可以去s3页面,查看管道生产的构件文件了,如下图:
将该构件zip文件下载,到本地检查查看如下图:
这里涉及到的脚本文件,我们在启动模板里面再解释。
2.创建EC2实例的IAM角色
这里使用的IAM角色,是提供给EC2实例使用的角色。打开IAM主页,点击角色,点击创建角色,如下图:
选择AWS服务,使用EC2服务实例,点击下一步,如下图:
配置ec2实例角色,需要的aws托管权限策略,添加AmazonAPIGatewayInvokeFullAccess,如下图:
设置角色名称和描述,如下图:
点击编辑,继续添加aws托管权限策略,添加AmazonSSMManagedInstanceCore,如下图:
在依次添加AmazonSSMReadOnlyAccess,CloudWatchAgentServerPolicy策略,具体托管策略如下图:
点击创建角色,得到如下结果图:
再添加两种自定义权限策略,一种是读取指定s3桶策略;一种是读取配置中心的secretsmanager策略。
GetSecretValue
打开策略主页,开始创建新策略,如下图:
读取配置中心的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角色中去,具体如下图:
依次添加上述自定义权限策略,最终结果如下图:
3.配置spring服务日志组
打开CloudWatch主页,开始创建日志组,如下图:
设置日志组名称,点击创建,如下图:
4.Spring中配置日志服务
只需要配置application.yaml即可,具体如下类似内容:
spring: application: name: demo logging: file: name: ${user.home}/log/demo.log level: root: info org.springframework.web: debug org.hibernate: error logback: rollingpolicy: total-size-cap: 1GB
这里主要是要确定spring的日志文件输出位置。
5.配置EC2启动模板
打开EC2启动模板主页,开始进行创建启动模板,如下图:
先简单配置启动模板,如下图:
注意这里,还需要设置密钥文件和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 }') 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和相关启动脚本,运行相关启动脚本。
最后点击创建启动模板。最终,结果如下图:
到这里可以手动测试一下这个启动模板,能否正常工作,具体如下图:
6.配置负责均衡器ELB
6.1创建ELB安全组
6.2创建目标组
下一步,挑选一个之前用启动模板创建的EC2实例,进行创建目标组,如下图:
等待一段时间,如下图:
6.3. 配置NLB
开始创建LB,如下图:
选择创建NLB,如下图:
详细设置如下:
创建完NLB一段时间后,回到目标组,查看注册目标状态,如下图,表示NLB创建成功了:
7.配置Auto Scaling组
开始创建Auto Scaling组,设置组名称,选择之前创建的启动模板,如下图:
选择实例启动选项,如下图:
配置高级选项,如下图:
配置组大小和扩展策略,如下图:
跳过通知设置,直接开始设置标签,如下图:
下一步,审核通过后,直接创建即可。审核页面,如下图:
等待一段时间后,auto scaling组就创建好了。如下图:
8.配置CodeDeploy
8.1 创建应用程序
开始创建CodeDeploy的应用程序,如下图:
创建应用程序,如下图:
8.2 创建AutoScalingForCodeDeploy自定义策略
打开策略主页,开始创建AutoScalingForCodeDeploy策略,如下图:
点击创建策略,将下面内容复制进去,如下:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AutoScalingForCodeDeploy", "Effect": "Allow", "Action": [ "iam:PassRole", "ec2:CreateTags", "ec2:RunInstances" ], "Resource": "*" } ] }
点击下一步,如下图:
点击创建策略,如下图:
8.3 创建角色
打开角色主页,开始创建新角色,如下图:
点击创建角色,选中相关服务,如下图:
点击下一步,如下图:
点击创建角色,如下图:
找到刚才创建的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
猜你喜欢
- 2小时前找不到libpng16的符号
- 2小时前2023年最新最全uniapp入门学习,零基础入门uniapp到实战项目,unicloud数据后台快速打造uniapp小程序项目
- 2小时前基于微信浙江杭州美食小程序系统设计与实现 研究背景和意义、国内外现状
- 2小时前解决安卓12限制32个线程
- 2小时前爬取的数据可以入表吗?怎样入表?
- 2小时前端口映射的定义、特点、场景、实例、常见问题回答(Port Mapping)
- 2小时前40道C语言大学经典例题及代码(免费 全)
- 2小时前扫地机器人(蓝桥杯CC++)
- 2小时前基于 Spring Boot+MySQL实现的在线考试系统源码+数据库,基于不同类型的客观题,进行自动组卷、批卷等功能的考试系统
- 2小时前大数据学习之Flink、搞懂Flink的恢复策略
网友评论
- 搜索
- 最新文章
- 热门文章