- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我花了几天时间尝试使用 Terraform 部署函数应用。它使用 requests python 模块。
我已将问题范围缩小到 Azure 未在 requests.txt 中导入 python 模块。文件。
为了测试,我创建了一个简单的 httptrigger 函数应用程序,它只返回一个 url 参数。我的部署脚本压缩目录并使用 terraform 部署应用程序。一切都很好,一切都按预期进行。
但是,如果更改我的 python 脚本 (__init__.py
) 以导入 python 模块“urllib3”和/或“requests”,即使简单的 python 脚本实际上没有使用模块中的任何方法或类,该函数也会失败。部署该功能时没有错误。从 url 调用时失败。
我验证了这些模块是否列在requirements.txt 文件中。
可以肯定的是,如果我注释掉导入请求和 urllib3,一切都会正常。
如有任何意见或建议,我们将不胜感激。
简单测试脚本(__init__.py
):
import logging
import azure.functions as func
# function fails with the following line. Works if commented out.
import urllib3
def main(req: func.HttpRequest) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')
target = req.params.get('target')
if target:
return func.HttpResponse("Pretending to use " + target, status_code = 503)
else:
return func.HttpResponse("No Taget Specified", status_code = 400)
requirements.txt(7/15 更新)
azure-functions==1.2.1
future==0.18.2
pefile==2019.4.18
PyInstaller==3.6
pylint==2.5.3
pywin32-ctypes==0.2.0
PyYAML==5.3.1
urllib3==1.25.9
requests==2.24.1
7/16 更新:Terraform 文件:
variable "prefix" {
type = "string"
default = "jis"
}
variable "location" {
type = "string"
default = "eastus"
}
variable "environment" {
type = "string"
default = "dev"
}
variable "functionapp" {
type = "string"
default = "./testit.zip"
}
resource "random_string" "storage_name" {
length = 24
upper = false
lower = true
number = true
special = false
}
provider "azurerm" {
version = "~>2.1.0"
features {}
}
# Create Storage Account
resource "azurerm_resource_group" "rg" {
name = "${var.prefix}-${var.environment}"
location = "${var.location}"
}
resource "azurerm_storage_account" "storage" {
name = "${random_string.storage_name.result}"
resource_group_name = "${azurerm_resource_group.rg.name}"
location = "${var.location}"
account_tier = "Standard"
account_replication_type = "LRS"
}
resource "azurerm_storage_container" "deployments" {
name = "function-releases"
storage_account_name = "${azurerm_storage_account.storage.name}"
container_access_type = "private"
}
# upload zip file
resource "azurerm_storage_blob" "appcode" {
name = "functionapp.zip"
storage_account_name = "${azurerm_storage_account.storage.name}"
storage_container_name = "${azurerm_storage_container.deployments.name}"
type = "Block"
source = "${var.functionapp}"
}
# Create function app
data "azurerm_storage_account_sas" "sas" {
connection_string = "${azurerm_storage_account.storage.primary_connection_string}"
https_only = true
start = "2020-07-10"
expiry = "2023-12-31"
resource_types {
object = true
container = false
service = false
}
services {
blob = true
queue = false
table = false
file = false
}
permissions {
read = true
write = false
delete = false
list = false
add = false
create = false
update = false
process = false
}
}
resource "azurerm_app_service_plan" "asp" {
name = "${var.prefix}-plan"
resource_group_name = "${azurerm_resource_group.rg.name}"
location = "${var.location}"
kind = "Linux"
reserved = true
sku {
tier = "Dynamic"
size = "Y1"
}
}
resource "azurerm_function_app" "functions" {
name = "${var.prefix}-${var.environment}"
location = "${var.location}"
resource_group_name = "${azurerm_resource_group.rg.name}"
app_service_plan_id = "${azurerm_app_service_plan.asp.id}"
storage_connection_string = "${azurerm_storage_account.storage.primary_connection_string}"
version = "~2"
app_settings = {
https_only = true
FUNCTIONS_WORKER_RUNTIME = "python"
WEBSITE_NODE_DEFAULT_VERSION = "~10"
FUNCTION_APP_EDIT_MODE = "readonly"
HASH = "${base64encode(filesha256("${var.functionapp}"))}"
WEBSITE_RUN_FROM_PACKAGE = "https://${azurerm_storage_account.storage.name}.blob.core.windows.net/${azurerm_storage_container.deployments.name}/${azurerm_storage_blob.appcode.name}${data.azurerm_storage_account_sas.sas.sas}"
}
}
#
最佳答案
经过一番努力,我找到了问题所在。感谢@HuryShen 和@AnkitKumar 为我指明了正确的方向。
我没有在函数 zip 文件中包含模块 urllib3 和 requests。它们需要安装到<funcname>.python_packages/lib/site-packages directory
。最简单的方法(从requirements.txt 文件)是
pip install --target="azure/.python_packages/lib/site-packages" -r requirements.txt
下载模块后,它们可以包含在 zip 文件中。之后,terraform 脚本就可以正常工作了。
关于python - FunctionApp 未导入 python 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62903172/
我正在尝试了解部署槽的工作原理 ( https://learn.microsoft.com/en-us/cli/azure/webapp/deployment?view=azure-cli-lates
我有一个 powershell 脚本,它连接到 ADO API 并向我显示代理池。当我在本地运行它时,它对我有用,但不幸的是 Function App 中已经存在一个错误401 未经授权 { "
是否有一种干净的方法可以将部分生产流量转移到函数应用程序中的插槽?类似于app services的东西做?我已经阅读了一些有关使用另一个功能应用程序和代理的内容,但我想做一些类似金丝雀部署的事情,例如
是否有一种干净的方法可以将部分生产流量转移到函数应用程序中的插槽?类似于app services的东西做?我已经阅读了一些有关使用另一个功能应用程序和代理的内容,但我想做一些类似金丝雀部署的事情,例如
我花了几天时间尝试使用 Terraform 部署函数应用。它使用 requests python 模块。 我已将问题范围缩小到 Azure 未在 requests.txt 中导入 python 模块。
我花了几天时间尝试使用 Terraform 部署函数应用。它使用 requests python 模块。 我已将问题范围缩小到 Azure 未在 requests.txt 中导入 python 模块。
我已经创建了一个函数应用程序来处理计时器触发函数,创建它后,我可以创建函数,但函数部分中缺少 Function(fx) 选项。是新功能还是我遗漏了什么? 最佳答案 Is it the new feat
我有两个问题,第一个与托管有关,第二个与要使用的 sdk/库有关: 我需要为人们编写一种工作分配服务调度程序,该调度程序每 1 小时运行一次,在后台运行计算密集型逻辑并将结果推送到我们的数据库中。输入
我的部署脚本使用 PowerShell 和 AzureRM 模块。我正在尝试找到与以下 Azure CLI 调用等效的内容。该调用创建一个基于 Docker 镜像的 Azure Function。 a
我们有一个 FunctionApp,它每 6 分钟在 CosmosDb 中插入大约 8k 个文档。目前我们将 Cosmos 设置为自动缩放,但由于我们的 RU 非常可预测,我感觉我们可以节省一些钱,因
当我尝试使用 fuctionapp 部署命令上传 zip 文件时收到此错误消息。我如何授予用户访问权限?我实际上是资源组的管理员。 az functionapp deployment source c
我正在致力于在 Azure 应用服务上部署隔离的 Azure Function App 容器。 我已创建应用服务计划: "sku": { "name": "P1v2", "tier":
我正在尝试使用 Azure Function Core Tools CLI 发布 Azure 函数。 func azure functionapp publish "" 该过程快速完成构建和部署,但需
我正在致力于在 Azure 应用服务上部署隔离的 Azure Function App 容器。 我已创建应用服务计划: "sku": { "name": "P1v2", "tier":
我正在尝试使用 Azure Function Core Tools CLI 发布 Azure 函数。 func azure functionapp publish "" 该过程快速完成构建和部署,但需
我正在使用 ARM 模板来创建资源,但我似乎不太清楚如何让运行函数应用程序的实际操作系统成为 Linux。 我想这样做的原因只是为了我可以正确构建 native 模块。拥有一些 native 模块很常
我已经遵循this tutorial中的每一步在 Azure 中创建 Python 函数应用程序,但是当我运行 func azure functionapppublish myApp 时,它返回: R
我创建了一个 .Net 5 Azure Function App 项目,并遵循 Program.cs 文件的隔离进程,并且运行良好。现在我想将框架版本从 dotnet 5.0 更改/升级到 6.0,因
我有一个 azure 功能应用程序,用于简单的测试目的。为了(半)自动运行一些测试,我希望能够从 python 脚本中自动将一组函数应用程序上传到 azure。 因此我os.chdir()进入相应的文
我们需要通过 az functionapp plan update 设置 Property 我们正在使用高级计划。 链接 https://learn.microsoft.com/en-us/azure
我是一名优秀的程序员,十分优秀!