Project Icon

lambda-action

GitHub Action 实现 AWS Lambda 函数自动化部署

lambda-action 是一个 GitHub Action,用于自动化部署和管理 AWS Lambda 函数。它支持通过 zip 文件或源代码更新函数,允许配置内存、超时、处理程序等参数。该工具提供干运行模式用于验证设置,支持多环境部署,并可配置 VPC、安全组和 X-Ray 追踪。lambda-action 优化了 Lambda 函数的持续集成和部署流程,适用于 Node.js、Python、Java 等多种运行时环境。

🚀 lambda-action

用于将 Lambda 代码部署到现有函数的 GitHub Action

logo

用法

将 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

从特定分支部署,masterrelease

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 策略。请将 REGIONACCOUNTLAMBDA_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": [
        "*"
      ]
    }
  ]
}
项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号