def connect_api_gateway_to_sqs(gateway_name, stage_name, queue_arn, path, region_name=None): resources = {} template = APIGATEWAY_SQS_DATA_INBOUND_TEMPLATE resource_path = path.replace('/', '') region_name = region_name or aws_stack.get_region() queue_name = aws_stack.sqs_queue_name(queue_arn) sqs_region = aws_stack.extract_region_from_arn(queue_arn) or region_name resources[resource_path] = [{ 'httpMethod': 'POST', 'authorizationType': 'NONE', 'integrations': [{ 'type': 'AWS', 'uri': 'arn:aws:apigateway:%s:sqs:path/%s/%s' % (sqs_region, TEST_AWS_ACCOUNT_ID, queue_name), 'requestTemplates': { 'application/json': template }, }] }] return aws_stack.create_api_gateway(name=gateway_name, resources=resources, stage_name=stage_name, region_name=region_name)
def add_api_destination_authorization(destination, headers, event): connection_arn = destination.get("ConnectionArn", "") connection_name = re.search(r"connection\/([a-zA-Z0-9-_]+)\/", connection_arn).group(1) connection_region = extract_region_from_arn(connection_arn) # Using backend directly due to boto hiding passwords, keys and secret values event_backend = moto_events_backends.get(connection_region) connection = event_backend.describe_connection(name=connection_name) headers.update(auth_keys_from_connection(connection)) auth_parameters = connection.get("AuthParameters", {}) invocation_parameters = auth_parameters.get("InvocationHttpParameters") endpoint = destination.get("InvocationEndpoint") if invocation_parameters: header_parameters = list_of_parameters_to_object( invocation_parameters.get("HeaderParameters", [])) headers.update(header_parameters) body_parameters = list_of_parameters_to_object( invocation_parameters.get("BodyParameters", [])) event.update(body_parameters) query_parameters = invocation_parameters.get("QueryStringParameters", []) query_object = list_of_parameters_to_object(query_parameters) endpoint = add_query_params_to_url(endpoint, query_object) return endpoint
def connect_api_gateway_to_sqs(gateway_name, stage_name, queue_arn, path, region_name=None): resources = {} template = APIGATEWAY_SQS_DATA_INBOUND_TEMPLATE resource_path = path.replace("/", "") region_name = region_name or aws_stack.get_region() queue_name = aws_stack.sqs_queue_name(queue_arn) sqs_region = aws_stack.extract_region_from_arn(queue_arn) or region_name resources[resource_path] = [{ "httpMethod": "POST", "authorizationType": "NONE", "integrations": [{ "type": "AWS", "uri": "arn:aws:apigateway:%s:sqs:path/%s/%s" % (sqs_region, TEST_AWS_ACCOUNT_ID, queue_name), "requestTemplates": { "application/json": template }, }], }] return aws_stack.create_api_gateway( name=gateway_name, resources=resources, stage_name=stage_name, region_name=region_name, )
def get_function(fn, self, *args, **kwargs): result = fn(self, *args, **kwargs) if result: return result client = aws_stack.connect_to_service("lambda") lambda_name = aws_stack.lambda_function_name(args[0]) response = client.get_function(FunctionName=lambda_name) spec = response["Configuration"] spec["Code"] = {"ZipFile": "ZW1wdHkgc3RyaW5n"} region = aws_stack.extract_region_from_arn(spec["FunctionArn"]) new_function = moto_awslambda_models.LambdaFunction(spec, region) return new_function
def get_cloudwatch_client_for_region_of_alarm( alarm_arn: str) -> "CloudWatchClient": region = aws_stack.extract_region_from_arn(alarm_arn) return aws_stack.connect_to_service("cloudwatch", region_name=region)
def test_extract_region_from_arn(self): assert (extract_region_from_arn( "arn:aws:lambda:aws-region:acct-id:function:helloworld:42") == "aws-region") assert extract_region_from_arn("foo:bar") is None assert extract_region_from_arn("") is None