标签: serverless

在步骤函数 params.json 的参数中包含日期时间

我的 params.json 输入中有一部分用于一组步骤函数,并且我想修改一些参数以包含在输入参数中呈现的日期时间。

"Predictor": {
    "PredictorName": "normal_name_/*DATETIME HERE*/",
    "ForecastHorizon": 181,
    . . . 
    },
Run Code Online (Sandbox Code Playgroud)

我目前正在通过修改函数第一步中的输入参数来完成此操作,但是这是有问题的,因为每次运行它时,它都会重新渲染日期时间,并且我想“锁定”日期,就像步骤一样函数执行已创建。这可能吗?

python json aws-step-functions serverless aws-sam

2
推荐指数
1
解决办法
4384
查看次数

Vercel Production Branch 正在剥离 POST 上的授权标头到无服务器函数 API

该 API 没有什么特别的,但我有一个无服务器函数 POST API,它需要一个授权标头进行验证,然后写入数据库。

例如:

     curl --location --request POST 'https://myserver.server.com/api/endpoint' \
        --header 'Authorization: Bearer blahblahblahblah'
Run Code Online (Sandbox Code Playgroud)

在 Vercel 预览分支中,我能够使其正常工作,并且Authorization标头按预期传递到我的 API。当我在生产中对此进行测试时,Authorization标头将从请求中剥离(通过记录原始请求标头来确定)。预览版和生产版在标题方面有什么区别Authorization?我需要做什么才能在生产中转发标头?

任何帮助将不胜感激。提前致谢!

next.js serverless vercel authorization-header

2
推荐指数
1
解决办法
996
查看次数

如何将 chrome-aws-lambda 模块与 AWS lambda 函数一起使用?

我正在尝试使用 chrome-aws-lambda by node.js lambda 函数从 HTML 生成 pdf。我使用本手册创建了一个图层。另外,我尝试在我的函数中使用现有,但总是收到错误:Cannot read property 'puppeteer' of undefined。我的处理程序看起来像:

import chromium from 'chrome-aws-lambda';    
export const handler: Handler = async (event: AppsyncEvent) => {
      ...
      try {
        browser = await chromium.puppeteer.launch({
          args: chromium.args,
          defaultViewport: chromium.defaultViewport,
          executablePath: await chromium.executablePath,
          headless: chromium.headless
        });
    ....
      } finally {
    ....
      }
    }
Run Code Online (Sandbox Code Playgroud)

serverless.yml 中的 webpack 设置

webpack:
    webpackConfig: ../webpack.config.js
    includeModules:
      packagePath: '../package.json'
      forceInclude:
        - source-map-support
      forceExclude:
        - aws-sdk
        - chrome-aws-lambda
Run Code Online (Sandbox Code Playgroud)

webpack.config.js

