pytest localstack test error Вы должны указать регион - PullRequest
1 голос
/ 28 октября 2019

Я провел тест на питоне, который раскручивает контейнер с локальным стеком и обеспечивает ведро S3 и лямбду внутри контейнера с локальным стеком.

Тест выглядит следующим образом:

def my_test(self, setup_terraform_infra):
    s3 = boto3.resource('s3')
    buckets = list(s3.buckets.all())
    assert len(buckets) == 1

    lambda_client = boto3.client('lambda', region_name='us-east-1')
    payload = json.dumps(self.load_file(TEST_INPUT_SUCCESS_MESSAGE))

    list_function_resp = lambda_client.list_functions(
        MasterRegion='us-east-1',
        Marker='',
        MaxItems=123
    )

    assert len(list_function_resp['Functions']) == 1

    response = lambda_client.invoke(
        FunctionName='function',
        InvocationType='RequestResponse',
        Payload=payload,
    )

В вышеуказанном тесте все работает, пока вы не нажмете функцию вызова:

response = lambda_client.invoke(
    FunctionName='function',
    InvocationType='RequestResponse',
    Payload=payload,
)

Это вызывает следующую ошибку:

botocore.exceptions.ClientError: An error occurred (InternalFailure) when calling the Invoke operation (reached max retries: 4): Error executing Lambda function arn:aws:lambda:us-east-1:000000000000:function:function: You must specify a region.
botocore.exceptions.NoRegionError: You must specify a region.

Если я прыгаю на образ докера, созданный тестами, я могу воспроизвести эту ошибку, если я это сделаю:

awslocal lambda invoke --region eu-west-1 --function-name "arn:aws:lambda:us-east-1:000000000000:function:function" --payload "{}" reponse.json

Ошибка:

>>> botocore.exceptions.NoRegionError: You must specify a region.

У меня естьпопытался установить AWS_DEFAULT_REGION и DEFAULT_REGION в образе докера. Но проблема все еще возникает.

У меня кончились идеи

1 Ответ

1 голос
/ 06 ноября 2019

Раньше у меня была точно такая же проблема, сообщение об ошибке, к сожалению, вводит в заблуждение, но моя проблема оказалась из-за использования неправильного InvocationType для лямбды.

После установки правильного InvocationType (в моем случае это должно было быть установлено Event, а не RequestResponse), оно работало правильно.

Надеюсь, это также решит вашу проблему.

...