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

阅读数:32 2019 年 11 月 1 日 08:00

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

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

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

架构图

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

  1. 通过 git 命令提交代码
  2. 通过部署在 EC2 中的 Jenkins 拉取 Github 上的代码
  3. 将代码部署到 Lambda,完成代码部署
  4. 上传一张图片到 S3
  5. 触发 S3 的 ObjectCreate 事件,调用 Lambda 生成缩略图
  6. 将生成的缩略图储存到指定位置

创建 Lambda

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

  • 输入 Lambda 名称
  • 选择从模板创建新角色
  • 点击创建函数
  • 记录已创建 Lambda 函数的 ARN,位于 Lambda 函数右上角

AWS Lambda 配合 Jenkins 实现自动化持续部署 AWS Lambda 配合 Jenkins 实现自动化持续部署 修改处理程序为 CreateThumbnail.handler

AWS Lambda 配合 Jenkins 实现自动化持续部署 创建 S3 存储桶

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

源存储桶

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

目标桶

AWS Lambda 配合 Jenkins 实现自动化持续部署
进入源存储桶,并选中属性标签

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

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

  • 添加通知
  • 输入名称
  • 配置事件类型,及 Lambda 函数

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

修改 Lambda 角色

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

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

AWS Lambda 配合 Jenkins 实现自动化持续部署 从控制台进入 IAM,选中角色,找到在 Lambda 里创建的新角色,点击附加策略

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

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

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

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

如果出现以下错误

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

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

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

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

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

安装推荐插件

配置用户

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

安装 AWS Lambda Plugin,NodeJS Plugin

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

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

在 Available 标签页搜索并安装

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

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

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

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

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

aws configure

Jenkins 环境 – 创建 Jenkins build

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

创建名称

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

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

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

配置触发器

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

配置运行环境

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

添加 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

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

保存配置并测试

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

点击 Console Output 查看构建日志

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

构建成功!

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

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

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

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

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

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

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

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

作者介绍

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

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

本文转载自 AWS 技术博客。

原文链接:
https://amazonaws-china.com/cn/blogs/china/aws-lambda-jenkins-automatically-deployment/

欲了解 AWS 的更多信息,请访问【AWS 技术专区】

评论

发布