module.exports = { …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services node.js aws-lambda serverless chrome-aws-lambda

2
推荐指数
1
解决办法
5309
查看次数

无服务器离线和 DynamoDB 抛出 Local UnknownEndpoint: Inaccessible host: localhost at port 8000 Service may not be available in localhostregion

我正在尝试无服务器,但我没有运气能够serverless-offline使用serverless-dynamodb-local. 我的设置非常少,需要 3 分钟才能重现,我是这样做的:

  1. 生成一个 TS Serverless 项目,例如 -sls create -t aws-nodejs-typescript --path folder-name
  2. 安装依赖项npm i
  3. 添加 DynamoDB 本地npm install --save serverless-dynamodb-local
  4. 添加无服务器离线npm install serverless-offline --save-dev
  5. 安装dynamodbsls dynamodb install


现在我更新serverless.ts文件

  1. 以正确的顺序包含已安装的插件
  plugins: [
    'serverless-esbuild',
    'serverless-dynamodb-local',
    'serverless-offline'
  ],
Run Code Online (Sandbox Code Playgroud)
  1. 添加customDynamoDB 配置,例如
  custom: {
    esbuild: { ... },
    dynamodb: {
      stages: ['dev'],
      start: {
        migrate: true
      }
    }
Run Code Online (Sandbox Code Playgroud)
  1. 最后一步是在资源中添加 DynamoDB
  resources: {
    Resources: {
      usersTable: {
        Type: 'AWS::DynamoDB::Table',
        Properties: { …
Run Code Online (Sandbox Code Playgroud)

typescript serverless-framework serverless serverless-offline amazon-dynamodb-local

2
推荐指数
1
解决办法
3375
查看次数

AWS 无服务器错误 - 对于表达式“Stacks[].StackStatus”,我们匹配预期路径:“ROLLBACK_COMPLETE”至少一次

在将无服务器 api 部署到 AWS lambda 期间,我收到如下错误消息:

错误:无法创建托管资源:服务员 StackCreateComplete 失败:服务员遇到终端故障状态:对于表达式“Stacks[].StackStatus”,我们匹配预期路径:“ROLLBACK_COMPLETE”至少一次

解决方案是什么以及如何解决这个问题?

amazon-web-services aws-cloudformation aws-code-deploy serverless aws-amplify

2
推荐指数
1
解决办法
3476
查看次数

错误:与数据源关联的解析器

我遇到了无服务器错误: Resolver associated with data sources从serverless.yml配置文件进行构建时:

# serverless.yml
...
mappingTemplates:
  - dataSource: Wallet
    type: Query
    field: walletFromId
    request: "_dynamo-get-wallet.txt"
    response: "_generic-result-response.txt"
  - dataSource: Wallet
    type: Query
    field: walletsFromUser
    request: "_dynamo-get-wallets-from-user.txt"
    response: "_generic-result-response.txt"
  - dataSource: Wallet
    type: Mutation
    field: registerWallet
    request: "_dynamo-put-wallet.txt"
    response: "_generic-result-response.txt"
dataSources:
  - type: AMAZON_DYNAMODB
    name: Wallet
    description: 'Wallet DataSource'
    config:
      tableName: "${self:custom.stage}-Wallet"
      serviceRoleArn: "arn:aws:iam::${self:custom.accountId}:role/${self:custom.appSync.serviceRole}"
...
Run Code Online (Sandbox Code Playgroud)

我也有一个schema.graphql:

type Query {
    # query the wallet with given id and get the output with detail info
    walletFromId(walletId: String!): Wallet! …
Run Code Online (Sandbox Code Playgroud)

amazon-dynamodb graphql serverless aws-appsync

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

AWS SQS无法可靠地触发Lambda

我已经使用Lambda和SQS设置了一个小型的无服务器应用程序。在我来说,我想触发一个拉姆达每一次消息添加到SQS队列。

我的serverless.yml中的功能

functions:
  collectGame:
    handler: js/collect.collectGame
    memorySize: 128
    timeout: 10
    events:
    - sqs:
        arn:
          Fn::GetAtt:
            - gameRequestQueue
            - Arn
    - http:
        method: post
        cors:
          origin: "https://my-api-url.com"
        path: get/game/{id}
        private: true
        request:
          parameters:
            paths:
              id:true
Run Code Online (Sandbox Code Playgroud)

我通过一次向队列发送31条消息来测试该过程,但意识到只有9个Lambda被执行(通过查看cloudwatch日志)。我查看了队列,可以确认队列中已填充所有消息,并且在触发9个Lambda之后可以确认队列为空。

我希望有31个Lambda死刑,但事实并非如此。有人知道消息未触发我的Lambda的潜在原因吗?

amazon-sqs amazon-web-services aws-lambda serverless

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

如何使用无服务器框架通过AWS API网关返回用Node.js编写的AWS Lambda函数的错误?

我正在编写供内部使用的API,并且这是我第一次使用无服务器框架。我正在Node.js中编写Lambda函数,并使用AWS API Gateway进行连接。

在某些情况下,我想返回一个自定义错误消息,而我试图编写一个允许我执行此操作的函数。现在,每当Lambda进程失败时,我都会从API收到一条标准消息。在代码中,如果我尝试使用杀死进程process.exit(1),即使我已经使用callback()以下命令返回了错误,也会收到一般错误:

{
    "message": "Internal server error"
}
Run Code Online (Sandbox Code Playgroud)

如果不使用process.exit(1),我会callback()在日志中看到通过错误返回的错误,但是该过程继续进行,最终超时:

{
    "message": "Endpoint request timed out"
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试了几种使用该callback()方法返回错误的方法,但是到目前为止,我还没有成功。我试过这种方法:

async function return_error(callback, context, error, returnCode){
  console.error("FATAL ERROR: ", error);
  let ErrorObj = {
    errorType : "InternalServerError",
    httpStatus : 500,
    requestId : context.awsRequestId,
    errorMessage : error
}
  callback(JSON.stringify(ErrorObj));
  process.exit(1);
}
Run Code Online (Sandbox Code Playgroud)

还有这个:

async function return_error(callback, error, returnCode){
  console.error("FATAL ERROR: ", error);
  callback({
    isBase64Encoded: false,
    statusCode: returnCode,
    headers: { 'Content-Type': 'application/json' …
Run Code Online (Sandbox Code Playgroud)

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

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

API网关授权者和注销(性能/安全注意事项)

我正在使用Cognito,API网关和授权者。授权者配置为缓存5分钟以提高性能。我觉得这是一个不错的功能。

我知道授权者是将身份验证逻辑放在一个地方的好方法,并且应用程序可以假定用户已被授权。但是,我对此表示怀疑。

渗透测试报告建议,一旦注销,令牌就不能使用。因此,为了安全起见,我不应该启用授权者缓存吗?这也意味着所有经过身份验证的API都要经过一个lambda授权者的开销...

同样从编码的角度来看,使用很难进行端到端测试的授权者真的是一个好主意吗?我可以将lambda函数作为一个单元进行测试。但是对我来说更重要的是它们已连接到正确的API。我目前无法看到可以轻松测试的方法。

另一个问题是查看代码,我再也无法轻易分辨出需要什么授权……我必须查看应该附加哪个授权者(例如CloudFormation),然后查看lambda代码本身。

使用授权者有什么好处吗?或实际上最佳做法是什么?

amazon-web-services aws-lambda aws-api-gateway serverless

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

我应该在Google Cloud Run上运行mysql吗?(或任何数据库)

我一直在研究在Google Cloud Run中运行Docker容器的新选项,但是,似乎没有关于是否应在Cloud run上运行MySQL的建议,显然,我知道它不是Web服务,并且我在GCP的官方Google文档中了解到,Google可能只是告诉人们请使用Cloud SQL(他们的SQL产品),但我没有在网上找到有关“在云运行中运行mysql”的任何建议,所以我想在这里问。冷启动的启动时间会降低解决方案的性能吗?(假设使用存储桶存储东西)

mysql serverless google-cloud-run

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