aws codebuild 配置codecommit更新触发和squid正向代理

news2024/9/22 17:34:05

本文主要讨论如何通过监听codecommit仓库自动触发codebuild的构建,以及为codebuild配置正向代理

通过codecommit更新触发codebuild

codecommit触发器相关

每个codecommit最多配置10个触发器

sns触发器

为sns创建lambda函数订阅,在lambda日志中查看sns的触发器事件

{
  Records: [
    {
      EventSource: 'aws:sns',
      EventVersion: '1.0',
      EventSubscriptionArn: 'arn:aws-cn:sns:cn-north-1:xxx:testlamda:b7b7562c-62d0-4c39-9de2-b0cfa667ad5b',
      Sns: [Object]
    }
  ]
}

lambda触发器

在lambda日志中查看lambda的触发器事件,发现如下错误

An error occurred (ResourceNotFoundException) when calling the GetPolicy operation: The resource you requested does not exist.

坑点:貌似是codecommit触发器的创建并不会为lambda函数添加基于资源的策略

可以通过在 Lambda 控制台中创建触发器来配置 Lambda 函数,将其作为函数的一部分。这是最简单的方法,因为在 Lambda 控制台中创建的触发器会自动包含调用 Lambda 函数所需的权限。 CodeCommit 如果您在中创建触发器 CodeCommit,则必须包含 CodeCommit 允许调用该函数的策略。

参考文档手动配置lambda的基于资源的策略如下

