【问题标题】: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.jsAWS 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/JAWSr7kamura/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
        相关资源
        最近更新 更多