Лямбда не может выполнить aws sdk API - PullRequest
0 голосов
/ 05 августа 2020

Я пытаюсь создать лямбда-функцию, которая будет проверять, существует ли конкретный репозиторий в codecommit. Роль службы Lamda имеет права администратора. Ниже приведен код. Лямбда не может вызвать метод getRepository. Это не дает никаких исключений и не проходит. Любая помощь по этому поводу? console.log («Перед вызовом 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);
    }
}

1 Ответ

1 голос
/ 05 августа 2020

Я считаю, что это сводится к JavaScript в Lambda, вызываемом асинхронно, поэтому Lambda завершает вызов до того, как обратный вызов обработает ответ.

Попытайтесь обновить, чтобы использовать это синхронно, обновив ниже синтаксис.

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

console.log(result);

Имейте в виду, что result может быть ошибкой или действительным ответом.

...