{
  "Version": "2012-10-17",
  "Id": "default",
  "Statement": [
    {
      "Sid": "my-lambda-test",
      "Effect": "Allow",
      "Principal": {
        "Service": "codecommit.amazonaws.com"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws-cn:lambda:cn-north-1:xxxxxxxxxx:function:test-event",
      "Condition": {
        "ArnLike": {
          "AWS:SourceArn": "arn:aws-cn:codecommit:cn-north-1:xxxxxxxxxx:test-pipeline-variable"
        }
      }
    }
  ]
}

事件记录如下

{
  Records: [
    {
      awsRegion: 'cn-north-1',
      codecommit: [Object],
      customData: null,
      eventId: '5396c72c-4234-42da-a773-8bce2f16272d',
      eventName: 'TriggerEventTest',
      eventPartNumber: 1,
      eventSource: 'aws:codecommit',
      eventSourceARN: 'arn:aws-cn:codecommit:cn-north-1:xxxxxxxxxx:test-pipeline-variable',
      eventTime: '2023-01-01T07:03:49.408+0000',
      eventTotalParts: 1,
      eventTriggerConfigId: '5396c72c-4234-42da-a773-8bce2f16272d',
      eventTriggerName: 'test-trigger',
      eventVersion: '1.0',
      userIdentityARN: 'arn:aws-cn:iam::xxxxxxxxxx:user/zhaojie'
    }
  ]
}

context上下文对象,貌似是老版本的写法,主要是提供执行环境的信息

{
  callbackWaitsForEmptyEventLoop: [Getter/Setter],
  succeed: [Function (anonymous)],
  fail: [Function (anonymous)],
  done: [Function (anonymous)],
  functionVersion: '$LATEST',
  functionName: 'test-trigger',
  memoryLimitInMB: '128',
  logGroupName: '/aws/lambda/test-trigger',
  logStreamName: '2023/01/01/[$LATEST]5161dce816af46529bbe3e668b54e5df',
  clientContext: undefined,
  identity: undefined,
  invokedFunctionArn: 'arn:aws-cn:lambda:cn-north-1:xxxxxxxxxx:function:test-trigger',
  awsRequestId: '8690deaf-8b1d-4414-ac6d-ffd6ef0c4e06',
  getRemainingTimeInMillis: [Function: getRemainingTimeInMillis]
}

参考文档创建lambda函数,对codecommit进行处理

https://gist.github.com/hassy/eaea5a958067211f2fed02ead13c2678

context.succeed / fail aren’t documented anymore, probably meaning that they will be deprecated along with the 0.10 runtime in October 2016.

var aws = require('aws-sdk');
var codecommit = new aws.CodeCommit({ apiVersion: '2015-04-13' });

exports.handler = function(event, context) {
    var references = event.Records[0].codecommit.references.map(function(reference) {return reference.ref;});
    console.log('References:', references);
    var repository = event.Records[0].eventSourceARN.split(":")[5];
    var params = {
        repositoryName: repository
    };
    codecommit.getRepository(params, function(err, data) {
        if (err) {
            console.log(err);
            var message = "Error getting repository metadata for repository " + repository;
            console.log(message);
            context.fail(message);
        } else {
            console.log('Clone URL:', data.repositoryMetadata.cloneUrlHttp);
            context.succeed(data.repositoryMetadata.cloneUrlHttp);
        }
    });
};

配置codecommit更新触发codebuild

参考资料

  • https://aws.amazon.com/cn/blogs/infrastructure-and-automation/how-to-trigger-aws-codebuild-jobs-for-selective-file-changes-in-aws-codecommit/
  • https://docs.aws.amazon.com/zh_cn/codecommit/latest/userguide/how-to-notify.html
  • https://github.com/aws-samples/aws-codecommit-selective-build-trigger/blob/8fba919e0b/README.md

本次的source使用codecommit,为了方便测试,使用官方的触发器方案配置类似webhook的功能。

在这里插入图片描述

主要思路是通过lambda检测codecommit变更,然后主动触发build行为。

拉取代码失败

CLIENT_ERROR: Get "https://git-codecommit.cn-north-1.amazonaws.com.cn/v1/repos/test-pipeline-variable/info/refs?service=git-upload-pack": dial tcp 54.222.20.71:443: i/o timeout for primary source and source version refs/heads/master^{20225df73e15e7f903df07372d69322dab2f18c0}

lambda函数的执行逻辑如下

https://github.com/aws-samples/aws-codecommit-selective-build-trigger/blob/8fba919e0b/src/lambda_code.py

  • 获取最细您的codecommit提交id
  • 检查代码是否发生更改
  • 如果更改则通过codebuild客户端触发build

通过eventbridge触发build行为

通过触发器的方式需要自行编写lambda函数,虽然更加灵活但是复杂度也上来了。较为简单的方式是通过事件驱动的方式,在eventbridge捕获codecommit事件,然后触发build行为

创建规则捕获codecommit的push操作即可

{
  "source": ["aws.codecommit"],
  "detail-type": ["AWS API Call via CloudTrail"],
  "detail": {
    "eventSource": ["codecommit.amazonaws.com"],
    "eventName": ["GitPush"],
    "requestParameters": [ { "exists": true  } ]
  }
}

之后指定目标为codebuild项目

在这里插入图片描述

此时git push会触发build行为,这种方式比codecommit触发器要简单很多

aws codebuild 配置squid正向代理

  • 将 AWS CodeBuild 与代理服务器结合使用

为codebuild启用代理,不在需要在vpc中配置nat,并控制codebuild对外访问

codebuild默认的构建环境启动在aws托管网络中,如果需要配置使用代理,则需要指定vpc

可以配置两种类型的代理服务器

  • 显示代理,需要在codebuild中配置环境变量NO_PROXYHTTP_PROXY, 和HTTPS_PROXY

  • 透明代理,不需要额外配置

整体的架构如下图

img

在公有子网中启动ec2示例并配置squid

sudo yum update -y
sudo yum install -y squid

配置squid主要是修改配置文件

$ ll /etc/squid
total 48
-rw-r--r-- 1 root squid   692 Apr 12  2021 cachemgr.conf
-rw-r--r-- 1 root root    692 Apr 12  2021 cachemgr.conf.default
-rw-r--r-- 1 root root   1817 Apr 12  2021 errorpage.css
-rw-r--r-- 1 root root   1817 Apr 12  2021 errorpage.css.default
-rw-r--r-- 1 root root  12077 Apr 12  2021 mime.conf
-rw-r--r-- 1 root root  12077 Apr 12  2021 mime.conf.default
-rw-r----- 1 root squid  2315 Apr 12  2021 squid.conf
-rw-r--r-- 1 root root   2315 Apr 12  2021 squid.conf.default

配置https流量

sudo mkdir /etc/squid/ssl
cd /etc/squid/ssl
sudo openssl genrsa -out squid.key 2048
sudo openssl req -new -key squid.key -out squid.csr -subj "/C=XX/ST=XX/L=squid/O=squid/CN=squid"
sudo openssl x509 -req -days 3650 -in squid.csr -signkey squid.key -out squid.crt
sudo cat squid.key squid.crt | sudo tee squid.pem

添加以下规则

acl localnet src 10.1.0.0/16 #Only allow requests from within the VPC
acl allowed_sites dstdomain .github.com #Allows to download source from GitHub
acl allowed_sites dstdomain .bitbucket.com #Allows to download source from Bitbucket
acl download_src dstdom_regex .*s3\.cn-north-1\.amazonaws\.com\.cn
acl download_src dstdom_regex git-codecommit\.cn-north-1\.amazonaws\.com.cn

查看squid日志

sudo tail -f /var/log/squid/access.log

访问成功

在这里插入图片描述

私有子网成功访问s3,构建成功

在这里插入图片描述

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

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

相关文章

一个例题,了解包装类

下列代码输出什么,为什么? public class Test3 {public static void main(String[] args) {Integer a1 100;Integer a2 Integer.valueOf(100);Integer a3 new Integer(100);System.out.println(a1 a2);System.out.println(a1 a3);System.out.println(a1.equals(a3));Sys…

分离编译、类型萃取、变参模板

分离编译 一个程序由若干个源文件共同实现,每个源文件单独编译生成目标文件,最后将所有的目标文件链接起来形成单一可执行文件的过程称之为分离编译模式。模板不支持分离编译 编译器报的这种错误属于链接性错误,也就是当程序预处理、编译、汇…

Sutherland–Hodgman 算法介绍(简单易懂)

目录 一、算法介绍 二、算法描述 三、计算细节补充 四、算法总结 一、算法介绍 我们使用Sutherland–Hodgman算法来裁剪多边形的边,一般是给你一个多边形顶点序列(P1,P2,P3,P4,…Pn)让你裁剪,最终裁剪掉裁剪多边形的外部部分(下图黑框就是裁剪多边形…

大中型政企机构网络安全建设发展趋势研究报告

声明 本文是学习大中型政企机构网络安全建设发展趋势研究报告. 下载地址而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 研究背景 大中型政企机构是网络安全保护的重中之重,也是国内网络安全建设投入最大,应用新技术、新产品最…

Proteus8仿真:51单片机25AA020A(SPI接口EEPROM)的使用

51单片机25AA020A实验内容25AA020A引脚功能SPI信号模拟8位写8位读EEPROM读写函数EEPROM写使能EEPROM写一个Byte实验程序例程main.c工程文件Microchip的25AA020A是一个2Kbit串行电可擦除可编程只读存储器(EEPROM)。内存可以通过一个简单的串行外围接口&am…

第三十讲:神州路由器路由重分发配置

RIP和OSPF协议是目前应用最广泛的路由协议,两种协议交接的场合也很多见,两种协议的重分布是比较常见的配置。主校区原来所采用的网络协议为OSPF,而分校区采用的路由协议是RIP,采用RIP和OSPF重分发技术可以解决此问题。 实验拓扑图…

HDLBits练习汇总-14-时序逻辑设计测试--状态机(二)

水箱问题(Exams/ece241 2013 q4) 一个大水库的水为几个用户服务。为了保持足够高的水位,三个传感器以5英寸的间隔垂直放置。当水位高于最高传感器S3时,输入流量应为零。当液位低于最低传感器(Si)时,流量应处于最大(公…

【技术分享】戴尔工作站安装Win10+Ubuntu20.04双系统避坑指南

文章目录引言1.安装前的几个注意事项(避坑指南)1.1.有多块硬盘,该如何分配给Win10和Ubuntu系统?1.2.Ubuntu分区应该怎么分?2.系统安装步骤2.1.下载系统镜像2.2.制作U盘启动盘2.3.进入Win10系统分配系统空间2.4.BIOS设置…

82.【LibraryManger】

图书管理系统(一)、搭建环境1.数据库语句2.导入需要的依赖(二)、配置文件3.创建MyBatis的xml文件 mybais-config.xml4.创建dao层接口以及dao层的 mapper.xml5.创建数据库的资源 database.properties6.创建spring的配置文件 spring-dao.xml【】7.创建service层的接口以及servcie…

查找

章节目录:一、线性查找1.1 概述1.2 代码示例二、二分查找2.1 概述2.2 代码示例三、插值查找3.1 概述3.2 代码示例四、斐波那契查找4.1 概述4.2 代码示例五、结束语一、线性查找 1.1 概述 线性查找又称顺序查找,是一种最简单的查找方法,它的…

若依框架:前端登录组件与图像验证码|用户登录逻辑

在上一篇《若依框架:前端项目结构与初始页面渲染流程》中,我们探讨了与“vue.config.js文件配置、.env模式和环境变量配置、vue-router全局导航守卫配置、vue-router路由配置简介”相关的内容,书接上回,我们继续探讨若依前端项目的…

【C语言进阶】字符函数与字符串函数

目录 1、函数介绍 1.1 strlen 1.2 strcpy 1.3 strcat 1.4 strcmp 1.5 strncpy 1.6 strncat 1.7 strncmp 1.8 strstr 1.9 strtok 1.10 strerror 【补】字符分类函数: 1.11 memcpy 1.12 memmove 1.13 memcmp 1.14 memset 1、函数介绍 1.1 strlen siz…

基于卷积神经网络的高光谱分类(1D、2D、3D-CNN)

算法原理 卷积神经网络(Convolutional Neural Networks,CNN)是深度学习中最常见的一种 算法,它具有强大的特征学习能力。CNN 通过结合局部感知区域、共享权重、空间或者 时间上的降采样来充分利用数据本身包含的局部性等特征&…

绘图仪 与 示波器 Plotter Oscilloscope

【后台管理,这哪里是广告了?图都是百度搜的,又没有销售信息,就事论事而已!】 Plotter : 对低频信号持续测量并绘制到一张很长的纸上,通常是卷纸。 常见的比如传统心电图机(图左&am…

『分分钟玩转VueRouter●下』我对VueRouter在项目中如何使用的理解

路由的设置会根据系统中用户角色的数量而有所不同,大致分为三种单角色同权限、单角色不同权限、多角色。这里的角色均是只一种身份,而不是用户量。接下来的讲解纯属个人见解,大型项目会将不同权限的用户直接分开开发不同的系统。如果是小型多…

c++基础——for循环

for循环是循环的一种 以下是 for 循环的结构: for (初始化; 判断条件; 更新) {循环体; } 执行顺序: for 语句的三个部分中,任何一个部分都可以省略。其中,若省略了判断条件,相当于判断条件永远为真。 for (int i …

fpga实操训练(从模块到系统开发)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 前面我们学习了fpga的一些基本操作,熟悉了这些操作,基本上说fpga已经入门了。但是距离我们用fpga开发产品,这中…

Faster RCNN网络源码解读(Ⅷ) --- RPN网络代码解析(下)RegionProposalNetwork类解析

目录 一、代码作用(rpn_function.py) 二、代码解析 2.1 RegionProposalNetwork类 2.1.1 正向传播过程forward 接着上篇博客的2.1.2节 2.1.2 assign_targets_to_anchors 2.1.3 det_utils.Matcher传入参数 2.1.4 compute_loss 2.1.5 smooth_l1_lo…

你真的会正确使用wait和notify么?

目录 wait和notify原理 API wait 与 sleep的区别 wait 和 notify的正确使用 step1 step2 step3 step4 step5 总结waitnotify wait和notify原理 当我们线程获取某个对象的monitor锁的时候就会成为owner线程,当owner线程条件不满足的时候,就会调用wait方法,该线程就会进…

惠州市政企信息化(互联网)市场调研报告

1.引言 1.1.编写目的 据广东省惠州市惠东县的政企信息化市场调研的客观性数据,分析相关数据,确定市场规模、市场潜力、市场需求,以及需求价值,为后续的市场决策、服务组合决策提供依据,也作为未来根据市场变化而调整…