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.xnodejs10.xpython3.8python3.7python3.6python2.7ruby2.7ruby2.5java11java8go1.xdotnetcore2.1,注意:创建新函数时必需
dead_letter_arn 用于死信队列的 SNS 或 SQS 资源的 ARN。— 类型:字符串
kms_key_arn 用于加密环境变量的 KMS 密钥 ARN。— 类型:字符串
tracing_mode 跟踪模式 — 类型:字符串,默认值:PassThrough,已知值:ActivePassThrough,注意:角色需要 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 构建完全跳过部署步骤。

另请参阅 #