标签: serverless

带有服务总线触发器的 Azure 函数 blob 输入绑定

我正在尝试创建一个在 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]

c# azure azure-functions serverless

3
推荐指数
2
解决办法
1225
查看次数

为什么部署的无服务器函数未显示在 AWS 控制台的 lambda 函数列表中?

我使用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 函数列表中没有显示任何函数。他们不应该在那里吗?

AWS 控制台

node.js serverless aws-serverless

3
推荐指数
1
解决办法
1063
查看次数

Cloud Run 内存限制

如何在自定义 GKE 集群上运行使用超过 2 GB 的 Cloud Run 容器?

由于 Cloud Run 使用 knative,我想知道是否可以调整具有更多分配/允许内存限制的部署描述符以在 GKE 上运行它。

apiVersion: serving.knative.dev/v1alpha1
kind: Revision
metadata:
 ...
Run Code Online (Sandbox Code Playgroud)

google-cloud-platform serverless google-cloud-run

3
推荐指数
1
解决办法
616
查看次数

返回响应后,Lambda 可以继续吗?

Lambda 是否可以在返回像状态代码这样的响应后继续处理,202然后 Lambda 在结束 Lambda 之前必须调用请求?

asynchronous aws-lambda serverless

3
推荐指数
3
解决办法
2919
查看次数

如何获取 Cloud Formation 特定资源属性的 AWS Lambda 函数的 ARN?

我似乎无法获取RefFn: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

3
推荐指数
1
解决办法
6082
查看次数

使用 aws 角色执行无服务器部署

我正在尝试使用无服务器框架部署一个简单的 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

3
推荐指数
1
解决办法
2571
查看次数

混合 Terraform 和无服务器框架

这更像是一个悬而未决的问题,我只是希望得到任何意见和建议。我想到了 AWS,但它可能也与其他云提供商有关。

我想提供易于维护并涵盖现代无服务器架构的所有要求的 IaaC 解决方案。Terraform 是定义基础设施的绝佳工具,拥有众多官方资源和来自社区的稳定支持。我真的很喜欢它的语法和模块的整个概念。然而,使用 Lambdas 是非常糟糕的。它还提出了另一个问题:是否应该使用与基础架构更改相同的流程来部署代码更改?代码和基础设施之间的界限在哪里?

另一方面,无服务器框架允许非常容易地开发和部署 Lambda。当谈到资源的使用时,它非常自以为是,但它带有许多值得一试的开箱即用功能。它不应该真正用于定义整个基础设施。

我目前的方法是使用 Terraform 定义任何共享资源,使用 Serverless 定义任何与域相关的资源。这里我有另一个与我之前的问题相关的问题:部署依赖。简单的场景:Lambda.1将用户添加到Cognito(共享资源)Lambda.2作为触发器。我必须创建一个自定义解决方案来管理部署顺序(Lambda.2必须先部署等)。可以将无服务器框架部署连接到 Terraform 中,但话又说回来:代码部署是否应该与基础设施部署混合?

amazon-web-services terraform serverless-framework serverless

3
推荐指数
1
解决办法
541
查看次数

Python3.8 - FastAPI 和无服务器 (AWS Lambda) - 无法处理发送到 api 端点的文件

几个月来,我一直通过 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)

python amazon-web-services aws-lambda serverless fastapi

3
推荐指数
1
解决办法
2133
查看次数

如何使用 Next JS 和 Zeit Now 和强大的无服务器将文件上传到 S3

抱歉我英语不好。它适用于本地主机,但不适用于生产。(使用 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)

upload amazon-s3 formidable next.js serverless

3
推荐指数
2
解决办法
4263
查看次数

如何处理 AWS Lambda 中的大依赖?

我正在使用 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)

python amazon-s3 amazon-web-services aws-lambda serverless

3
推荐指数
1
解决办法
2102
查看次数