程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了AWS lambda 升级包大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决AWS lambda 升级包?

开发过程中遇到AWS lambda 升级包的问题如何解决?下面主要结合日常开发的经验,给出你关于AWS lambda 升级包的解决方法建议,希望对你解决AWS lambda 升级包有所启发或帮助;

根据 AWS,他们正在从 python lambda 环境中删除 botocore(https://aws.amazon.com/blogs/developer/removing-the-vendored-version-of-requests-from-botocore/)

他们说我们需要在使用它之前从终端窗口运行 pip install 请求。每当我们使用 Gitlab CI/CD 管道将云基础设施部署到 AWS 时,我们如何运行“pip3 install”?有人有什么想法吗?

这是示例管道

zip-creation:
  image: "python:3.7"
  stage: package
  before_script:
    - apt update
    - apt install zip -y
    - pip install awscli
  script:
    - cd scripts/app-infra/
    - zip -r puloski-services-log-error.zip puloski-services-log-error.py
    - zip -r puloski-subscription-filter-custom-resource.zip puloski-subscription-filter-custom-resource.py
    - zip -r puloski-s3.zip puloski-s3.py cfnresponse.py
    - zip -r puloski-infra.zip *.yml *.Json puloski-ssm-param-versions.sh puloski-services-log-error.zip puloski-subscription-filter-custom-resource.zip puloski-s3.zip -x buildspec.yml gitlab-ci.yml *.py yamllint-rules
  artifacts:
    paths:
      - scripts/app-infra/buildspec.zip
      - scripts/app-infra/puloski-infra.zip
    expire_in: 3 day

解决方法

在 CI/CD 中构建 Python Lambda 可能有点棘手,因为“交叉编译”在 Python 世界中还不是一件大事(我认为 wheels 应该可以解决这个问题)。

交叉编译意味着在一个操作系统上“构建”一个(Python)程序,该程序可以在另一个操作系统和/或架构上运行。

简单的 Python 依赖应该不是问题,因为它们不需要任何操作系统特定的依赖。但是一些图像处理和其他依赖项需要为特定操作系统和架构编译的二进制文件。

首先要知道的是,AWS Lambda 使用的是 amd64 架构和 Linux 内核。

因此,如果您想确保您的依赖项在 Lambda 中正常运行,您需要在具有 Linux 内核和 pip install -r requirements.txt 架构的系统上运行 amd64

幸运的是,这里有一个名为 LambCI 的项目可以帮助您。对于这个确切的用例,它们有 pre-build Docker images,因此您无需费心构建它们。

一个非常简单的 .gitlab-ci.yml 示例可能如下所示:

stages:
  - build

package layer:
  stage: build 
  image: lambci/lambda:build-python3.8
  script:
    - pip install -r requirements.txt --target "${CI_PROjeCT_DIR}/libs/python"
    - cd ${CI_PROjeCT_DIR}/libs
    - zip --recurse-paths layer.zip .

这会将您在 requirements.txt 中定义的所有依赖项下载到构建管道工作目录中名为 libs/python 的目录中。不要介意这将在您的管道作业工作目录中。它不会提交给您的回购。工作结束后,这将再次消失。下载后,它会将所有下载的文件zip 放入名为 layer.zip 的 ZIP 存档中。这是您需要用作 Lambda 层并部署到 AWS 的内容。由于您没有说明您使用的是哪种部署工具(aws-cli、Terraform、CDK 等),因此一旦您获得了 zip,我不知道如何继续。

需要注意的一件重要事情:the dependencies need to be in a specific directory in the Lambda ZIP archive。对于 Python,这是 python/python/lib/python3.8/site-packages/。这就是为什么上述“代码”将需求下载到 libs/python,然后将 python 目录归档到“提示归档”中。

个人说明:我们正在运行很多 Lambda,如果不是 Lambda@Edge(你只能使用 NodeJS 或 Python)或绝对需要 Python 的东西(一些机器学习的东西),我强烈推荐使用更容易构建和编译的东西,比如 Go。让 Python Lambda 工作起来可能非常麻烦。

例如:您可以在任何操作系统上构建 Go 二进制文件以在 AWS Lambda 上运行,如下所示:

GOOS=linux GOARCH=amd64 go build

然后只需压缩生成的二进制文件并部署它即可。

,

您可以更新管道以包含您的 Lambda 函数所需的包:

script:
    - cd scripts/app-infra/ && mkdir packages && cd packages
    - pip install requests -t . #or python3 -m pip install requests -t .
    - cd ..
    #Making zip with respective files only. Including requests package for all zip files in this example.
    #Package1
    - cp puloski-services-log-error.py packages/
    - zip -r puloski-services-log-error.zip packages/*
    - rm packages/puloski-services-log-error.py
    #Package2
    - cp puloski-subscription-filter-custom-resource.py packages/
    - zip -r puloski-subscription-filter-custom-resource.zip packages/*
    - rm packages/puloski-subscription-filter-custom-resource.py
    #Package3
    - cp {puloski-s3.py,cfnresponse.py} packages/
    - zip -r puloski-s3.zip packages/*
    - rm packages/puloski-s3.py packages/cfnresponse.py
    - zip -r puloski-infra.zip *.yml *.json puloski-ssm-param-versions.sh puloski-services-log-error.zip puloski-subscription-filter-custom-resource.zip puloski-s3.zip -x buildspec.yml gitlab-ci.yml *.py yamllint-rules packages

在这里您可以看到我们已经在特定目录中安装了请求包,并在包含该包及其依赖项的同时制作了 zip 文件。

大佬总结

以上是大佬教程为你收集整理的AWS lambda 升级包全部内容,希望文章能够帮你解决AWS lambda 升级包所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:lambda