title: Access AWS Secrets Manager secret from AWS Lambda with JS
body: <p>I created a secret in the AWS Secrets Manager. Trying the example code I got from the AWS Secret manager page does not yield any result.
  Below is the example code <em>dumbly</em> copied into a javascript AWS Lambda function.</p>
  <p>In order to make it work, I had to add <code>await</code> at the beginning and <code>.promise()</code> to the API call.</p>
  <p>Following the <a href="https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/using-promises.html" rel="nofollow noreferrer">instruction on AWS Promises</a> I only would need to add the <code>await</code> and <code>promise()</code> instead of using a callback function:</p>
  <blockquote>
  <p>The AWS.Request.promise method provides a way to call a service operation and manage asynchronous flow instead of using callbacks</p>
  </blockquote>
  <p><strong>QUESTION:</strong> The example code already contains a callback, why do I need to add <code>await</code> and <code>prommise</code>? What did I miss?</p>
  <hr />
  <p>Example AWS Lambda function code:</p>
  <pre class="lang-js prettyprint-override"><code>exports.handler = async function(event, context, callback) {
      // Use this code snippet in your app.
      // If you need more information about configurations or implementing the sample code, visit the AWS docs:
      // https://aws.amazon.com/developers/getting-started/nodejs/
  
      // Load the AWS SDK
      var AWS = require('aws-sdk'),
          region = &quot;eu-west-1&quot;,
          secretName = &quot;MY_SUPER_SECRET&quot;,
          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.
  
      // ---&gt; THIS await IS NEEDED TO MAKE IT WORK TOGETHER WITH THE promise() AT THE END
      await client.getSecretValue({SecretId: &quot;MY_SUPER_SECRET&quot;}, 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 CMK.
              // Depending on whether the secret is a string or binary, one of these fields will be populated.
              if ('SecretString' in data) {
                  secret = data.SecretString;
                  console.warn(&quot;secret&quot;)
                  console.warn(secret)
              } else {
                  let buff = new Buffer(data.SecretBinary, 'base64');
                  decodedBinarySecret = buff.toString('ascii');
                  console.warn(&quot;decodedBinarySecret&quot;)
                  console.warn(decodedBinarySecret)
              }
          }
      
      // Your code goes here. 
  
      // ---&gt; THIS promise IS NEEDED TO MAKE IT WORK TOGETHER WITH THE await AT THE BEGINING
      }).promise();
  )    
  </code></pre>