Beispiel #1
0
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)
Beispiel #2
0
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
Beispiel #3
0
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,
    )
Beispiel #4
0
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
Beispiel #5
0
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