in source/custom-resource/index.ts [418:459]
async function checkSecretsManager(requestProperties: CheckSecretManagerRequestProperties): Promise<{ Message: string; ARN: string }> {
const { SecretsManagerName, SecretsManagerKey } = requestProperties;
if (isNullOrWhiteSpace(SecretsManagerName)) {
throw new CustomResourceError('SecretNotProvided', 'You need to provide AWS Secrets Manager secret.');
}
if (isNullOrWhiteSpace(SecretsManagerKey)) {
throw new CustomResourceError('SecretKeyNotProvided', 'You need to provide AWS Secrets Manager secret key.');
}
let arn = '';
for (let retry = 1; retry <= RETRY_COUNT; retry++) {
try {
const response = await secretsManager.getSecretValue({ SecretId: SecretsManagerName }).promise();
const secretString = JSON.parse(response.SecretString);
if (!Object.prototype.hasOwnProperty.call(secretString, SecretsManagerKey)) {
throw new CustomResourceError('SecretKeyNotFound', `AWS Secrets Manager secret requires ${SecretsManagerKey} key.`);
}
arn = response.ARN;
break;
} catch (error) {
if (retry === RETRY_COUNT) {
console.error(`AWS Secrets Manager secret or signature might not exist: ${SecretsManagerName}/${SecretsManagerKey}`);
throw error;
} else {
console.info('Waiting for retry...');
await sleep(getRetryTimeout(retry));
}
}
}
return {
Message: 'Secrets Manager validated.',
ARN: arn
};
}