【问题标题】:Serverless framework: Serverless Error Function not found:无服务器框架:未找到无服务器错误功能:
【发布时间】:2020-09-25 01:01:04
【问题描述】:

我开始使用 nodejs 和无服务器框架。

我的 handler.js 包含:

'use strict';
var index = require('./index.js');

module.exports.hello = async event => {
  var res = await index.main();

  console.log('hello');
  console.log(res);

  console.log('IN HANDLER');
  return {
    statusCode: 200,
    body: JSON.stringify(
      {
        message: 'main function executed!',
        input: event,
      },
      null,
      2
    ),
  };


};

我的 serverless.yml 包含:

# You can pin your service to only deploy with a specific Serverless version
# Check out our docs for more details
# frameworkVersion: "=X.X.X"

provider:
  name: aws
  runtime: nodejs12.x
  region: us-east-1
  # here we put the layers we want to use
  layers:
    # Google Chrome for AWS Lambda as a layer
    # Make sure you use the latest version depending on the region
    # https://github.com/shelfio/chrome-aws-lambda-layer
    # - arn:us-east-1:arn:aws:lambda:us-east-1:764866452798:layer:chrome-aws-lambda:10
    - arn:aws:lambda:us-east-1:764866452798:layer:chrome-aws-lambda:10
  # function parameters

# you can add packaging information here
#package:
#  include:
#    - include-me.js
#    - include-me-dir/**
#  exclude:
#    - exclude-me.js
#    - exclude-me-dir/**

functions:
  hello:
    handler: handler.hello
  # main:
    # handler: handler.main
#    The following are a few example events you can configure
#    NOTE: Please make sure to change your handler code to work with those events
#    Check the event documentation for details
    events:
     - http:
         path: hello/get
         method: get

我的 index.js:

async function main(event, context, callback) {
  const chromium = require('chrome-aws-lambda');
  const puppeteer = require('puppeteer');
  const os = require('os');
  const CREDS = require('./.creds');

  // exports.handler = async (event, context, callback) => {
  let result = null;
  let browser = null;

    try {
      browser = await chromium.puppeteer.launch({
        args: chromium.args,
        defaultViewport: chromium.defaultViewport,
        executablePath: await chromium.executablePath,
        headless: chromium.headless,
        ignoreHTTPSErrors: true,
      })
    } 
      catch {
      console.log('browser failed')
    };



  var page = await browser.newPage();

   ........



  // })().catch(e => { console.error(e) });
};

main().catch(e => { console.error(e) });

module.exports.main = main;

当我跑步时:

$ sls invoke -f hello

 Serverless Error ---------------------------------------

 Function not found: arn:aws:lambda:us-east-1:155754363046:function:sellthelandnow-dev-hello

错误在标题中。我在这里做错了什么?

【问题讨论】:

  • sellthelandnow-dev-hello 是什么?我没有在代码中的任何地方看到它

标签: node.js serverless-framework


【解决方案1】:

在我的具体情况下,当 我在 AWS 管理控制台中删除部署的 lambda 函数 但没有删除应用程序堆栈并尝试 时,我遇到了这个错误代码>再次部署 lambda 函数使用

serverless deploy

您必须删除应用程序堆栈并确保为您的 lambda 删除 IAM 执行角色。


附加信息

我不必删除 s3 存储桶 - 它已被重复使用。

您可以在 AWS 管理控制台中找到您的应用程序堆栈

  • AWS Management ConsoleLambdaApplications

然后删除

  • AWS Management ConsoleCloudFormationStacks
  • 如果删除失败,系统可能会提示您保留关联资源(IAM 角色和 s3 存储桶)
  • 选择保留资源,然后手动删除它们

错误信息

发生错误:[functionName]LambdaFunction - 资源处理程序返回消息:“找不到 Lambda 函数 [应用程序堆栈名称]-[应用程序阶段]-[lambda 函数名称]”(RequestToken:01010011-0111-0011- 1100-001100110011,处理程序错误代码:未找到)。

【讨论】:

    【解决方案2】:

    让我在这里解释一下。无服务器框架可以通过两种方式调用(运行)lambda(本地和云-AWS)。 您似乎正在尝试在 AWS 中调用 lambda。 (arn:aws:lambda:us-east-1:155754363046:function:sellthelandnow-dev-hello) 基本上,您的 AWS-155754363046 账户中不存在此 arn。你需要使用

    serverless deploy
    

    将lamdba部署到aws env。如果你只是想在本地测试,命令是

    serverless invoke local --function functionName
    

    所以我会建议如果你想在云中调用 lambda。你需要先部署它或者你使用调用本地。

    谢谢,

    阿什

    【讨论】:

    • 非常感谢!
    猜你喜欢
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 2017-09-30
    • 2018-09-17
    • 1970-01-01
    • 2021-05-12
    • 1970-01-01
    • 2020-09-25
    相关资源
    最近更新 更多