写点什么

AWS Lambda 配合 Jenkins 实现自动化持续部署

  • 2019-11-01
  • 本文字数:2185 字

    阅读完需:约 7 分钟

AWS Lambda 配合 Jenkins 实现自动化持续部署

AWS Lambda 是 AWS 无服务器框架中的重要组成部分,而开发、测试和部署 Lambda 函数需要经过一个较为枯燥的过程:在集成开发环境(IDE)中编写函数,然后将其打包,并上传到 AWS 使用控制台进行测试。事实上,您可以在本地进行编写测试,并将其上传到自己的代码库,然后使用 CICD(Continuous Integration/Continuous Development)工具来进行集成部署。


本文中将介绍如何使用 Jenkins 在 AWS 上进行 Lambda 开发部署。更多有关 AWS Lambda 介绍可参考链接https://amazonaws-china.com/lambda/

架构图


  1. 通过 git 命令提交代码

  2. 通过部署在 EC2 中的 Jenkins 拉取 Github 上的代码

  3. 将代码部署到 Lambda,完成代码部署

  4. 上传一张图片到 S3

  5. 触发 S3 的 ObjectCreate 事件,调用 Lambda 生成缩略图

  6. 将生成的缩略图储存到指定位置

创建 Lambda

从控制台进入 Lambda,选择从头开始创作


  • 输入 Lambda 名称

  • 选择从模板创建新角色

  • 点击创建函数

  • 记录已创建 Lambda 函数的 ARN,位于 Lambda 函数右上角




修改处理程序为 CreateThumbnail.handler

创建 S3 存储桶

从控制台进入 S3 创建存储桶,输入自定义桶名,这边需要创建两个存储桶,一个是源数据桶,另一个是目标数据桶


源存储桶



目标桶



进入源存储桶,并选中属性标签



选中高级设置中的事件,按照以下顺序依次操作并保存


  • 添加通知

  • 输入名称

  • 配置事件类型,及 Lambda 函数



修改 Lambda 角色


在之前的 Lambda 函数创建的过程中,自动创建了一个 Lambda 角色,但是这个角色只有最基本的创建 CloudWatch Logs 的权限,还需要对创建的 S3 存储桶有相应的进行读写的权限。


首先获取 S3 存储桶 ARN,选中存储桶,点击复制存储桶 ARN



从控制台进入 IAM,选中角色,找到在 Lambda 里创建的新角色,点击附加策略



在搜索栏中输入 S3,选中 AmazonS3FullAccess 并附加(在此案例中)


Jenkins 环境 – Java 8

下载并解压 Java 8


wget http://download.oracle.com/otn-pub/java/jdk/8u151-b12/e758a0de34e24606bca991d704f6dcbf/jdk-8u151-linux-x64.tar.gz


tar -zxvf jdk-8u151-linux-x64.tar.gz


创建 Java 目录,并将 Java 移动至此目录


sudo mkdir -p /usr/local/java/jdk1.8


