最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Lambda Node 8功能不等待方法(AWS服务调用)来完成

运维笔记admin7浏览0评论

Lambda Node 8功能不等待方法(AWS服务调用)来完成

Lambda Node 8功能不等待方法(AWS服务调用)来完成

我正在通过对Lambda的API网关调用向CloudFront创建失效,但失效仅在5次尝试中被处理。我确定我遗漏了一些能够正确等待调用createInvalidation方法的东西。

'use strict';

var AWS = require('aws-sdk');

var cloudfront = new AWS.CloudFront();

var distID = process.env.DISTRIBUTION_ID;

exports.handler = async(event) => {

  var path = (event.queryStringParameters.path);
  console.log(event.queryStringParameters.path);

  var params = {
    DistributionId: distID, 
    InvalidationBatch: { 
      CallerReference: (event.requestContext.requestId), 
      Paths: { 
        Quantity: 1, 
        Items: [
          path
        ]
      }
    }
  };

  await cloudfront.createInvalidation(params, function(err, data) {
    if (err) console.log(err, err.stack); // an error occurred
    else console.log(data); // successful response
    return data;
  });

};

Lambda函数每次都完成,并且正在接收和解析API网关调用以填充变量,但createInvalidation仅在5次尝试中发生,尽管其他4次尝试没有错误。

回答如下:

请尝试以下代码段:

// import * as AWS from 'aws-sdk';

exports.handler = async(event) => 
{
    const cloudfront = new AWS.CloudFront();

    const distID = process.env.DISTRIBUTION_ID;
    const path = (event.queryStringParameters.path);
    console.log(event.queryStringParameters.path);

    const params = 
    {
        DistributionId: distID, 
        InvalidationBatch: 
        { 
            CallerReference: (event.requestContext.requestId), 
            Paths: { Quantity: 1,  Items: [ path ] }
        }
    };

    try
    {
        const resp = await cloudfront.createInvalidation(params).promise();

        console.log(resp);
    }
    catch (ex)
    {
        console.error(ex);
    }
};
发布评论

评论列表(0)

  1. 暂无评论