Skip to content

Instantly share code, notes, and snippets.

@filipeandre
Last active May 17, 2024 11:44
Show Gist options
  • Save filipeandre/005bef43f678a21709745cd58b81df23 to your computer and use it in GitHub Desktop.
Save filipeandre/005bef43f678a21709745cd58b81df23 to your computer and use it in GitHub Desktop.
Trigger a stack update optionaly passing new parameters (no wait)
#!/usr/bin/env python
import argparse
import boto3
def main():
parser = argparse.ArgumentParser(description='Update AWS CloudFormation stack while overriding a specific parameter.')
parser.add_argument('--region', '-r', required=True, help='AWS region where the stack is located')
parser.add_argument('--stack-name', '-s', required=True, help='Name of the CloudFormation stack')
parser.add_argument('--parameters', '-p', default="", help='Example: key1=val1 key2=val2')
args = parser.parse_args()
cf = boto3.client('cloudformation', region_name=args.region)
response = cf.describe_stacks(StackName=args.stack_name)
parameters = response['Stacks'][0]['Parameters']
updated_parameters = []
new_parameters = {pair.split('=')[0]: pair.split('=')[1] for pair in args.parameters.split()}
for param in parameters:
key = param['ParameterKey']
if key in new_parameters:
updated_parameters.append({
'ParameterKey': param['ParameterKey'],
'ParameterValue': new_parameters[key],
'UsePreviousValue': False
})
else:
updated_parameters.append({
'ParameterKey': key,
'UsePreviousValue': True
})
update_response = cf.update_stack(
UsePreviousTemplate=True,
StackName=args.stack_name,
Parameters=updated_parameters,
Capabilities=['CAPABILITY_IAM', 'CAPABILITY_NAMED_IAM']
)
print(f"Update initiated, Stack ID: {update_response['StackId']}")
return update_response['StackId']
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment