【问题标题】:Lambda not able to execute the aws sdk APILambda 无法执行 aws sdk API
【发布时间】:2020-11-25 21:26:37
【问题描述】:

我正在尝试创建一个 lambda 函数,该函数将检查 codecommit 中是否存在特定的存储库。 Lamda 服务角色具有管理员权限。下面是代码。 lambda 无法调用 getRepository 方法。它既没有给出任何例外,也没有通过。对此有什么帮助吗? console.log("Before call cc") 这是最后打印的语句。之后我没有得到任何成功或错误日志。

const CloudFormation = require('aws-sdk/clients/cloudformation');
const Codecommit = require('aws-sdk/clients/codecommit');
exports.handler = async (event) => {
    try{
        console.log("event",event);
    console.log("event",JSON.stringify(event));
    var repositoryName = event.detail.repositoryName;
    var cfn = new CloudFormation({ 
    region: "ap-northeast-1"
    });
    var cc = new Codecommit({ 
    region: "ap-northeast-1"
    });
    const stackName = repositoryName+"-infra-stack";
    var cloneUrl;
    console.log("RepositoryName"+repositoryName);
    console.log("StackName"+stackName);
    var codeCommitParam = {
        repositoryName: repositoryName
      };
    try{
        console.log("Before calling cc")
        cc.getRepository(codeCommitParam, function(err, data) {
        if (err){
            console.log(err, err.stack);
        }else {
            console.log(data.repositoryMetadata.cloneUrlHttp);
            cloneUrl=data.repositoryMetadata.cloneUrlHttp; 
            console.log("Clone url "+cloneUrl);        
            checkStackDescription();
        }   
      });
    }catch(error){
        console.log(error);
    }
}

【问题讨论】:

  • 您有活动示例吗?
  • lambda 的超时时间是多少?
  • 是的.. 这是事件{ version: '0', id: '***', 'detail-type': 'CodeCommit Repository State Change', source: 'aws.codecommit', account: '***', time: '2020-08-05T07:40:51Z', region: '***', resources: [ '*' ], detail: { callerUserArn: '***', commitId: *** event: 'referenceUpdated', oldCommitId: '****', referenceFullName: 'refs/heads/master', referenceName: 'master', referenceType: 'branch', repositoryId: '***', repositoryName: 'custom-ui-pipeline' } }
  • @NghiaDo 超时为 4 分钟。

标签: amazon-web-services aws-lambda aws-sdk aws-sdk-nodejs


【解决方案1】:

我相信这归结为 Lambda 中的 JavaScript 被异步调用,因此 Lambda 在回调处理响应之前完成调用。

通过更新到以下语法尝试更新以同步使用它。

console.log("Before calling cc")
let result = await cc.getRepository(codeCommitParam).promise();

console.log(result);

请注意,result 可能是错误或有效响应。

【讨论】:

  • Try 在代码后面用 Catch 正确关闭。关于 lambda 超时,我已将其增加到 4 分钟。此外,Lambda 不在任何 VPC 中。
  • 嗯好的,我认为它实际上是在您的 Lambdas NodeJS 回调上运行的异步。更新以使其同步,我可以在日志中查看。更新答案
  • 是的,这就是问题所在。感谢您在这里帮助我。:)
  • 没问题,很高兴我能帮上忙 :)
  • 我没有使用 await,而是删除了 top async。希望这不会在 lambda 中造成任何问题。
猜你喜欢
  • 2019-06-25
  • 2019-08-24
  • 2017-10-03
  • 1970-01-01
  • 2020-02-06
  • 2022-11-28
  • 1970-01-01
  • 1970-01-01
  • 2021-01-17
相关资源
最近更新 更多