亚马逊AWS官方博客
使用 AWS CDK 自动化部署自动生成 PDF 缩略图 Serverless 服务
1.背景介绍
在AWS平台下,利用S3存储桶自动触发Lambda完成PDF缩略图的生成。使用AWS CDK 完成应用的全栈部署。
文中使用AWS海外帐号进行演示,并在最后对此示例在AWS中国区域的差异进行补充说明。也可直接下载文中提供的源代码在AWS海外、中国区进行自动化部署。
1.1AWS CDK
预置云应用程序是一个具有挑战性的过程,您需要执行手工操作、编写自定义脚本、维护模板或学习特定领域的语言。
AWS 云开发工具包 (AWS CDK) 是一种开源软件开发框架,用以使用熟悉的编程语言(目前支持TypeScript, JavaScript, Python, C# 和 Java)模拟和预置云应用程序资源。AWS CDK 通过 AWS CloudFormation 以安全、可重复的方式预置AWS资源,使开发人员能够更加友好的方式预置AWS应用。
1.2Ghostscript
Ghostscript是一套建基于Adobe、PostScript及可移植文档格式(PDF)的页面描述语言等而编译成的自由软件(GNU Affero GPL license)。本文在Lambda中使用Ghostscript完成pdf到缩略图的转换工作。
2.架构介绍
为PDF文件生成缩略图的流程:
用户上传PDF文件到S3存储桶,事件触发Lambda进行格式转换工作,并将缩略图保存到S3存储桶。
3.从零开始构建应用程序及其部署
示例使用Amazon AMI 2启动的EC2实例做为编程、部署环境。
3.1[可选]构建支持Ghostscript的Lambda运行环境需要的
下面会使用AWS Lambda Layer,将Ghostscript添加到Lambda的运行环境之中。
添加内容:
开始构建Ghostscript的Lambda运行环境
构建中使用lambci/lambda-base-2:build为基础镜像,此镜像提供了AWS Lambda运行的沙盒本地环境,在此环境中可以build各种Lambda自定义运行环境。本文构建ghostscript运行环境,并输出gs.zip包,在后面的AWS CDK自动部署中,将使用此包发布AWS Lambda Layer,为Lambda提供Ghostscript运行环境。
3.2安装nodejs
3.3安装 AWS-CDK
3.4构建AWS CDK应用程序
- 使用AWS CDK初始化项目
- 安装nodejs依赖
- 复制GhostScript依赖包zip到项目中
- 添加Lambda 运行Code
Ghostscript 常用参数说明, https://www.ghostscript.com/doc/current/Use.htm:
DEVICE | Ghostscript 输出的格式 |
SAFER | 启用对文件的访问控制 |
BATCH | 执行结束后退出 |
NOPAUSE | 禁用提示和暂停 |
PageList | 转换的页数 |
- 添加AWS CDK部署AWS资源相关代码
- 设置AWS CDK 运行时需要的ACCESS KEY 和SECRET KEY等信息。
- 运行CDK 部署应用程序
3.5验证
在CloudFormation中,可以看到所有创建的资源:
在AWS CDK创建的S3存储桶中上传pdf,自动生成缩略图
3.6删除所有实验资源
4.自动化完成全栈部署
[AWS海外]使用Amazon AMI 2启动的EC2实例做为部署环境,下载并解压附件
thumbnail_ww.zip
5.AWS中国区部署
[AWS中国区]使用Amazon AMI 2启动的EC2实例做为部署环境,下载并解压附件
thumbnail_cn.zip
截止当前(2019年10月),AWS 中国区Lambda 暂不支持环境变量,部署之后需修改部署的Lambda 中关于环境变量的代码:
修改为:
5.1中国区部署差异说明
- 在installEnv.sh 中,为npm, Dockerhub 设置中国加速,
- 在lib/ thumbnail-stack.js中去除Lambda暂不支持的环境变量