写点什么

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:001054

评论

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

实测Tengine开源的Dubbo功能

捉虫大师

dubbo 网关 tengine

《复仇者联盟》AI换脸平台

不脱发的程序猿

人工智能 开源 AI 复仇者联盟

教你用User Story设计BI驾驶舱

薄荷点点

数据产品经理 用户故事地图 产品需求

集成学习中的随机森林

华为云开发者联盟

机器学习 决策树 随机森林 集成学习 Bagging

OCR性能优化:从神经网络到橡皮泥

华为云开发者联盟

神经网络 机器学习 OCR 橡皮泥 CNN网络

最佳入门系列 | 何为服务网关?

架构精进之路

微服务 5月日更

为什么你的Docker容器刚启动就停了?

运维研习社

Docker Linux 5月日更

☕️【Java 技术之旅】从底层分析LockSupport原理机制

码界西柚

Java JVM lock锁 5月日更 LockSupport

并发王者课-青铜6:借花献佛-如何格式化Java内存工具JOL输出

MetaThoughts

Java 多线程 并发 并发王者课

2021百度之星报名开启 特设“小星星”奖项鼓励少年AI人才

百度大脑

AI 百度之星 少年

Qemu KVM Guest增强简述

焱融科技

云计算 虚拟机 高性能 存储 qemu

聊聊微服务治理的落地问题 | Geek大咖说第二期

百度Geek说

微服务 自动化

索信达控股:金融机构如何打造最适合自己的个性化推荐系统?

索信达控股

大数据 金融科技 金融 个性化推荐 营销数字化

BI系统里的数据赋能与业务决策

薄荷点点

数据产品经理 决策 BI 数据驱动 风险识别

网格策略交易软件,量化马丁倍投交易机器人

要想成为牛人,推荐学习哪种编程语言?

实力程序员

2021年爆火的低代码开发技术,对企业而言有什么好处?

优秀

低代码

GitHub开源14.5万行阿波罗11号源代码

不脱发的程序猿

GitHub 开源 阿波罗11号

哈工大与华为终端有限公司签署首个HarmonyOS高校协同育人合作协议

科技汇

从源码中来,到业务中去,React性能优化终极指南

有道技术团队

大前端 React 有道精品课

合作伙伴眼中的HarmonyOS 专访方太智能厨电专家俞贵涛

科技汇

【Flutter 专题】124 日常问题小结 (三) 自定义 Dialog 二三事

阿策小和尚

5月日更 Flutter 小菜 0 基础学习 Flutter Android 小菜鸟

Django 之视图篇

若尘

django 视图 Python编程 5月日更

集群镜像:实现高效的分布式应用交付

阿里巴巴云原生

数据库 容器 开发者 云原生 存储

MySQL 数据库救火:磁盘爆满了,怎么办?

华为云开发者联盟

数据库 磁盘 MySQL 数据库 日志文件 磁盘爆满

阿里云联合中国信通院发布《云计算开放应用架构》标准,加速云原生应用规模化落地进程

阿里巴巴云原生

容器 开发者 运维 云原生 k8s

VSCode 无鼠标操作快捷键对比Atom

追风的少年

Dubbo 序列化

青年IT男

dubbo

并发王者课-青铜5:一探究竟-如何从synchronized理解Java对象头中的锁

MetaThoughts

Java 多线程 并发 并发王者课

另一种总结的方式

Nydia

学习

谋而后动:解读数仓计划生成中行数估算和路径生成的奥秘

华为云开发者联盟

计划 数仓 GaussDB(DWS) 查询语句 估算

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