标签: aws-serverless

原生无服务器与无服务器 Express

现在,我正在遵循无服务器堆栈团队准备的指南。他们正在使用React许多AWS功能,例如lambdaAPI getaway。为了练习它,我正在使用无服务器堆栈重写我的旧Express示例之一。

我还看到了一个名为 的库或工具aws-serverless-expressexpress这个库或工具允许您以这种形式运行您的应用程序serverless

这将是一个奇怪的问题,但我想知道本机无服务器构建和无服务器快速之间的区别。

Cold start已经是劣势了。我知道这一点。除此之外,无服务器快递还有哪些负面或正面的方面?原生无服务器
有哪些消极或积极的一面?

node.js express serverless aws-serverless

5
推荐指数
1
解决办法
3578
查看次数

使用现有S3存储桶触发Lambda函数时如何避免授予`iam:CreateRole`权限?

我正在尝试部署一个 AWS Lambda 函数,当 AVRO 文件写入现有 S3 存储桶时,该函数会被触发。

我的serverless.yml配置如下:

service: braze-lambdas

provider:
  name: aws
  runtime: python3.7
  region: us-west-1
  role: arn:aws:iam::<account_id>:role/<role_name>
  stage: dev
  deploymentBucket:
    name: serverless-framework-dev-us-west-1
    serverSideEncryption: AES256

functions:
  hello:
    handler: handler.hello
    events:
      - s3:
          bucket: <company>-dev-ec2-us-west-2
          existing: true
          events: s3:ObjectCreated:*
          rules:
            - prefix: gaurav/lambdas/123/
            - suffix: .avro
Run Code Online (Sandbox Code Playgroud)

当我运行时serverless deploy,出现以下错误:

ServerlessError: An error occurred: IamRoleCustomResourcesLambdaExecution - API: iam:CreateRole User: arn:aws:sts::<account_id>:assumed-role/serverless-framework-dev/jenkins_braze_lambdas_deploy is not authorized to perform: iam:CreateRole on resource: arn:aws:iam::<account_id>:role/braze-lambdas-dev-IamRoleCustomResourcesLambdaExec-1M5QQI6P2ZYUH. 
Run Code Online (Sandbox Code Playgroud)

由于 CloudFormation 的工作原理,我看到一些提到需要无服务器,iam:CreateRole但如果我想使用,谁能确认这是否是唯一的解决方案existing: true?除了使用框架添加对配置的支持之前使用的旧无服务器插件之外,还有其他方法吗 …

amazon-iam serverless-framework serverless-plugins aws-serverless

5
推荐指数
2
解决办法
3963
查看次数

使用asp.net core的无服务器模板的aws lambda函数

我对 AWS 的了解不够,但我的公司要求我做一项工作,我猜 AWS Lambda 可以完美地完成这项工作。要求是我必须创建一个具有需要每天调用两次的端点的服务。我遵循的方法是通过 Visual Studio 创建一个无服务器 Web API,并为每个端点创建 API 网关端点。然后通过云监视事件添加一个触发器,每天运行两次,但每当触发该函数时,我都会收到此错误。

