🚀 lambda-action
用于将 Lambda 代码部署到现有函数的 GitHub Action
用法
将 zip 文件上传到 AWS Lambda 函数。
name: 部署到 lambda
on: [push]
jobs:
deploy_zip:
name: 部署 lambda 函数
runs-on: ubuntu-latest
strategy:
matrix:
go-version: [1.21]
steps:
- name: 检出源代码
uses: actions/checkout@v3
- name: 安装 Go
uses: actions/setup-go@v1
with:
go-version: ${{ matrix.go-version }}
- name: 构建二进制文件
run: |
cd example && CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -v -a -o main main.go && zip deployment.zip main
- name: 默认部署
uses: appleboy/lambda-action@v0.2.0
with:
aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws_region: ${{ secrets.AWS_REGION }}
function_name: gorush
zip_file: example/deployment.zip
memory_size: 128
timeout: 10
handler: foobar
role: arn:aws:iam::xxxxxxxxxxx:role/test1234
runtime: nodejs12.x
使用源文件部署 lambda 函数
name: 部署到 lambda
on: [push]
jobs:
deploy_source:
name: 从源代码部署 lambda
runs-on: ubuntu-latest
steps:
- name: 检出源代码
uses: actions/checkout@v3
- name: 默认部署
uses: appleboy/lambda-action@v0.2.0
with:
aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws_region: ${{ secrets.AWS_REGION }}
function_name: gorush
source: example/index.js
设置演练模式以验证请求参数和访问权限,而不修改函数代码。
name: 部署到 lambda
on: [push]
jobs:
deploy:
name: 部署 lambda 函数
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: AWS Lambda 部署
uses: appleboy/lambda-action@v0.2.0
with:
aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws_region: ${{ secrets.AWS_REGION }}
function_name: gorush
zip_file: output.zip
dry_run: true
从特定分支部署,master
或 release
。
name: 部署到 lambda
on: [push]
jobs:
deploy:
name: 部署 lambda 函数
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: AWS Lambda 部署
if: github.ref == 'refs/heads/master'
uses: appleboy/lambda-action@v0.2.0
with:
aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws_region: ${{ secrets.AWS_REGION }}
function_name: gorush
zip_file: output.zip
dry_run: true
添加多个环境变量:
name: 部署到 lambda
on: [push]
jobs:
deploy:
name: 部署 lambda 函数
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: AWS Lambda 部署
if: github.ref == 'refs/heads/master'
uses: appleboy/lambda-action@v0.2.0
with:
aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws_region: ${{ secrets.AWS_REGION }}
function_name: gorush
zip_file: output.zip
dry_run: true
+ environment: foo=bar,author=appleboy
输入变量
有关更详细的信息,请参阅 action.yml。
- aws_region - AWS 区域
- aws_access_key_id - AWS 访问密钥 ID
- aws_secret_access_key - AWS 秘密访问密钥
- zip_file - zip 文件的文件路径
- source - 您想要压缩的文件列表
- s3_bucket - 与您的函数位于同一 AWS 区域的 Amazon S3 存储桶。该存储桶可以位于不同的 AWS 账户中。
- s3_key - 部署包的 Amazon S3 键。
- dry_run - 设置为 true 可以验证请求参数和访问权限,而不修改函数代码。
- debug - 成功上传 Lambda 后显示调试信息(默认为
false
)。 - publish - 设置为 true 可以在更新代码后发布函数的新版本。(默认为
true
)。 - reversion_id - 仅在修订 ID 与指定的 ID 匹配时更新函数。
- memory_size - 您的函数可以访问的内存量。增加函数的内存也会增加其 CPU 分配。默认值为 128 MB。该值必须是 64 MB 的倍数。
- timeout - Lambda 允许函数运行的时间,超过此时间将停止它。默认为 3 秒。允许的最大值为 900 秒。
- handler - Lambda 调用以执行您的函数的代码中的方法名称。
- role - 函数的执行角色。模式:
arn:(aws[a-zA-Z-]*)?:iam::\d{12}:role/?[a-zA-Z_0-9+=,.@\-_/]+
- runtime - 函数运行时的标识符。
nodejs | nodejs4.3 | nodejs6.10 | nodejs8.10 | nodejs10.x | nodejs12.x | nodejs14.x | nodejs16.x | java8 | java8.al2 | java11 | python2.7 | python3.6 | python3.7 | python3.8 | python3.9 | dotnetcore1.0 | dotnetcore2.0 | dotnetcore2.1 | dotnetcore3.1 | dotnet6 | nodejs4.3-edge | go1.x | ruby2.5 | ruby2.7 | provided | provided.al2 | nodejs18.x
- environment - Lambda 环境变量。例如:
foo=bar,author=appleboy
- image_uri - Amazon ECR 注册表中容器镜像的 URI。
- subnets - 选择 Lambda 用于设置 VPC 配置的 VPC 子网。
- securitygroups - 选择 Lambda 用于设置 VPC 配置的 VPC 安全组。
- description - 函数的描述。
- layers - 要添加到函数执行环境的函数层列表。通过 ARN 指定每个层,包括版本。
- tracing_mode - 将模式设置为
Active
以使用 X-Ray 对传入请求的子集进行采样和跟踪。 - max_attempts - waiter 应尝试检查资源目标状态的最大次数。
- architectures - 函数支持的指令集架构。
arm64 | x86_64
- ipv6_dual_stack - 在 VPC 配置中启用或禁用双栈 IPv6 支持
有关详细信息,请参阅 UpdateFunctionConfiguration。
AWS 策略
如果您想与 GitHub Actions 集成,请添加以下 AWS 策略。请将 REGION
、ACCOUNT
和 LAMBDA_NAME
变量更改为您的具体数据。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"iam:ListRoles",
"lambda:UpdateFunctionCode",
"lambda:CreateFunction",
"lambda:GetFunction",
"lambda:UpdateFunctionConfiguration",
"lambda:GetFunctionConfiguration"
],
"Resource": "arn:aws:lambda:${REGION}:${ACCOUNT}:function:${LAMBDA_NAME}"
}
]
}
我们的函数需要权限将跟踪数据上传到 X-Ray。当您在 Lambda 控制台中激活跟踪时,Lambda 会将所需的权限添加到您函数的执行角色中。否则,请将 AWSXRayDaemonWriteAccess 策略添加到执行角色。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"xray:PutTraceSegments",
"xray:PutTelemetryRecords",
"xray:GetSamplingRules",
"xray:GetSamplingTargets",
"xray:GetSamplingStatisticSummaries"
],
"Resource": [
"*"
]
}
]
}