MCPcopy Index your code
hub / github.com/zappa/Zappa / undeploy_lambda_alb

Method undeploy_lambda_alb

zappa/core.py:1905–1992  ·  view source on GitHub ↗

The `zappa undeploy` functionality for ALB infrastructure.

(self, lambda_name)

Source from the content-addressed store, hash-verified

1903 logger.info("Note it may take several minutes for load balancer to become available.")
1904
1905 def undeploy_lambda_alb(self, lambda_name):
1906 """
1907 The `zappa undeploy` functionality for ALB infrastructure.
1908 """
1909 logger.info("Undeploying ALB infrastructure...")
1910
1911 # Locate and delete alb/lambda permissions
1912 try:
1913 # https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/lambda.html#Lambda.Client.remove_permission
1914 self.lambda_client.remove_permission(FunctionName=lambda_name, StatementId=lambda_name)
1915 except botocore.exceptions.ClientError as e: # pragma: no cover
1916 if "ResourceNotFoundException" in e.response["Error"]["Code"]:
1917 pass
1918 else:
1919 raise e
1920
1921 # Locate and delete load balancer
1922 try:
1923 # https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/elbv2.html#ElasticLoadBalancingv2.Client.describe_load_balancers # noqa: E501
1924 response = self.elbv2_client.describe_load_balancers(Names=[lambda_name])
1925 if not (response["LoadBalancers"]) or len(response["LoadBalancers"]) > 1:
1926 raise EnvironmentError(
1927 "Failure to locate/delete ALB named [{}]. Response was: {}".format(lambda_name, repr(response))
1928 )
1929 load_balancer_arn = response["LoadBalancers"][0]["LoadBalancerArn"]
1930 # https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/elbv2.html#ElasticLoadBalancingv2.Client.describe_listeners # noqa: E501
1931 response = self.elbv2_client.describe_listeners(LoadBalancerArn=load_balancer_arn)
1932 if not (response["Listeners"]):
1933 logger.warning("No listeners found.")
1934 elif len(response["Listeners"]) > 1:
1935 raise EnvironmentError(
1936 "Failure to locate/delete listener for ALB named [{}]. Response was: {}".format(
1937 lambda_name, repr(response)
1938 )
1939 )
1940 else:
1941 listener_arn = response["Listeners"][0]["ListenerArn"]
1942 # Remove the listener.
1943 # This explicit deletion of the listener seems necessary to avoid ResourceInUseExceptions when deleting target groups. # noqa: E501# noqa: E501
1944 # https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/elbv2.html#ElasticLoadBalancingv2.Client.delete_listener # noqa: E501
1945 response = self.elbv2_client.delete_listener(ListenerArn=listener_arn)
1946 # Remove the load balancer and wait for completion
1947 # https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/elbv2.html#ElasticLoadBalancingv2.Client.delete_load_balancer # noqa: E501
1948 response = self.elbv2_client.delete_load_balancer(LoadBalancerArn=load_balancer_arn)
1949 waiter = self.elbv2_client.get_waiter("load_balancers_deleted")
1950 logger.info(f"Waiting for load balancer [{lambda_name}] to be deleted..")
1951 waiter.wait(LoadBalancerArns=[load_balancer_arn], WaiterConfig={"Delay": 3})
1952 except botocore.exceptions.ClientError as e: # pragma: no cover
1953 logger.exception(e.response["Error"]["Code"])
1954 if "LoadBalancerNotFound" in e.response["Error"]["Code"]:
1955 pass
1956 else:
1957 raise e
1958
1959 # Locate and delete target group
1960 try:
1961 # Locate the lambda ARN
1962 # https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/lambda.html#Lambda.Client.get_function

Callers 2

undeployMethod · 0.80

Calls

no outgoing calls

Tested by 1