Object reference not set to an instance of an object.: NullReferenceException
   at Amazon.Lambda.AspNetCoreServer.APIGatewayProxyFunction.MarshallRequest(InvokeFeatures features, APIGatewayProxyRequest apiGatewayRequest, ILambdaContext lambdaContext)
   at Amazon.Lambda.AspNetCoreServer.AbstractAspNetCoreFunction`2.FunctionHandlerAsync(TREQUEST request, ILambdaContext lambdaContext)
   at lambda_method(Closure , Stream , Stream , LambdaContextInternal )
Run Code Online (Sandbox Code Playgroud)

lambda triggers amazon-web-services asp.net-core-webapi aws-serverless

5
推荐指数
1
解决办法
1349
查看次数

AWS SAM - 对有条件创建的资源应用策略模板

我有条件地创建 DynamoDb 表:

 MyDynamoTable:
    Type: AWS::DynamoDB::Table
    Condition: IsDevAccount
Run Code Online (Sandbox Code Playgroud)

这是IsDevAccount使用输入参数定义的方式:

Conditions:
  IsDevAccount: !Equals [ !Ref Stage, dev ]
Run Code Online (Sandbox Code Playgroud)

现在,我正在创建一个 Lambda 函数,该函数通过环境变量接受表名称(以及其他内容)作为输入。这也是有条件的。在函数的代码中,我将检查是否传递了表名(如果不满足条件则传递空)。如果是这样,我会在里面放一些东西。

但是,我不确定如何有条件地将策略模板应用于函数的角色。通常我会这样做:

MyFunction:
    Type: AWS::Serverless::Function
    Properties:
       Policies:
       - DynamoDBWritePolicy:
          TableName: !Ref MyDynamoTable
Run Code Online (Sandbox Code Playgroud)

如果由于不满足条件而未创建表(例如:在另一个帐户中),函数的执行角色会发生什么情况?我也可以有条件地应用此策略模板吗?

我不想做的是盲目地向帐户内的所有 DynamoDB 表授予写入权限。

aws-lambda aws-serverless aws-sam

5
推荐指数
1
解决办法
1114
查看次数

AWS Cloudformation 陷入 UPDATE_ROLLBACK_FAILED 状态

我通过 AWS 无服务器应用程序模型 (SAM) 部署 AWS Lambda。我的一个 Lambda 函数使用 Numpy,我通过 @keithRozario 从 Klayers 的第 3 方层引用了它。我正在使用 Klayers-python38-numpy:16 但发现它在我今天部署后已被弃用,这使我的堆栈处于UPDATE_ROLLBACK_FAILED状态。

Stack actions -> Continue update rollback一项建议是从 AWS 控制台使用;我尝试过但没有成功。另一种解决方案是删除堆栈。但是,这将是我第一次删除堆栈,我想知道的是: 如果我通过控制台删除堆栈,当我重新部署它时,我的堆栈会被重新创建吗?我已经寻找了我的问题的答案,但我只找到了删除堆栈中资源的参考。

我还想知道的是,我的堆栈是 AWS CodePipeline 中许多堆栈中的第一个堆栈,如果我删除堆栈,我的管道仍然可以工作吗?此外,当我继续处理管道中的后续堆栈时,我还会遇到失败的堆栈吗?

最后,计划是在重新部署时更新到 Klayers-python38-numpy:19。

编辑:根据@marcin

问题是已经部署在我的堆栈中的 Klayers-python38-numpy:16 不再可用。今天早上我尝试对代码进行更改,但我的管道在该CreateChangeSet步骤中失败了。我假设,该层不再可用的事实是我的堆栈无法回滚的原因。

我的管道如下所示:


{
    "pipeline": {
        "name": "my-pipeline",
        "roleArn": "arn:aws:iam::123456789:role/my-pipeline-CodePipelineExecutionRole-4O8PAUJGLXYZ",
        "artifactStore": {
            "type": "S3",
            "location": "my-pipeline-buildartifactsbucket-62byf2xqaa8z"
        },
        "stages": [
            {
                "name": "Source",
                "actions": [
                    {
                        "name": "SourceCodeRepo",
                        "actionTypeId": {
                            "category": "Source",
                            "owner": "ThirdParty",
                            "provider": "GitHub",
                            "version": "1" …
Run Code Online (Sandbox Code Playgroud)

aws-cloudformation aws-codepipeline aws-serverless

5
推荐指数
1
解决办法
5175
查看次数

如何修复模板资源块中未解决的资源依赖关系 [ApiGatewayRestApi]

我正在尝试将 ApiGatewayRestApi 设置为环境变量。我在尝试使用“sls deploy”进行部署时收到以下错误:

CloudFormation 模板无效:模板格式错误:模板的资源块中未解析的资源依赖项 [ApiGatewayRestApi]。

这是 serverless.yml 文件:

service: upranklytoolsApi
frameworkVersion: '2 || 3'

provider:
  name: aws
  runtime: nodejs12.x
  region: us-east-1
  stage: dev
  apiGateway:
    minimumCompressionSize: 1024
  
  environment:
    RestApiId:  
      Ref: ApiGatewayRestApi
 

  iamRoleStatements:
    - Effect: "Allow"
      Action:
        - "dynamodb:DescribeTable"
        - "dynamodb:PutItem"
        - "dynamodb:Get*"
        - "dynamodb:Scan*"
        - "dynamodb:Query"
        - "dynamodb:UpdateItem"
        - "dynamodb:DeleteItem"
        - "dynamodb:BatchWriteItem"
        - "lambda: InvokeFunction"
        - "lambda: InvokeAsync"
        - "dynamodb:ConditionCheckItem"
      Resource: arn:aws:dynamodb:${aws:region}:${aws:accountId}:table/${self:service}-ranktrackerTable-${self:provider.stage}
    
    - Effect: Allow
      Action:
        - cognito-idp:CreateUserPool
        - cognito-idp:DeleteUserPool
        - cognito-idp:UpdateUserPool
        - cognito-idp:DescribeUserPool
      Resource: '*'

custom:
  serverless-offline:
    port: …
Run Code Online (Sandbox Code Playgroud)

aws-lambda serverless-framework aws-serverless

5
推荐指数
1
解决办法
5711
查看次数

Vercel 通过来自 SvelteKit 应用程序的简单 GraphQL 请求“此无服务器功能已崩溃”

我在初始页面加载时经常遇到看似随机的错误。我认为问题与 Vercel Serverless Functions 有关。

\n

我经常在网站本身上收到此错误:\n在此输入图像描述

\n

Vercel 的完整日志:

\n
[GET] /\n14:54:19:39\n2022-07-21T12:54:19.426Z    3a175b6b-396b-45d5-b1a1-46072201cd6a    ERROR   Unhandled Promise Rejection     \n{"errorType":"Runtime.UnhandledPromiseRejection","errorMessage":"FetchError: request to \nhttps://api-eu-central-1.graphcms.com/v2/cl2k6hi1809a401xk4hd3h5zj/master failed, reason: \nClient network socket disconnected before secure TLS connection was \nestablished","reason":{"errorType":"FetchError","errorMessage":"request to https://api-\neu-central-1.graphcms.com/v2/cl2k6hi1809a401xk4hd3h5zj/master failed, reason: Client \nnetwork socket disconnected before secure TLS connection was \nestablished","code":"ECONNRESET","message":"request to https://api-eu-central-\n1.graphcms.com/v2/cl2k6hi1809a401xk4hd3h5zj/master failed, reason: Client network socket \ndisconnected before secure TLS connection was \nestablished","type":"system","errno":"ECONNRESET","stack":["FetchError: request to \nhttps://api-eu-central-1.graphcms.com/v2/cl2k6hi1809a401xk4hd3h5zj/master failed, reason: \nClient network socket disconnected before secure TLS connection was established","    at \nClientRequest.<anonymous> (/var/task/index.js:7892:18)"," …
Run Code Online (Sandbox Code Playgroud)

graphql svelte vercel aws-serverless

5
推荐指数
1
解决办法
3525
查看次数

无法在Node.js中导入模块``处理程序''AWS Lambda函数

我不断收到此错误,但我不知道是什么原因引起的。

我有一个根据条件发布到另一个API的API,但是在包装API中遇到此错误。

这是代码...

handler.js

'use strict';
const axios = require('axios');

module.exports.thumbnailWrapperAPI = (event, context, callback) => {


  const incomingData = JSON.parse(event.body);
  if(incomingData.source.includes('png') || incomingData.source.includes('jpg')){
    const newLocal = 'some endpoint...';
    // call image resizing API...
    axios.post(newLocal,{
      source: incomingData.source,
      target: incomingData.target,
      width: incomingData.width
    })
    .then(response => callback(null,response))
    .catch(error => callback(error))

  } else if(incomingData.source.includes('html')) {
    // handle HTML
  } else {
    //...
  };
};
Run Code Online (Sandbox Code Playgroud)

serverless.yaml

service: thumbnailWrapperAPI 
provider:
  name: aws
  runtime: nodejs8.10
  region: eu-west-1

functions:
  thumbnailWrapperAPI:
    handler: handler.thumbnailWrapperAPI
    events:
      - http:
          path: generatethumbnail/ …
Run Code Online (Sandbox Code Playgroud)

node.js aws-lambda serverless-framework aws-serverless

4
推荐指数
2
解决办法
4461
查看次数

AWS cloudformation错误:模板验证错误:模板错误:资源NotificationsTopic不支持Fn :: GetAtt中的属性类型Arn

我正在尝试使用yaml模板创建一个AWS cloudformation堆栈。目标是为某些通知创建一个sns主题。我想输出主题arn,以便仅指定主题arn就可以为该主题订阅多个功能。

但是,当我尝试从aws控制台创建堆栈时遇到错误:

“模板验证错误:模板错误:资源NotificationsTopic不支持Fn :: GetAtt中的属性类型Arn”

对于s3存储桶,dynamodb表,我所做的工作完全相同,而且一切正常,但是由于某种原因,对于SNS主题,我无法获得ARN。

我想避免在订阅的所有函数中对主题arn进行硬编码。因为如果有一天ARN主题发生更改,那么我将需要更改所有功能,而我想将主题arn导入所有功能中并使用它。这样,如果将来由于任何原因我有一个新的arn主题,我将无需进行任何修改。

这是模板:

    Parameters:
  stage:
    Type: String
    Default: dev
    AllowedValues:
      - dev
      - int
      - uat
      - prod

Resources:
   NotificationsTopic:
        Type: AWS::SNS::Topic
        Properties:
          DisplayName: !Sub 'notifications-${stage}'
          Subscription:
            - SNS Subscription
          TopicName: !Sub 'notifications-${stage}'
Outputs:
  NotificationsTopicArn:
    Description: The notifications topic Arn.
    Value: !GetAtt NotificationsTopic.Arn
    Export:
      Name: !Sub '${AWS::StackName}-NotificationsTopicArn'
  NotificationsTopicName:
    Description: Notifications topic name.
    Value: !Sub 'notifications-${stage}'
    Export:
      Name: !Sub '${AWS::StackName}-NotificationsTopicName'
Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-sns aws-cloudformation aws-serverless

4
推荐指数
1
解决办法
3818
查看次数

无服务器框架,API网关URL何时更改?

我正在使用无服务器框架在AWS上部署带有http端点的lambda。这可以正常工作并返回API网关端点。

我想知道端点URL在什么情况下会更改。我需要URL保持不变,知道删除和重新部署服务将更改URL。

在其他情况下,URL会更改吗?

aws-cloudformation aws-lambda serverless-framework serverless-plugins aws-serverless

4
推荐指数
1
解决办法
328
查看次数