python - 无服务器部署,UnknownEndpoint:无法访问的主机
问题描述
我正在尝试在 AWS 上部署 python 无服务器应用程序。
我遵循非常简单的教程,并执行以下步骤:
- 安装无服务器
npm install -g serverless
- 生成模板项目
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
时它成功完成。
我使用以下命令测试 lambda 函数,sls invoke --function hello
结果成功返回:
{
"statusCode": 200,
"body": "{\"message\": \"Go Serverless v1.0! Your function executed successfully!\", \"input\": {}}"
}
现在我想在我的 lambda 函数中引入一些额外的依赖项,将其 dockerize 并使用serverless-python-requirements
插件进行部署。
为此,我执行以下步骤:
- 创建虚拟环境
python -m venv ./venv
- 激活虚拟环境
source venv/bin/activate
- 安装numpy依赖
pip install numpy
- 冻结python依赖项
pip freeze > requirements.txt
- 安装 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
我不知道如何解决此问题,并且我无法在互联网上找到有关此错误的任何答案。任何帮助表示赞赏。
解决方案
推荐阅读
- php - laravel join:如何连接表并根据我的条件从同一个连接中提取各种数据?
- jira - 有没有办法以编程方式将 jira 问题导出到 word 文档
- entity-framework - 使用 InMemoryDatabase 时如何禁用急切加载
- lambda - AWS LAMBDA, PUPPETEER, page.goto() 错误连接超时
- javascript - 状态未按预期更新
- hadoop - Hadoop HDFS:垃圾箱位置
- python - 遍历字典列表并更新前一行的值
- java - 如何将文件路径从 Gradle 传递到 Java 类?
- python - Odoo 10:安全组不适用于编辑/创建按钮
- android - Vue Laravel Axios Post 无法在 Android 7 上运行