feat: added rate limit for sync secrets

This commit is contained in:
=
2024-05-16 21:34:31 +05:30
parent f398fee2b8
commit 704c630797
@@ -494,52 +494,63 @@ const syncSecretsAWSParameterStore = async ({
// don't use Promise.all() and promise map here // don't use Promise.all() and promise map here
// it will cause rate limit // it will cause rate limit
for (const key in secrets) { for (const key in secrets) {
if (!(key in awsParameterStoreSecretsObj)) { if (Object.hasOwn(secrets, key)) {
// case: secret does not exist in AWS parameter store if (!(key in awsParameterStoreSecretsObj)) {
// -> create secret // case: secret does not exist in AWS parameter store
if (secrets[key].value) { // -> create secret
if (secrets[key].value) {
await ssm
.putParameter({
Name: `${integration.path}${key}`,
Type: "SecureString",
Value: secrets[key].value,
...(metadata.kmsKeyId && { KeyId: metadata.kmsKeyId }),
// Overwrite: true,
Tags: metadata.secretAWSTag
? metadata.secretAWSTag.map((tag: { key: string; value: string }) => ({
Key: tag.key,
Value: tag.value
}))
: []
})
.promise();
}
// case: secret exists in AWS parameter store
} else if (awsParameterStoreSecretsObj[key].Value !== secrets[key].value) {
// case: secret value doesn't match one in AWS parameter store
// -> update secret
await ssm await ssm
.putParameter({ .putParameter({
Name: `${integration.path}${key}`, Name: `${integration.path}${key}`,
Type: "SecureString", Type: "SecureString",
Value: secrets[key].value, Value: secrets[key].value,
...(metadata.kmsKeyId && { KeyId: metadata.kmsKeyId }), Overwrite: true
// Overwrite: true, // Tags: metadata.secretAWSTag ? [{ Key: metadata.secretAWSTag.key, Value: metadata.secretAWSTag.value }] : []
Tags: metadata.secretAWSTag
? metadata.secretAWSTag.map((tag: { key: string; value: string }) => ({
Key: tag.key,
Value: tag.value
}))
: []
}) })
.promise(); .promise();
} }
// case: secret exists in AWS parameter store
} else if (awsParameterStoreSecretsObj[key].Value !== secrets[key].value) { await new Promise((resolve) => {
// case: secret value doesn't match one in AWS parameter store setTimeout(resolve, 50);
// -> update secret });
await ssm
.putParameter({
Name: `${integration.path}${key}`,
Type: "SecureString",
Value: secrets[key].value,
Overwrite: true
// Tags: metadata.secretAWSTag ? [{ Key: metadata.secretAWSTag.key, Value: metadata.secretAWSTag.value }] : []
})
.promise();
} }
} }
if (!metadata.shouldDisableDelete) { if (!metadata.shouldDisableDelete) {
for (const key in awsParameterStoreSecretsObj) { for (const key in awsParameterStoreSecretsObj) {
if (!(key in secrets)) { if (Object.hasOwn(awsParameterStoreSecretsObj, key)) {
// case: if (!(key in secrets)) {
// -> delete secret // case:
await ssm // -> delete secret
.deleteParameter({ await ssm
Name: awsParameterStoreSecretsObj[key].Name as string .deleteParameter({
}) Name: awsParameterStoreSecretsObj[key].Name as string
.promise(); })
.promise();
}
await new Promise((resolve) => {
setTimeout(resolve, 50);
});
} }
} }
} }