亚马逊AWS官方博客
AWS Lambda 配合 Jenkins 实现自动化持续部署
AWS Lambda是AWS无服务器框架中的重要组成部分,而开发、测试和部署Lambda函数需要经过一个较为枯燥的过程:在集成开发环境(IDE)中编写函数,然后将其打包,并上传到AWS使用控制台进行测试。事实上,您可以在本地进行编写测试,并将其上传到自己的代码库,然后使用CICD(Continuous Integration/Continuous Development)工具来进行集成部署。
本文中将介绍如何使用Jenkins在AWS上进行Lambda开发部署。更多有关AWS Lambda 介绍可参考链接https://amazonaws-china.com/lambda/
架构图
- 通过git命令提交代码
- 通过部署在EC2中的Jenkins拉取Github上的代码
- 将代码部署到Lambda,完成代码部署
- 上传一张图片到S3
- 触发S3的ObjectCreate事件,调用Lambda生成缩略图
- 将生成的缩略图储存到指定位置
创建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等方面有丰富的经验。