我正在尝试创建一个在 AZ ServiceBus 队列消息上触发的 Azure 函数。该消息包含一个 GUID 字符串,与 AZ 存储上的 BLOB 的名称匹配。我想通过输入绑定获得该 BLOB,但我不确定如何...
我试过 :
public static async Task Run(
[ServiceBusTrigger("outgoing-mail", Connection = "QueueConnString")] string inputMessage,
[Blob("email-messages/{inputMessage}", FileAccess.Read)] Stream mailBlob,
[SendGrid(ApiKey = "%SendgridApiKey%")] IAsyncCollector<SendGridMessage> messageCollector,
ILogger log)
Run Code Online (Sandbox Code Playgroud)
我还顺便在 blob 路径上尝试了 {serviceBusTrigger},但无论哪种方式,我都会收到以下异常:
Microsoft.Azure.WebJobs.Host:索引方法“SendMailQueueWorker”时出错。Microsoft.Azure.WebJobs.Host:无法解析绑定参数“inputMessage”。绑定表达式必须映射到触发器提供的值或触发器绑定到的值的属性,或者必须是系统绑定表达式(例如 sys.randguid、sys.utcnow 等)。
我确定队列的输入消息是一个字符串,如何在BLOB的输入绑定中使用这个消息内容?
[编辑]
我向 UserVoice 添加了功能请求,所以如果你也遇到这个问题,请投票!
https://feedback.azure.com/forums/355860-azure-functions/suggestions/37528912-combine-servicebus-queue-message-with-storage-inpu
[/edit]
我使用serverless deploy函数将无服务器函数部署到 aws。
它们工作正常,如果我尝试列出部署的函数,我可以看到它们,如下所示。
$ serverless deploy list functions
Serverless: Listing functions and their last 5 versions:
Serverless: -------------
Serverless: hello: $LATEST, 1, 2, 3, 4
Serverless: helloOne: $LATEST, 1
Run Code Online (Sandbox Code Playgroud)
但是我在 AWS 控制台的 lambda 函数列表中没有显示任何函数。他们不应该在那里吗?
如何在自定义 GKE 集群上运行使用超过 2 GB 的 Cloud Run 容器?
由于 Cloud Run 使用 knative,我想知道是否可以调整具有更多分配/允许内存限制的部署描述符以在 GKE 上运行它。
apiVersion: serving.knative.dev/v1alpha1
kind: Revision
metadata:
...
Run Code Online (Sandbox Code Playgroud) Lambda 是否可以在返回像状态代码这样的响应后继续处理,202然后 Lambda 在结束 Lambda 之前必须调用请求?
我似乎无法获取Ref或Fn:GetAtt返回用于设置资源的有效值。
无服务器.yml
...etc...
functions:
bearerTokenAuthentication:
handler: app.bearerTokenAuthentication
name: ${self:service}-auth-bearer
resources:
- ${file(./serverless_resources.yml)}
Run Code Online (Sandbox Code Playgroud)
serverless_resources.yml
Resources:
ApiGateway:
Type: AWS::ApiGateway::RestApi
Properties:
Name: restapi-${self:provider.stage}
Description: Endpoints
ApiKeySourceType: HEADER # (to read the API key from the X-API-Key header of a request)
ApiGatewayBearerAuthorizer:
Type: AWS::ApiGateway::Authorizer
Properties:
Type: token
IdentitySource: method.request.header.Authorization
Name: BearerAuthorization
AuthorizerResultTtlInSeconds: 300
AuthorizerUri: !Join #arn:aws:apigateway:${self:provider.region}:lambda:path/${self:functions.bearerTokenAuthentication.name}
- ''
- - 'arn:aws:apigateway:'
- !Ref 'AWS::Region'
- ':lambda:path/2015-03-31/functions/'
- !GetAtt
- bearerTokenAuthentication # also tried !Ref bearerTokenAuthentication and '${self:functions.bearerTokenAuthentication.name}'
- Arn
- …Run Code Online (Sandbox Code Playgroud) amazon-web-services aws-lambda serverless-framework serverless
我正在尝试使用无服务器框架部署一个简单的 lambda 函数。我的 IAM 用户没有运行 cloudformation 的必要权限:
User: arn:aws:iam::xxx:user/xxx is not authorized to perform: cloudformation:DescribeStacks on resource: arn:aws:cloudformation:us-east-1:xxx:stack/xx
Run Code Online (Sandbox Code Playgroud)
这或多或少是有意为之,因为我们的设置使用 IAM 角色来执行某些任务。我已经在 ~/.aws/config 文件中配置了这些角色,对于 aws cli 操作,我可以调用
aws s3 ls --profile myrole
Run Code Online (Sandbox Code Playgroud)
通过这种方式,我将角色“myrole”中的所有策略附加到我的 IAM 用户以执行 aws-cli 命令。
有没有什么方法可以为无服务器做类似的事情,即将角色(不是不同的用户)附加到
serverless depoly
Run Code Online (Sandbox Code Playgroud)
陈述?
如果我通过导出更改角色
AWS_PROFILE=myrole
或打电话
serverless deploy --aws-profile myrole
我得到Error: Profile myrole does not exist即使的角色定义 /.aws/credentials和 ~/.aws/config
amazon-web-services amazon-iam serverless-framework serverless aws-serverless
这更像是一个悬而未决的问题,我只是希望得到任何意见和建议。我想到了 AWS,但它可能也与其他云提供商有关。
我想提供易于维护并涵盖现代无服务器架构的所有要求的 IaaC 解决方案。Terraform 是定义基础设施的绝佳工具,拥有众多官方资源和来自社区的稳定支持。我真的很喜欢它的语法和模块的整个概念。然而,使用 Lambdas 是非常糟糕的。它还提出了另一个问题:是否应该使用与基础架构更改相同的流程来部署代码更改?代码和基础设施之间的界限在哪里?
另一方面,无服务器框架允许非常容易地开发和部署 Lambda。当谈到资源的使用时,它非常自以为是,但它带有许多值得一试的开箱即用功能。它不应该真正用于定义整个基础设施。
我目前的方法是使用 Terraform 定义任何共享资源,使用 Serverless 定义任何与域相关的资源。这里我有另一个与我之前的问题相关的问题:部署依赖。简单的场景:Lambda.1将用户添加到Cognito(共享资源)Lambda.2作为触发器。我必须创建一个自定义解决方案来管理部署顺序(Lambda.2必须先部署等)。可以将无服务器框架部署连接到 Terraform 中,但话又说回来:代码部署是否应该与基础设施部署混合?
amazon-web-services terraform serverless-framework serverless
几个月来,我一直通过 AWS Lambda 函数将 FastAPI 与 Serverless 结合使用,并且效果很好。
我正在创建一个新的 api 端点,它需要发送一个文件。
在我的本地机器上使用时它可以完美运行,但是当我部署到 AWS Lambda 时,当我尝试使用与本地工作完全相同的文件调用我的端点时出现以下错误。我目前正在通过 swagger UI 进行此测试,除了运行代码的“机器”之外,我的无服务器或本地机器之间没有任何变化。
你知道发生了什么吗?
Python 3.8 FastAPI 0.54.1
我的代码:
from fastapi import FastAPI, File, UploadFile
import pandas as pd
app = FastAPI()
@app.post('/process_data_import_quote_file')
def process_data_import_quote_file(file: UploadFile = File(...)): # same error if I put bytes instead of UploadFile
file = file.file.read()
print(f"file {file}")
quote_number = pd.read_excel(file, sheet_name='Data').iloc[:, 0].dropna()
Run Code Online (Sandbox Code Playgroud)
它在最后一行失败
我尝试打印文件,当我将打印的数据与我在本地读取的数据进行比较时,它是不同的。我发誓这是我在 2 上使用的同一个文件,所以我不知道有什么可以解释的?这是一个非常基本的excel文件,没有什么特别之处。
[ERROR] 2020-05-07T14:25:17.878Z 25ff37a5-e313-4db5-8763-1227e8244457 Exception in ASGI application
Traceback (most recent call last):
File …Run Code Online (Sandbox Code Playgroud) 抱歉我英语不好。它适用于本地主机,但不适用于生产。(使用 ZEIT NOW 部署)
这是上传.ts
import { NextApiRequest, NextApiResponse } from 'next'
import AWS from 'aws-sdk';
const formidable = require("formidable-serverless");
AWS.config.region = 'ap-northeast-2';
export const config = {
api: {
bodyParser: false,
}
}
export default async (req:NextApiRequest, res:NextApiResponse) => {
const data = await new Promise(function(resolve, reject) {
const form = formidable();
form.keepExtensions = true;
form.keepFilename = true;
form.parse(req, (err:any, fields:any, files:any) => {
const s3 = new AWS.S3({
accessKeyId: process.env.AWS_ACCESS_KEY_CODE,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY_CODE
});
const params = {
Bucket: …Run Code Online (Sandbox Code Playgroud) 我正在使用 AWS Lambda,我需要部署的函数需要许多不同的包。使用serverless-python-requirements生成的 zip 文件为 169.5MB,远大于 50MB 的限制。我曾尝试使用 Lambda 层,但这并不能解决大小问题。
我还尝试将 zip 文件转储到 s3 存储桶中,但是在调用该函数时它仍然太大而无法加载。我需要所有这些包,但我不确定如何部署它们。
我的requirements.txt文件看起来像:
bs4==0.0.1
gensim==3.8.3
matplotlib==3.2.2
nltk==3.5
numpy==1.19.0
openpyxl==3.0.4
pandas==1.0.5
pyLDAvis==2.1.2
spacy==2.3.1
XlsxWriter==1.2.9
Run Code Online (Sandbox Code Playgroud) serverless ×10
aws-lambda ×4
amazon-s3 ×2
python ×2
amazon-iam ×1
asynchronous ×1
azure ×1
c# ×1
fastapi ×1
formidable ×1
next.js ×1
node.js ×1
terraform ×1
upload ×1