in packages/aws-rfdk/lib/lambdas/nodejs/x509-certificate/handlers.ts [111:156]
protected async createAndStoreSecret(args: {
readonly database: CompositeStringIndexTable,
readonly name: string;
readonly physicalId: string;
readonly purpose: string;
readonly data: string | Buffer;
readonly description: string;
readonly tags: Array<{ Key: string, Value: string }>;
readonly encryptionKey?: Key
}): Promise<string> {
let secretArn: string;
const existingItem = await args.database.getItem({
primaryKeyValue: args.physicalId,
sortKeyValue: args.purpose,
});
if (existingItem) {
if (!existingItem.ARN) {
throw Error("Database Item missing 'ARN' attribute");
}
secretArn = existingItem.ARN as string;
const secret = Secret.fromArn(secretArn, this.secretsManagerClient);
await secret.putValue(args.data);
} else {
const secret = await Secret.create({
name: args.name,
client: this.secretsManagerClient,
description: args.description,
data: args.data,
tags: args.tags,
encryptionKey: args.encryptionKey,
});
if (!secret || !secret.arn) {
throw Error('Could not create Secret');
}
secretArn = secret.arn;
await args.database.putItem({
primaryKeyValue: args.physicalId,
sortKeyValue: args.purpose,
attributes: {
ARN: secretArn,
},
allow_overwrite: false,
});
}
return secretArn;
}