Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何使用aws sdk在现有lambda函数上创建API网关触发器?_Node.js_Amazon Web Services_Aws Lambda_Aws Sdk_Aws Api Gateway - Fatal编程技术网

Node.js 如何使用aws sdk在现有lambda函数上创建API网关触发器?

Node.js 如何使用aws sdk在现有lambda函数上创建API网关触发器?,node.js,amazon-web-services,aws-lambda,aws-sdk,aws-api-gateway,Node.js,Amazon Web Services,Aws Lambda,Aws Sdk,Aws Api Gateway,如何使用aws sdk在现有lambda函数上创建触发器 我希望使用代理集成类型作为触发器的API网关端点 我使用的是nodejs和aws sdk 2.39.0。虽然不优雅,但它可以工作 我非常高兴收到修订/更好的解决方案。我对AWS SDK非常陌生 const createApi = () => { sts.getCallerIdentity(function(err, data) { if (err) { console.log(err

如何使用aws sdk在现有lambda函数上创建触发器

我希望使用代理集成类型作为触发器的API网关端点


我使用的是nodejs和aws sdk 2.39.0。

虽然不优雅,但它可以工作

我非常高兴收到修订/更好的解决方案。我对AWS SDK非常陌生

const createApi = () => {

    sts.getCallerIdentity(function(err, data) {
        if (err) {
            console.log(err);
        } else {

            const accountId = data.Account;
            const functionName = 'resize-images-on-' + settings.aws.bucket;

            const apiName = 'resize-images-on-' + settings.aws.bucket + '-api';
            const uri = 'arn:aws:apigateway:' + settings.aws.region + ':lambda:path/2015-03-31/functions/arn:aws:lambda:' + settings.aws.region + ':' + accountId + ':function:' + functionName + '/invocations';

            var apiSwagger = {
              "swagger": "2.0",
              "info": {
                "version": "2017-04-10T12:43:16Z",
                "title": apiName
              },
              "basePath": "/prod",
              "schemes": [
                "https"
              ],
              "paths": {
                "/resize": {
                  "x-amazon-apigateway-any-method": {
                    "responses": {
                      "200": {
                        "description": "200 response"
                      }
                    },
                    "x-amazon-apigateway-integration": {
                      "responses": {
                        ".*": {
                          "statusCode": "200"
                        }
                      },
                      "uri": uri,
                      "passthroughBehavior": "when_no_match",
                      "httpMethod": "POST",
                      "type": "aws_proxy"
                    }
                  }
                }
              }
            }

            apiSwagger = JSON.stringify(apiSwagger);

            const apiParams = {
                body: apiSwagger,
            };

            apigateway.importRestApi(apiParams, function(err, data) {
                if (err) {
                    console.log(err);
                } else {
                    console.log('API created');
                    configureLambda(data.id, accountId);
                }
            });
        }
    });
}

const configureLambda = (apiId, accountId) => {

    console.log('Configuring lambda ...');

    const functionName = 'resize-images-on-' + settings.aws.bucket;

    const lambdaPolicies = [
        {
            Action: "lambda:InvokeFunction", 
            FunctionName: functionName, 
            Principal: "apigateway.amazonaws.com", 
            StatementId: uuid(),
            SourceArn: 'arn:aws:execute-api:' + settings.aws.region + ':' + accountId + ':' + apiId + '/prod/ANY/resize'
        },
        {
            Action: "lambda:InvokeFunction", 
            FunctionName: functionName, 
            Principal: "apigateway.amazonaws.com", 
            StatementId: uuid(),
            SourceArn: 'arn:aws:execute-api:' + settings.aws.region + ':' + accountId + ':' + apiId + '/*/*/resize'
        }
    ];


    lambda.addPermission(lambdaPolicies[0], function(err, data) {
        if (err) {
            console.log(err);
        } else {
            lambda.addPermission(lambdaPolicies[1], function(err, data) {
                if (err) {
                    console.log(err);
                } else {
                    console.log('Lambda configured');
                }
            });

        }
    });
}