Rollback the lambda function code 'versions_back' number of revisions. Returns the Function ARN.
(self, function_name, versions_back=1, publish=True)
| 1473 | return self.lambda_client.invoke(**invoke_kwargs) |
| 1474 | |
| 1475 | def rollback_lambda_function_version(self, function_name, versions_back=1, publish=True): |
| 1476 | """ |
| 1477 | Rollback the lambda function code 'versions_back' number of revisions. |
| 1478 | Returns the Function ARN. |
| 1479 | """ |
| 1480 | response = self.lambda_client.list_versions_by_function(FunctionName=function_name) |
| 1481 | |
| 1482 | # https://github.com/Miserlou/Zappa/pull/2192 |
| 1483 | if ( |
| 1484 | len(response.get("Versions", [])) > 1 |
| 1485 | and "PackageType" in response["Versions"][-1] |
| 1486 | and response["Versions"][-1]["PackageType"] == "Image" |
| 1487 | ): |
| 1488 | raise NotImplementedError("Zappa's rollback functionality is not available for Docker based deployments") |
| 1489 | |
| 1490 | # Take into account $LATEST |
| 1491 | if len(response["Versions"]) < versions_back + 1: |
| 1492 | logger.warning(f"We do not have {versions_back} revisions. Aborting") |
| 1493 | return False |
| 1494 | |
| 1495 | revisions = [int(revision["Version"]) for revision in response["Versions"] if revision["Version"] != "$LATEST"] |
| 1496 | revisions.sort(reverse=True) |
| 1497 | |
| 1498 | response = self.lambda_client.get_function( |
| 1499 | FunctionName="function:{}:{}".format(function_name, revisions[versions_back]) |
| 1500 | ) |
| 1501 | response = requests.get(response["Code"]["Location"]) |
| 1502 | |
| 1503 | if response.status_code != 200: |
| 1504 | logger.error(f"Failed to get version {versions_back} of {function_name} code") |
| 1505 | return False |
| 1506 | |
| 1507 | response = self.lambda_client.update_function_code( |
| 1508 | FunctionName=function_name, ZipFile=response.content, Publish=publish |
| 1509 | ) # pragma: no cover |
| 1510 | |
| 1511 | return response["FunctionArn"] |
| 1512 | |
| 1513 | def wait_until_lambda_function_is_active(self, function_name): |
| 1514 | """ |
no outgoing calls