AWS CI/CD之二:配置CodeDeploy

news2025/1/14 0:45:29

问题

前面一篇文章介绍了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.log
    level:
        root: info
        org.springframework.web: debug
        org.hibernate: error
    logback:
        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.coloradmin.cn/o/1399488.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

手把手教你薅熊链Berachain测试网空投

Berachain,这名字响当当!是基于流动性证明的高性能区块链,结合了Tendermint和流动性共识证明,还采用了Celestia作为DA层。这速度快、成本低、确定性高,简直就是未来的大热门!你知道吗?这家公司可…

异步编程Completablefuture使用详解----入门篇

JDK版本:jdk17 IDEA版本:IntelliJ IDEA 2022.1.3 文章目录 一、CompletableFuture是什么?二、为什么要使用CompletableFuture?2.1 工具类准备2.2 Future的局限性2.3 CompletableFuture的优势 三、如何使用CompletableFuture?3.1 …

Web3艺术市场:NFT与数字创作的结合

在数字时代,随着区块链技术的崛起,一种新型数字资产,非同质化代币(NFT),正逐渐改变传统艺术市场的格局。这种数字化的艺术品售卖方式成为了Web3艺术市场的代表,推动着数字创作与艺术市场的结合。…

day05_java中的流程控制

概述 在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。所以,我们必须清楚每条语句的执 行流程。而且,很多时候要通过控制语句的执行顺序来实现我们想要的功能。 流程控制语句又分为: 顺序结构 丶分支结构丶…

性能优化-HVX架构简介

来自 「发表于知乎专栏《移动端算法优化》」 本文主要介绍Hexagon DSP的HVX技术,旨在通过简单的语言讲清HVX技术。 🎬个人简介:一个全栈工程师的升级之路! 📋个人专栏:高性能(HPC)开…

vue3 + antd 封装动态表单组件(一)

前置条件: vue版本 v3.3.11 ant-design-vue版本 v4.1.1 创建动态组件配置文件config.js import { Input, Textarea, InputNumber, Select, RadioGroup, CheckboxGroup, DatePicker } from ant-design-vue;// 表单域组件类型 export const componentsMap {Text: …

编译poco库出现的问题及其解决办法

作者:朱金灿 来源:clever101的专栏 为什么大多数人学不会人工智能编程?>>> 使用vs2015编译poco库出现问题:error C3688: invalid literal suffix ‘I64_FMT’; literal operator or literal operator template ‘opera…

大模型:我也会自监督学习~

前言 当下大模型的能力已经很强了,但是将来我们想要的是能力更强的大模型,其最好能够处理各种复杂问题也即强对齐模型。 之前大模型训练的监督信号主要来源于人类反馈,但是如果想要训练一个强对齐模型必然就需要一个对应的强监督信号&#…

第二篇【传奇开心果系列】Vant 开发移动应用:开发常见页面

传奇开心果博文系列 Vant of Vue 开发移动应用示例系列博文博文目录一、常见页面的重要作用二、常见页面介绍三、分别示例代码四、常见页面样式示例代码五、主要知识点总结 Vant of Vue 开发移动应用示例系列博文 博文目录 一、常见页面的重要作用 常见页面在移动应用中扮演…

手把手教你如何快速定位bug,如何编写测试用例,快来观摩......

手把手教你如何快速定位bug,如何编写测试用例,快来观摩......手把手教你如何快速定位bug,如何编写测试用例,快来观摩......作为一名测试人员如果连常见的系统问题都不知道如何分析,频繁将前端人员问题指派给后端人员,后端人员问题指派给前端人员&#xf…

算法第二十一天-丑数

丑数 题目要求 解题思路 首先判断数字是不是为0或者负数&#xff0c;两者均不可能成为丑数&#xff1b; 之后对n进行不断整除&#xff0c;直到无法除尽为止。 简单判断最后的数是不是1即可。 代码 class Solution:def isUgly(self, n: int) -> bool:if n<0:return Fa…

linux perf工具使用

参考文章Linux性能调优之perf使用方法_perf交叉编译-CSDN博客 perf是一款Linux性能分析工具。比如打流性能优化的时候&#xff0c;就能够看到是哪些函数消耗的cpu高 那么linux如何编译perf工具呢&#xff1f; perf工具编译 进入perf目录下linux-3.16/tools/perf make ARCH…

线程状态转换

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;并发编程⛺️稳中求进&#xff0c;晒太阳 程状态转换 假设有线程Thread t 情况1 new-->RUNNABLE 当调用t.start()方法时&#xff0c;由new ->RUNNABLE 情况2 RUNNABLE WAITING t…

Spark On Hive配置测试及分布式SQL ThriftServer配置

文章目录 Spark On Hive的原理及配置配置步骤在代码中集成Spark On Hive Spark分布式SQL执行原理及配置配置步骤在代码中集成Spark JDBC ThriftServer 总结 Spark On Hive的原理及配置 Spark本身是一个执行引擎&#xff0c;而没有管理metadate的能力&#xff0c;当我们在执行S…

Redis原理篇(SkipList)

一.概述 本质是双端链表&#xff0c;只不过在正向遍历时可以不一个一个遍历&#xff0c;而是可以跳着遍历。 怎么实现的呢&#xff0c;下面是SkipList源码 二.源码 1. zskiplist 意义&#xff1a;跳表 zskiplist里面有头指针和尾指针&#xff0c;节点数量&#xff0c;最大…

Python自动化测试【selenium面试题】

一、selenium中如何判断元素是否存在&#xff1f; expected_conditions模块提供了16种判断方法&#xff0c;以下方法是判断元素存在DOM中&#xff1a; presence_of_element_located """ An expectation for checking that an element is present on the DOM of…

第二百七十八回

文章目录 1. 概念介绍2. 使用方法2.1 DropdownMenu2.1 DropdownMenuEntry 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何禁止页面跟随手机自动旋转"相关的内容&#xff0c;本章回中将介绍DropdownMenu组件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1.…

免费的网站站群软件,批量管理不同网站程序

在网站运营的过程中&#xff0c;站群软件成为提高效率、管理多个网站的得力助手。本文将专心分享三款卓越的站群软件&#xff0c;其中特别推荐147SEO软件&#xff0c;它不仅能够批量管理网站&#xff0c;还能自动更新原创文章&#xff0c;并主动推送各大搜索引擎。不论您运营何…

logstack 日志技术栈-02-ELK 的缺点?loki 更轻量的解决方案?

ELK/EFK日志系统 如果今天谈论到要部署一套日志系统&#xff0c;相信用户首先会想到的就是经典的ELK架构&#xff0c;或者现在被称为Elastic Stack。 Elastic Stack架构为Elasticsearch Logstash Kibana Beats的组合&#xff0c;其中&#xff0c;Beats负责日志的采集&…

51单片机中断

1、什么是中断&#xff1f; CPU在处理某一事件A时&#xff0c;发生了另一事件B请求CPU迅速去处理&#xff08;中断发生&#xff09;&#xff1b; CPU暂时中断当前的工作&#xff0c;转去处理事件B&#xff08;中断响应和中断服务&#xff09;&#xff1b; 待CPU将事件B处理完…