【问题标题】:Is it possible to set up an AWS API Gateway endpoint for a Lambda function, using the AWS API?是否可以使用 AWS API 为 Lambda 函数设置 AWS API Gateway 端点?
【发布时间】:2015-11-09 05:36:00
【问题描述】:

我通过设置指向 AWS Lambda 函数的 AWS API Gateway 端点向公共 HTTP 请求公开它。

这有两个部分:

  • 创建并上传我的 AWS Lambda 函数
  • 设置 API Gateway 以将 HTTP 端点指向我的 Lambda 函数

我想使用 API 调用而不是 Web 界面来完成这两个部分。我可以在第一部分使用 AWS 开发工具包和 AWS CLI。

但是,对于第二部分,我被卡住了。在查看 AWS SDK for node.js 或 AWS CLI 时,我没有发现 API 网关的提及

有没有办法使用 AWS API 以编程方式为 Lambda 函数设置 API Gateway 端点?

【问题讨论】:

  • CLI / SDK 对API Gateway 的支持尚未准备好。我个人希望在re:Invent 2015 上发布有关这些功能的更多详细信息。
  • 另外,CloudFormation 很可能对您未来的工作有所帮助。

标签: amazon-web-services aws-sdk aws-lambda aws-api-gateway


【解决方案1】:

是的,可以通过 AWS 的 API 为您的 AWS Lambda 函数设置您的 Amazon API Gateway 端点。

虽然 Node.js 和 AWS CLI 中的适用于 JavaScript 的 AWS 开发工具包尚不支持 Amazon API Gateway,但您可以使用 Amazon API Gateway REST API 设置它们而无需官方开发工具包。在这种情况下,您可能会使用这些 API:

  1. restapi:创建
  2. 资源:创建
  3. 方法:放置
  4. 集成:放置
  5. 集成响应:放置
  6. 方法响应:放置

您可能希望使用第三方库将 Amazon API Gateway 与 AWS Lambda 集成,例如 jaws-stack/JAWS 或 r7kamura/fluct。

【讨论】:

    【解决方案2】:

    是的……绝对有可能。下面是一些使用 AWS-SDK for node.js 的 node.js 代码。我在这里为方法集成做一个 POST。现在你需要一些东西。希望这会有所帮助...祝你好运!

    您用于网关 API 的方法的 ResourceId

    网关 API 休息 ID

    能够调用您的 Lambda 函数的调用角色的 ARN

    您要集成的 Lambda 函数的 ARN。

    var AWS = require('aws-sdk');
    
    api = new AWS.APIGateway(); 
    
    var params = {
        httpMethod: 'POST',
        resourceId: [YOUR RESOURCE ID],
        restApiId: [YOUR REST API ID],
        type: 'AWS',
        uri: [YOUR LAMBDA FUNCTION ARN],
        integrationHttpMethod: 'POST',
        credentials : [YOUR INVOKE ROLE ARN]
    };
    
    api.putIntegration(params, function (err, data) {
        if (err) {
            console.log('AWS Error', err);
        } else {
            console.log('Put Integration Method Created', data);
        }
    });
    

    【讨论】:

    • 谢谢凯文! uri 不容易弄清楚,所以这里有一个更详细的描述,以防它帮助某人:--uri arn:aws:apigateway:aws-region:lambda:path/2015-03-31/functions/arn:aws :lambda:aws-region:aws-acct-id:function:your-lambda-function-name/invocations
    【解决方案3】:

    是的,这是可行的。

    JAWS 项目有一个漂亮而简单的 js 实现,而且效果很好 https://github.com/jaws-stack/jaws-api-gateway-client

    此外,最新的 AWS CLI(1.99 版)已完全支持 API Gateway。 http://docs.aws.amazon.com/cli/latest/reference/apigateway/index.html#cli-aws-apigateway

    【讨论】:

      【解决方案4】:

      您可以将您的 API 端点指向 Lambda 函数。在 API Gateway 中新建 HTTP 方法时,选择“集成类型”为“Lambda 函数”,然后选择需要调用的 Lambda 函数。

      主要挑战是将 API 输入参数映射到 Lambda 模型对象,您可以手动定义映射或提供模型架构(使用 json-schema)。

      示例映射:

      {
          "firstname" : "$input.params('firstname')",
          "lastname"  : "$input.params('lastname')"
      }
      

      有关为 Java 8 编写的分步教程,请参阅 this blog 帖子。

      【讨论】:

        猜你喜欢
        • 2020-08-21
        • 1970-01-01
        • 1970-01-01
        • 2021-08-14
        • 1970-01-01
        • 2017-12-07
        • 2017-08-24
        • 1970-01-01
        • 2017-12-11
        相关资源
        最近更新 更多