@@ -118,7 +118,10 @@ def resources(self, stack: Stack) -> list[AWSObject | Construct]:
118118 # Add the parameter during template creation even if the S3 key may not
119119 # be known yet. This is useful if creating a stack from code, so that
120120 # the exported template contains the parameter
121- stack .add_parameter (self .s3_key_parameter )
121+ stack .add_parameter (
122+ self .s3_key_parameter ,
123+ update_if_exist = True ,
124+ )
122125 # Adding the Output can be useful for Lambda function with versioning.
123126 # The exported value can be retrieved by the lambda without the need to update
124127 # the lambda version.
@@ -277,7 +280,7 @@ def add(self, element: AWSObject | Construct | Stack) -> Stack:
277280 # Special case to keep track of Assets and generate parameters
278281 # for the S3 keys
279282 if isinstance (construct , Asset ):
280- self .add_parameter (construct .s3_key_parameter )
283+ self .add_parameter (construct .s3_key_parameter , update_if_exist = True )
281284 self .assets [construct .name ] = construct
282285
283286 constructs_to_objects .extend (construct .resources (stack = self ))
@@ -296,16 +299,20 @@ def extend(self, elements: Iterable[AWSObject | Construct | Stack]) -> Stack:
296299
297300 return self
298301
299- def add_parameter (self , parameter : Parameter | list [Parameter ]) -> None :
302+ def add_parameter (
303+ self , parameter : Parameter | list [Parameter ], update_if_exist : bool = False
304+ ) -> None :
300305 """Add parameters to stack template.
301306
302307 :param parameter: parameter to add to the template
308+ :param update_if_exist: update the parameter if already exists, avoiding
309+ the duplicate key exception
303310 """
304311 if not isinstance (parameter , list ):
305312 parameter = [parameter ]
306313
307314 for param in parameter :
308- if param .title in self .template .parameters :
315+ if update_if_exist and param .title in self .template .parameters :
309316 self .template .parameters [param .title ] = param
310317 else :
311318 self .template .add_parameter (param )
0 commit comments