Я провел тест на питоне, который раскручивает контейнер с локальным стеком и обеспечивает ведро 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 в образе докера. Но проблема все еще возникает.
У меня кончились идеи