Lambda 部署
此页面记录了使用下一个主要版本 dpl v2 的部署,该版本目前处于测试版阶段。请参阅 我们的博客文章 获取详细信息。当前默认版本为 dpl v1。请查看 此处提供的 dpl v1 文档。
请务必阅读 v2 部署概述。
Travis CI 支持上传到 AWS Lambda。
对于最小配置,请将以下内容添加到您的 .travis.yml
中
deploy:
provider: lambda
access_key_id: <encrypted access_key_id>
secret_access_key: <encrypted secret_access_key>
function_name: <function_name>
edge: true # opt in to dpl v2
状态 #
对 AWS Lambda 部署的支持处于 *稳定* 状态。
已知选项 #
使用以下选项进一步配置部署。
access_key_id |
AWS 访问密钥 ID — **必需**,**密钥**,类型:字符串 |
secret_access_key |
AWS 密钥 — **必需**,**密钥**,类型:字符串 |
region |
Lambda 函数运行所在的 AWS 区域 — 类型:字符串,默认值:us-east-1 |
function_name |
要创建或更新的 Lambda 的名称 — **必需**,类型:字符串 |
role |
要分配给 Lambda 函数的 IAM 角色的 ARN — 类型:字符串,注意:创建新函数时必需 |
handler_name |
Lambda 调用以开始执行的函数。— 类型:字符串,注意:创建新函数时必需 |
module_name |
导出处理程序的模块的名称 — 类型:字符串,需要:handler_name ,默认值:index |
description |
要创建或更新的 Lambda 的描述 — 类型:字符串 |
timeout |
Lambda 应终止函数的功能执行时间(以秒为单位)— 类型:字符串,默认值:3 |
memory_size |
要分配给此 Lambda 的内存量(以 MB 为单位)— 类型:字符串,默认值:128 |
subnet_ids |
要添加到函数的子网 ID 列表 — 类型:字符串或字符串数组,注意:需要访问/密钥用户的 ec2:DescribeSubnets 和 ec2:DescribeVpcs 权限才能工作 |
security_group_ids |
要添加到函数的安全组 ID 列表 — 类型:字符串或字符串数组,注意:需要访问/密钥用户的 ec2:DescribeSecurityGroups 和 ec2:DescribeVpcs 权限才能工作 |
environment |
要添加到函数的环境变量列表 — 类型:字符串或字符串数组,别名:environment_variables ,格式:/[\w\-]+=.+/ ,注意:可以加密以增强安全性 |
runtime |
要使用的 Lambda 运行时 — 类型:字符串,默认值:nodejs10.x ,已知值:nodejs12.x ,nodejs10.x ,python3.8 ,python3.7 ,python3.6 ,python2.7 ,ruby2.7 ,ruby2.5 ,java11 ,java8 ,go1.x ,dotnetcore2.1 ,注意:创建新函数时必需 |
dead_letter_arn |
用于死信队列的 SNS 或 SQS 资源的 ARN。— 类型:字符串 |
kms_key_arn |
用于加密环境变量的 KMS 密钥 ARN。— 类型:字符串 |
tracing_mode |
跟踪模式 — 类型:字符串,默认值:PassThrough ,已知值:Active ,PassThrough ,注意:角色需要 xray:PutTraceSegments xray:PutTelemetryRecords |
layers |
函数层 ARN — 类型:字符串或字符串数组 |
function_tags |
要添加到函数的标签列表 — 类型:字符串或字符串数组,格式:/[\w\-]+=.+/ ,注意:可以加密以增强安全性 |
publish |
创建代码的新版本,而不是替换现有版本。— 类型:布尔值 |
zip |
打包的 Lambda 的路径、要打包的目录或要打包的单个文件 — 类型:字符串,默认值:. |
dot_match |
将隐藏的 .* 文件包含到压缩存档中 — 类型:布尔值 |
共享选项 #
cleanup |
在部署之前清理 Git 工作目录中的构建工件 — 类型:布尔值 |
run |
在部署成功完成后要执行的命令 — 类型:字符串或字符串数组 |
环境变量 #
如果以 AWS_
或 LAMBDA_
为前缀,则所有选项都可以作为环境变量提供。
例如,access_key_id
可以给出如下所示:
AWS_ACCESS_KEY_ID=<access_key_id>
或LAMBDA_ACCESS_KEY_ID=<access_key_id>
插值变量 #
以下变量可用于在 description
上进行插值
dead_letter_arn
function_name
git_author_email
git_author_name
git_branch
git_commit_author
git_commit_msg
git_sha
git_tag
handler_name
kms_key_arn
memory_size
module_name
region
role
runtime
timeout
tracing_mode
zip
插值使用语法 %{variable-name}
。例如,"Current commit sha: %{git_sha}"
将生成一个包含当前 Git sha 的字符串。
此外,当前构建环境中存在的环境变量可以通过标准 Bash 变量插值使用。例如:“Current build number: ${TRAVIS_BUILD_NUMBER}”。有关设置的默认环境变量列表,请参阅 此处。
保护密钥 #
密钥选项值应作为构建配置(.travis.yml
文件)中的加密字符串或存储库设置中的环境变量提供。
环境变量可以在存储库的设置页面上设置,或者使用 travis env set
设置。
travis env set AWS_ACCESS_KEY_ID <access_key_id>
为了在将选项值添加到 .travis.yml
文件时对其进行加密,请使用 travis encrypt
travis encrypt <access_key_id>
或者使用 --add
直接将其添加到 .travis.yml
文件中。请注意,此命令必须在存储库的根目录中运行
travis encrypt --add deploy.access_key_id <access_key_id>
AWS 权限 #
Travis 用于部署的 AWS 用户必须具有以下 IAM 权限才能进行部署
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ListExistingRolesAndPolicies",
"Effect": "Allow",
"Action": [
"iam:ListRolePolicies",
"iam:ListRoles"
],
"Resource": "*"
},
{
"Sid": "CreateAndListFunctions",
"Effect": "Allow",
"Action": [
"lambda:CreateFunction",
"lambda:ListFunctions"
],
"Resource": "*"
},
{
"Sid": "DeployCode",
"Effect": "Allow",
"Action": [
"lambda:GetFunction",
"lambda:UpdateFunctionCode",
"lambda:UpdateFunctionConfiguration"
],
"Resource": [
"arn:aws:lambda:<region>:<account-id>:function:<name-of-function>"
]
},
{
"Sid": "SetRole",
"Effect": "Allow",
"Action": [
"iam:PassRole"
],
"Resource": "arn:aws:iam::<account-id>:role/<name-of-role>"
}
]
}
似乎无法使用通配符 DeployCode
语句,以便 Travis CI 通过将资源指定为 arn:aws:lambda:<region>:<account-id>:function:*
来部署特定区域中的任何函数,但可以通过将完整 ARN 指定为一个或多个函数来限制每个函数的部署权限,例如 arn:aws:lambda:<region>:<account-id>:function:<name>
。
Pull Request #
请注意,Pull Request 构建完全跳过部署步骤。