简体   繁体   English

从 AWS secrets 调用中获取 undefined

[英]Getting undefined back from AWS secrets call

I've seen this question around, but it seems nobody is having the same problem as me.我已经看到了这个问题,但似乎没有人遇到与我相同的问题。 I followed the AWS docs and implemented their code the way they told me to, but I keep getting undefined back?我遵循了 AWS 文档并按照他们告诉我的方式实现了他们的代码,但我总是得到 undefined 返回?

Here's the code:这是代码:

// Load the AWS SDK
var AWS = require('aws-sdk'),
    region = "myRegion",
    secretName = "myARN",
    secret,
    decodedBinarySecret;

// Create a Secrets Manager client
var client = new AWS.SecretsManager({
    region: region
});

// In this sample we only handle the specific exceptions for the 'GetSecretValue' API.
// See https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html
// We rethrow the exception by default.

client.getSecretValue({SecretId: secretName}, function(err, data) {
    if (err) {
        if (err.code === 'DecryptionFailureException')
            // Secrets Manager can't decrypt the protected secret text using the provided KMS key.
            // Deal with the exception here, and/or rethrow at your discretion.
            throw err;
        else if (err.code === 'InternalServiceErrorException')
            // An error occurred on the server side.
            // Deal with the exception here, and/or rethrow at your discretion.
            throw err;
        else if (err.code === 'InvalidParameterException')
            // You provided an invalid value for a parameter.
            // Deal with the exception here, and/or rethrow at your discretion.
            throw err;
        else if (err.code === 'InvalidRequestException')
            // You provided a parameter value that is not valid for the current state of the resource.
            // Deal with the exception here, and/or rethrow at your discretion.
            throw err;
        else if (err.code === 'ResourceNotFoundException')
            // We can't find the resource that you asked for.
            // Deal with the exception here, and/or rethrow at your discretion.
            throw err;
    }
    else {
        // Decrypts secret using the associated KMS key.
        // Depending on whether the secret is a string or binary, one of these fields will be populated.
        if ('SecretString' in data) {
            let secret = data.SecretString;
            secret = JSON.parse(secret);
        } else {
            let buff = Buffer.from(data.SecretBinary, 'base64');
            decodedBinarySecret = buff.toString('ascii');
        }
    }
    
    // Your code goes here.
    // This is where undefined gets spit out
    console.log(decodedBinarySecret);
    console.log(secret);
});

There must be something that I'm missing / not doing?一定有什么我想念/没有做的事情吗?

It seems that in the outer else part of your conditional statement you're re-declaring the secret variable which you've also declared at the very top.似乎在条件语句的外部else部分中,您正在重新声明您也在最顶部声明的secret变量。 That secret variable gets a value but only inside the nested if body not outside.该秘密变量获得一个值,但仅在嵌套的 if 主体内部不在外部。 Which keeps the secret variable still undefined.这使得秘密变量仍然未定义。

Also, according to your code either variable secret will have some value or decodedBinarySecret .此外,根据您的代码,变量secret将具有一些值或decodedBinarySecret One of them will be undefined.其中之一将是未定义的。

Try not to re-declare the variable inside the body.尽量不要在体内重新声明变量。 See below code.请参见下面的代码。

 else {
    // Decrypts secret using the associated KMS key.
    // Depending on whether the secret is a string or binary...
    if ('SecretString' in data) {
        secret = data.SecretString;
        secret = JSON.parse(secret);
    } else {
        let buff = Buffer.from(data.SecretBinary, 'base64');
        decodedBinarySecret = buff.toString('ascii');
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM