import json import botocore.exceptions from secrets_manager.constants import CREATE_ONLY_PARAMETERS def create_or_update_secret(client, secret_name, secret, **kwargs): secret_str = json.dumps(secret) try: client.create_secret( Name=secret_name, SecretString=secret_str, **kwargs ) except botocore.exceptions.ClientError as exc: if hasattr(exc, "response") and exc.response["Error"]["Code"] == \ "ResourceExistsException": for param in CREATE_ONLY_PARAMETERS: kwargs.pop(param, None) client.update_secret( SecretId=secret_name, SecretString=secret_str, **kwargs ) else: raise exc