Skip to content

Commit 7ffbe78

Browse files
authored
fix: bug with lambda function updates (#1)
## Resolves the ResourceConflictException error when updating an existing lambda function ``` Bundling: 'service.py' Bundling: '.envrc' Bundling: 'requirements.txt' Bundling: 'Makefile' Bundling: 'event.json' Bundling: 'README.md' Bundling: 'requirements-dev.txt' Bundling: '.gitignore' Updating your Lambda function Traceback (most recent call last): File "/Users/tonyejack/.virtualenvs/sync_waf_ips-srms/bin/lambda", line 213, in <module> cli() File "/Users/tonyejack/.virtualenvs/sync_waf_ips-srms/lib/python3.11/site-packages/click/core.py", line 716, in __call__ return self.main(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/tonyejack/.virtualenvs/sync_waf_ips-srms/lib/python3.11/site-packages/click/core.py", line 696, in main rv = self.invoke(ctx) ^^^^^^^^^^^^^^^^ File "/Users/tonyejack/.virtualenvs/sync_waf_ips-srms/lib/python3.11/site-packages/click/core.py", line 1060, in invoke return _process_result(sub_ctx.command.invoke(sub_ctx)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/tonyejack/.virtualenvs/sync_waf_ips-srms/lib/python3.11/site-packages/click/core.py", line 889, in invoke return ctx.invoke(self.callback, **ctx.params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/tonyejack/.virtualenvs/sync_waf_ips-srms/lib/python3.11/site-packages/click/core.py", line 534, in invoke return callback(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/tonyejack/.virtualenvs/sync_waf_ips-srms/bin/lambda", line 117, in deploy aws_lambda.deploy( File "/Users/tonyejack/.virtualenvs/sync_waf_ips-srms/lib/python3.11/site-packages/aws_lambda/aws_lambda.py", line 138, in deploy update_function( File "/Users/tonyejack/.virtualenvs/sync_waf_ips-srms/lib/python3.11/site-packages/aws_lambda/aws_lambda.py", line 744, in update_function ret = client.update_function_configuration(**kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/tonyejack/.virtualenvs/sync_waf_ips-srms/lib/python3.11/site-packages/botocore/client.py", line 570, in _api_call return self._make_api_call(operation_name, kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/tonyejack/.virtualenvs/sync_waf_ips-srms/lib/python3.11/site-packages/botocore/context.py", line 124, in wrapper return func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^ File "/Users/tonyejack/.virtualenvs/sync_waf_ips-srms/lib/python3.11/site-packages/botocore/client.py", line 1031, in _make_api_call raise error_class(parsed_response, operation_name) botocore.errorfactory.ResourceConflictException: An error occurred (ResourceConflictException) when calling the UpdateFunctionConfiguration operation: The operation cannot be performed at this time. An update is in progress for resource: arn:aws:lambda:us-east-2:659424869662:function:sync_waf_ips make: *** [deploy] Error 1 ```
1 parent 2f9f17a commit 7ffbe78

File tree

1 file changed

+20
-2
lines changed

1 file changed

+20
-2
lines changed

aws_lambda/aws_lambda.py

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -704,10 +704,14 @@ def update_function(
704704
Publish=True,
705705
)
706706

707-
# Wait for function to be updated
707+
# Wait for function code to be updated
708708
waiter = client.get_waiter('function_updated')
709+
print("Waiting for code update to complete...")
709710
waiter.wait(FunctionName=cfg.get("function_name"))
710711

712+
# Add a short delay to allow propagation
713+
time.sleep(5)
714+
711715
kwargs = {
712716
"FunctionName": cfg.get("function_name"),
713717
"Role": role,
@@ -745,7 +749,21 @@ def update_function(
745749
},
746750
)
747751

748-
ret = client.update_function_configuration(**kwargs)
752+
# Retry configuration update in case of conflicts
753+
retries = 5
754+
for attempt in range(retries):
755+
try:
756+
print("Updating function configuration...")
757+
ret = client.update_function_configuration(**kwargs)
758+
break
759+
except client.exceptions.ResourceConflictException as e:
760+
print(f"Conflict detected. Retrying... ({attempt + 1}/{retries})")
761+
time.sleep(10) # Wait before retrying
762+
else:
763+
raise Exception(f"Failed to update function configuration after {retries} retries.")
764+
765+
# Add a short delay to allow propagation
766+
time.sleep(5)
749767

750768
concurrency = get_concurrency(cfg)
751769
if concurrency > 0:

0 commit comments

Comments
 (0)