开发者社区 > 云原生 > Serverless > 正文

请问一下,我在s.yaml的pre-deploy添加的二进制包为什么调用不到了呢?编译和instal

请问一下,我在s.yaml的pre-deploy添加的二进制包为什么调用不到了呢?编译和install都正常的。【提问6】

展开
收起
山海行 2023-05-23 09:21:36 136 0
5 条回答
写回答
取消 提交回答
  • 依赖要装到代码包里才行,不然函数环境里拿不到。

    此答案来自钉钉群“阿里函数计算官网客户"

    2023-05-23 18:47:49
    赞同 展开评论 打赏
  • 如果您在 s.yaml 的 pre-deploy 中添加了二进制包,并且编译和安装都没有出现问题,但是在函数中调用时出现了问题,可能是因为函数无法找到二进制包的位置。

    在函数计算中,您需要将二进制包打包到函数部署包中,并在代码中指定二进制包的位置。具体来说,您可以按照以下步骤操作:

    1. 将二进制包放置在函数代码目录下的一个子目录中,例如 bin/
    2. s.yaml 文件中指定函数部署包中的二进制包位置,例如:
    pre-deploy:
      - cp /path/to/binary bin/
      - cd bin && tar czvf binary.tar.gz binary
    functions:
      myFunction:
        runtime: python3
        handler: index.handler
        codeUri: ./
        installDependency: true
        environmentVariables:
          BINARY_PATH: /code/bin/binary.tar.gz
    
    1. 在函数代码中解压二进制包并调用其中的可执行文件,例如:
    import os
    import tarfile
    
    def handler(event, context):
        # 解压二进制包
        with tarfile.open(os.environ['BINARY_PATH'], 'r:gz') as tar:
            tar.extractall('/tmp')
    
        # 调用可执行文件
        os.system('/tmp/binary/executable')
    
    2023-05-23 17:36:59
    赞同 展开评论 打赏
  • 可能是因为您没有将二进制包的路径添加到系统的PATH环境变量中。请检查您的pre-deploy脚本,确保将二进制包所在路径添加到PATH环境变量中,例如:

    pre-deploy:
      - export PATH=/path/to/binary:$PATH
    

    另外,如果您在pre-deploy脚本中使用了相对路径来调用二进制包,请确保这些相对路径是相对于pre-deploy脚本所在的目录而不是相对于二进制包所在的目录。可以使用绝对路径来避免这个问题。

    2023-05-23 13:03:55
    赞同 展开评论 打赏
  • 公众号:网络技术联盟站,InfoQ签约作者,阿里云社区签约作者,华为云 云享专家,BOSS直聘 创作王者,腾讯课堂创作领航员,博客+论坛:https://www.wljslmz.cn,工程师导航:https://www.wljslmz.com

    有几种可能性导致您的二进制包在阿里云函数计算中无法调用:

    1. 配置错误:请确保您在s.yaml文件中正确添加了预部署脚本,路径和文件名都正确,例如:
    pre-deploy:
      - ./binary/my-binary
    
    1. 权限不足:请确保您的二进制包具有可执行权限,并且阿里云函数计算提供了足够的权限来调用它。您可以在函数计算控制台的授权策略里添加权限,例如:
    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "fc:InvokeFunction"
          ],
          "Resource": [
            "acs:fc:*:*:function:my-function:*"
          ]
        },
        {
          "Effect": "Allow",
          "Action": [
            "oss:GetObject"
          ],
          "Resource": [
            "acs:oss:*:*:my-bucket/*"
          ]
        }
      ]
    }
    
    1. 二进制包缺失依赖项:请确保您的二进制包在阿里云函数计算中依赖于的库和文件都已正确安装和配置。您可以通过在本地运行ldd my-binary来检查依赖项。如果您的二进制包依赖于一些共享库,则需要将这些库打包到ZIP文件中,并在s.yaml中指定:
    dependencies:
      runtime: python3.6
      commands:
        - cp /usr/lib64/libjpeg.so.62 $PWD
      include:
        - libjpeg.so.62
    
    2023-05-23 11:55:40
    赞同 展开评论 打赏
  • 如果您的二进制包在编译和install时都正常,但在使用s.yaml中的pre-deploy时却无法调用,可能是以下原因:

    1. pre-deploy路径问题:当您使用pre-deploy时,您需要确保您的二进制包的路径是正确的。如果您的二进制包不在pre-deploy文件夹中或者路径不正确,就会无法调用。

    2. 二进制文件权限问题:在pre-deploy中调用二进制包时,需要确保该二进制包的权限是正确的。您可以使用chmod命令来赋予其执行权限:chmod +x /path/to/binary

    3. 环境变量问题:在pre-deploy中调用二进制包时,需要确保环境变量是正确的。您可以在pre-deploy文件中手动设置所需的环境变量,或者在调用二进制包的脚本中设置环境变量。

    4. 二进制文件依赖问题:如果您的二进制包依赖其他库或组件,这些库或组件可能没有正确安装或配置导致无法调用。您可以在使用命令行测试该二进制包时,查看报错信息以确定依赖问题。

    总之,请确保您的二进制包可以独立运行并确保路径,权限,环境变量和依赖关系正确配置。

    2023-05-23 09:25:19
    赞同 展开评论 打赏

快速交付实现商业价值。

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载