微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无服务器部署,UnknownEndpoint:无法访问的主机

如何解决无服务器部署,UnknownEndpoint:无法访问的主机

我正在尝试在 AWS 上部署 python 无服务器应用程序。

我遵循非常简单的教程,并执行以下步骤:

  1. 安装无服务器 npm install -g serverless
  2. 生成模板项目 sls create --template aws-python3 --name sls-demo --path sls-demo

我的 handler.py 文件如下所示:

import json


def hello(event,context):
    body = {
        "message": "Go Serverless v1.0! Your function executed successfully!","input": event
    }

    response = {
        "statusCode": 200,"body": json.dumps(body)
    }

    return response

我的 serverless.yml 配置文件如下所示:

service: sls-demo
frameworkVersion: '2'

provider:
  name: aws
  runtime: python3.8
  lambdaHashingVersion: 20201221
  region: eu-central-1

functions:
  hello:
    handler: handler.hello

我已经在我的机器上安装了 aws cli,使用 aws 凭据对其进行了配置,当我运行部署命令 sls deploy 时,它成功完成。

我使用以下命令 sls invoke --function hello 测试 lambda 函数,结果成功返回:

{
    "statusCode": 200,"body": "{\"message\": \"Go Serverless v1.0! Your function executed successfully!\",\"input\": {}}"
}

现在我想在我的 lambda 函数中引入一些额外的依赖项,对其进行 dockerize 并使用 serverless-python-requirements 插件进行部署。

为此,我执行以下步骤:

  1. 创建虚拟环境python -m venv ./venv
  2. 激活虚拟环境 source venv/bin/activate
  3. 安装 numpy 依赖 pip install numpy
  4. 冻结 python 依赖项 pip freeze > requirements.txt
  5. 安装 serverless-python-requirements 插件 sls plugin install -n serverless-python-requirements

我更新后的 handler.py 文件如下所示:

import json
import numpy


def hello(event,context):
    array = numpy.arange(15).reshape(3,5)

    body = {
        "message": "Go Serverless v1.0! Your function executed successfully!","input": event,"array": array
    }

    response = {
        "statusCode": 200,"body": json.dumps(body)
    }

    return response

我更新后的 serverless.yml 配置文件如下所示:

service: sls-demo
frameworkVersion: '2'

provider:
  name: aws
  runtime: python3.8
  lambdaHashingVersion: 20201221
  region: eu-central-1

functions:
  hello:
    handler: handler.hello

plugins:
  - serverless-python-requirements

custom:
  pythonRequirements:
    dockerizePip: non-linux

进行这些更改后,当我运行部署命令 sls deploy 时,它失败并显示以下错误

Serverless: Recoverable error occurred (Inaccessible host: `sls-demo-dev-serverlessdeploymentbucket-xyz.s3.eu-central-1.amazonaws.com'. This service may not be available in the `eu-central-1' region.),sleeping for ~5 seconds. Try 1 of 4

我通过导出此标志 export SLS_DEBUG=* 为无服务器启用了调试日志,异常堆栈跟踪如下所示:

Serverless: Recoverable error occurred (UnkNownEndpoint: Inaccessible host: `sls-demo-dev-serverlessdeploymentbucket-xyz.s3.eu-central-1.amazonaws.com'. This service may not be available in the `eu-central-1' region.
    at Request.ENOTFOUND_ERROR (/Users/macbook/.nvm/versions/node/v14.16.0/lib/node_modules/serverless/node_modules/aws-sdk/lib/event_listeners.js:507:46)
    at Request.callListeners (/Users/macbook/.nvm/versions/node/v14.16.0/lib/node_modules/serverless/node_modules/aws-sdk/lib/sequential_executor.js:106:20)
    at Request.emit (/Users/macbook/.nvm/versions/node/v14.16.0/lib/node_modules/serverless/node_modules/aws-sdk/lib/sequential_executor.js:78:10)
    at Request.emit (/Users/macbook/.nvm/versions/node/v14.16.0/lib/node_modules/serverless/node_modules/aws-sdk/lib/request.js:688:14)
    at ClientRequest.error (/Users/macbook/.nvm/versions/node/v14.16.0/lib/node_modules/serverless/node_modules/aws-sdk/lib/event_listeners.js:339:22)
    at ClientRequest.<anonymous> (/Users/macbook/.nvm/versions/node/v14.16.0/lib/node_modules/serverless/node_modules/aws-sdk/lib/http/node.js:96:19)
    at ClientRequest.emit (events.js:315:20)
    at ClientRequest.EventEmitter.emit (domain.js:467:12)
    at TLSSocket.socketErrorListener (_http_client.js:469:9)
    at TLSSocket.emit (events.js:315:20)
    at TLSSocket.EventEmitter.emit (domain.js:467:12)
    at emitErrorNT (internal/streams/destroy.js:106:8)
    at emitErrorCloseNT (internal/streams/destroy.js:74:3)
    at processticksAndRejections (internal/process/task_queues.js:80:21)
----------------------------------------------------------------------------------------------------),sleeping for ~7 seconds. Try 1 of 4

当无服务器尝试将构建工件上传到 s3 存储桶时会发生此错误

Serverless: Uploading service sls-demo.zip file to S3 (33.14 MB)...

我怀疑这个错误是由于文件过大导致的,但我不知道如何解决这个问题,或者我在配置中遗漏了什么。

我尝试使用 aws cli 在提到的 s3 存储桶中上传文件,并且没有任何问题:

aws s3 cp large_file.zip s3://sls-demo-dev-serverlessdeploymentbucket-xyz/large_file.zip

我不知道如何解决这个问题,而且我无法在互联网上找到有关此错误的任何答案。任何帮助表示赞赏。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。