sudo mv jdk1.8.0_151/* /usr/local/java/jdk1.8/


配置环境变量


sudo vim /etc/profile


export JAVA_HOME=/usr/local/java/jdk1.8


export JRE_HOME=/usr/local/java/jdk1.8/jre


export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar


export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$JAVA_HOME


source /etc/profile


配置软连接


sudo rm -rf /usr/bin/java


sudo ln -s /usr/local/java/jdk1.8/bin/java /usr/bin/java

Jenkins 环境 – Jenkins,Git 和 Nginx

使用私有密钥连接到实例,更新仓库并安装 Nginx 和 Jenkins


sudo yum update -y


sudo yum install -y nginx git


在 Amazon Linux 上安装 Jenkins,需要添加 Jenkins 仓库并从这里开始安装 Jenkins.


sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo


sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key


sudo yum install -y jenkins


编辑 Nginx 配置文件(/etc/nginx/nginx.conf) 并修改服务器配置:


server {


listen 80;


server_name _;


location / {


proxy_pass http://127.0.0.1:8080;


}


}


启动 Jenkins 和 Nginx 服务


service jenkins start


如果出现以下错误



sudo vim /etc/init.d/jenkins


修改配置文件


candidates="


#/etc/alternatives/java


/usr/bin/java


#/usr/lib/jvm/java-1.8.0/bin/java


#/usr/lib/jvm/jre-1.8.0/bin/java


#/usr/lib/jvm/java-1.7.0/bin/java


#/usr/lib/jvm/jre-1.7.0/bin/java


"


service nginx start


chkconfig jenkins on


chkconfig nginx on


Jenkins 环境 – 配置 Jenkins


输入 EC2 的公有 DNS



通过以下命令找到初始密码


sudo cat /var/lib/jenkins/secrets/initialAdminPassword


安装推荐插件


配置用户



安装 AWS Lambda Plugin,NodeJS Plugin




在 Available 标签页搜索并安装




安装完成后,进入 Manage Jenkins -> Global Tool Configuration 页面,找到 Node.JS



接下来需要配置AWS CLI,并调用以下命令确认


aws configure

Jenkins 环境 – 创建 Jenkins build


创建名称



输入 Repository URL: https://github.com/LiArthur/create-thumbnails-lambda.git



配置触发器



配置运行环境



添加 Build step


选择 Excute shell,输入以下内容


npm install


grunt lambda_package


aws lambda update-function-code --function-name <Lambda ARN> --zip-file fileb://dist/create-thumbs-lambda_0-0-3_latest.zip --region cn-north-1



保存配置并测试



点击 Console Output 查看构建日志



构建成功!



当我们的 Lambda 部署成功之后,便可以开始测试 Lambda 的功能了。


进入源存储桶并上传一张图片



点击上传后进入目标存储桶便可以看到新生成的图片,如果没有看到可以稍等片刻,再点击刷新按钮刷新



将图片下载下来可以看到,原图和缩略图的大小比较



作者介绍



李亚斯,AWS 解决方案架构师,负责基于 AWS 的云计算方案架构的咨询和设计,同时致力于 AWS 云服务在国内的应用和推广,毕业于同济大学软件工程专业,毕业后直接加入亚马逊 AWS 中国。熟悉多种编程语言,有数年的 C 语言经验,在移动开发,IoT 等方面有丰富的经验。


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/aws-lambda-jenkins-automatically-deployment/


2019-11-01 08:00834

评论

发布
暂无评论
发现更多内容

面对AI,我们如何给自己的工作留条“后路”?

脑极体

AI

全新征程,Pencils Protocol 成首个单链 TVL 突破 3 亿美元的项目

石头财经

如何选择最佳项目进度管理工具?一站式指南

爱吃小舅的鱼

项目管理 项目进度管理

最佳缺陷管理解决方案:2024年8大工具

爱吃小舅的鱼

缺陷管理系统 缺陷管理 缺陷管理工具

EdgeOne安全专项实践:上传文件漏洞攻击详解与防范措施

我再BUG界嘎嘎乱杀

网络安全 安全 漏洞 文件上传 EdgeOne

爱回收平台API:关键词搜索商品列表数据接口|爱回收平台数据采集

tbapi

爱回收 爱回收API 爱回收商品数据接口 爱回收商品列表数据接口 爱回收商品列表数据采集

顶级项目管理系统大揭秘:全周期10大热门工具

爱吃小舅的鱼

项目管理 项目管理工具 项目管理软件

聚焦于 Melos 数据生命网络,用户如何参与到生态的建设中?

石头财经

蓝易云 - 云服务器怎么收费的

百度搜索:蓝易云

云计算 云服务器 虚拟主机 香港服务器 高防服务器

(已封装)电商API解析指南:深入理解店铺商品搜索结果

代码忍者

API Explorer API 编排 api 货币化 API 接口

为小团队挑选项目进度管理软件的终极指南

爱吃小舅的鱼

项目管理 项目进度管理

又一成就,Pencils Protocol单链 TVL 突破 3 亿美元

西柚子

又一成就,Pencils Protocol单链 TVL 突破 3 亿美元

BlockChain先知

聚焦于 Melos 数据生命网络,用户如何参与到生态的建设中?

BlockChain先知

【活动预告】Easysearch 结合大模型实现 RAG

极限实验室

大模型 easysearch 极限科技 rag 搜索客社区

蓝易云 - 能ping通tracert不通怎么回事?

百度搜索:蓝易云

云计算 ping 香港服务器 高防服务器 Tracert

图解自定义 Dialog 对话框

chasel

TapData 信创数据源 | 国产信创数据库达梦(Dameng)数据迁移指南,加速国产化进程,推进自主创新建设

tapdata

达梦数据库 达梦数据迁移 达梦增量同步

缺陷管理系统指南:中大企业的首选

爱吃小舅的鱼

缺陷管理 中大型企业 缺陷管理工具推荐

硅纪元视角 | 摩根大通拥抱AI:LLM Suite开启金融行业新篇章!

硅纪元

蓝易云 - C语言常见命名规范

百度搜索:蓝易云

云计算 运维 C语言 云服务器 高防服务器

蓝易云 - Vite配置环境变量以及反向代理请求

百度搜索:蓝易云

云计算 运维 vite 云服务器 高防服务器

LLM 应用可观测性:从 Trace 视角展开的探索与实践之旅

阿里巴巴云原生

阿里云 云原生 可观测

天翼云TeleDB数据库获得中国信通院两项测试证书

Geek_2d6073

又一成就,Pencils Protocol单链 TVL 突破 3 亿美元

股市老人

你在找提升效率的解决方案还是追求效果的解决方案

客户在哪儿AI

内容营销 ToB营销 大客户营销

不断发展的AI监管如何影响网络安全

我再BUG界嘎嘎乱杀

人工智能 AI 网络安全 安全 网安

蓝易云 - springmvc开启异步请求报错Java code using the Servlet API or by adding "true" to servlet and

百度搜索:蓝易云

spring 运维 vite 云服务器 高防服务器

演播室如何合理使用LED显示屏

Dylan

技术 活动 综艺节目 LED display LED显示屏

「漏洞原理」SQL 注入漏洞之理论讲解

我再BUG界嘎嘎乱杀

网络安全 安全 漏洞 SQL注入

全新征程,Pencils Protocol 成首个单链 TVL 突破 3 亿美元的项目

加密眼界

AWS Lambda 配合 Jenkins 实现自动化持续部署_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章