QCon北京开幕在即|与全球 140+ 顶尖工程师共同解构 AI 时代的技术浪潮 了解详情
写点什么

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

评论

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

【YashanDB知识库】v$instance视图中实例角色含义不明确

YashanDB

yashandb 崖山数据库 崖山DB

简化运维,提升效率:观测云在企业监控中的独特优势

可观测技术

观测云:全球布局的监控先锋

可观测技术

面试题:如何解决缓存和数据库的一致性问题?

王磊

Java

用二维码介绍旅游行程,扫码就能获取路线信息

草料二维码

二维码 草料二维码 旅游行程 旅游简介

内网穿透

源字节1号

小程序 开源 前端 后端

人工智能|思维链

霍格沃兹测试开发学社

观测云:企业数据安全的守护者

可观测技术

淘宝天猫商品详情API:商品描述与图片的获取方法

技术冰糖葫芦

API Explorer api 货币化 API 文档 pinduoduo API

ShareSDK ios端 扩展功能业务设置

MobTech袤博科技

Java 开发者 产品动态

解密可观测行业中的语义规范 — 代码世界中的“语言艺术”

Greptime 格睿科技

数据库 可观测性 代码 系统可观测性 语义规范

开讲在即!免费参加第五届“解放军总医院—麻省理工学院医疗大数据学术交流及 Datathon 活动”会前培训班

ModelWhale

淘宝店铺商品API返回值分析:优化商品展示与推荐

技术冰糖葫芦

API Explorer API 编排 API 文档 pinduoduo API

如何通过一条SQL变更多个分库分表?

NineData

数据库 sql NineData 库分组 DDL变更

MobPush 撤回/取消推送

MobTech袤博科技

Java 开发者 产品动态

技术干货丨InspirePolyFoam 高级应用:发泡仿真

Altair RapidMiner

制造业 仿真 智能制造 新材料 altair

淘宝商品详情数据接口| 淘宝API接口

tbapi

淘宝商品详情接口 淘宝商品API接口 淘宝API 淘宝商品详情数据

客户在哪儿AI助大客户销售最高成功概率的见到目标客户决策层

客户在哪儿AI

ToB营销 ToB获客 ToB增长 大客户营销

异构智算,打赢智算时代「牧野之战」

白洞计划

AI

AV-Comparatives发布企业杀毒软件测评报告

财见

想做出好看的PPT课件?这3款AI生成PPT工具助你一臂之力!

彭宏豪95

人工智能 效率工具 PPT 办公软件 AI生成PPT

盘点那些国际知名黑客(上)

网络安全服务

黑客

【YashanDB知识库】yac修改参数后关闭数据库hang住

YashanDB

yashandb 崖山数据库 崖山DB

Zilliz 推出 Spark Connector:简化非结构化数据处理流程

Zilliz

程序员 AI Milvus Zilliz 向量数据库

MobPush 鸿蒙端SDK API

MobTech袤博科技

Java 开发者 产品动态

MobPush Android常见问题

MobTech袤博科技

开发者 产品动态

轻松获取天气信息:免费天气API一览

幂简集成

API 天气api 免费API

参加的活动或展会每年都是同一批人 ToB企业该怎么办

客户在哪儿AI

ToB营销 活动营销 ToB增长 大客户营销

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