Я пытаюсь подготовить Lambda и API Gateway с помощью шаблона CloudFormation и пытаюсь вызвать Lambda в одном из методов, но получаю такую проблему, как функция arn, недействительна. Пожалуйста, примите решение по этому поводу
{
"AWSTemplateFormatVersion":"2010-09-09",
"Transform":"AWS::Serverless-2016-10-31",
"Description":"Testing.",
"Parameters":{
},
"Conditions":{
},
"Resources":{
"AspNetCoreFunction":{
"Type":"AWS::Serverless::Function",
"Properties":{
"Handler":"<Handler_details>",
"Runtime":"dotnetcore3.1",
"CodeUri":"",
"MemorySize":256,
"Timeout":30,
"Role":"$Function_Role",
"Policies":null,
}
},
"gateway":{
"Type":"AWS::ApiGateway::RestApi",
"Properties":{
"Name":"Test",
"Description":"Testing",
"ApiKeySourceType":"HEADER",
"EndpointConfiguration":{
"Types":[
"REGIONAL"
]
}
}
},
"ApiMethod":{
"Type":"AWS::ApiGateway::Method",
"Properties":{
"RestApiId":{
"Ref":"gateway"
},
"HttpMethod":"ANY",
"AuthorizationType":"NONE",
"Integration":{
"IntegrationHttpMethod":"POST",
"TimeoutInMillis":29000,
"Type":"AWS_PROXY",
"Uri":{
"Fn::Sub":[
"arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${lambdaArn}/invocations",
{
"lambdaArn":{
"Fn::GetAtt":[
"AspNetCoreFunction",
"Arn"
]
}
}
]
}
}
}
}
}
Я попытался использовать нижеуказанный uri от имени выше uri, который упоминается в приведенном выше коде, но все еще имеет ту же проблему.
uri: Fn :: Sub: [arn: aws: apigateway: us-east-1: lambda: path / 2015-03-31 / functions / $ {AspNetCoreFunction.Arn} / invocations]
@Marcin. Спасибо за ваш комментарий. Найдите ОШИБКУ. Недопустимая лямбда-функция (служба: AmazonApiGateway; код состояния: 400; код ошибки: BadRequestException; идентификатор запроса: 9cc5af0e-f6a1-4fe4-bad4-bdb066959928; прокси: null) — person kaka schedule 04.05.2021
В чем именно заключается сообщение об ошибке? — person kaka schedule 04.05.2021
Я думаю, что ошибка не в ARN, а в том, что у шлюза API нет разрешений на вызов вашей функции. Вам нужно добавить что-то вроде следующего:
@ Спасибо Marcin, но он ожидает получить имя arn, когда я использовал вызов, а не только лямбда-функцию. Найдите код, который я использовал в соответствии с вашим предложением. AllowApiInvokations: {Тип: AWS :: Lambda :: Permission, Свойства: {Действие: lambda: InvokeFunction, FunctionName: AspNetCoreFunction.Arn, Принципал: apigateway.amazonaws.com}}, — person kaka; 04.05.2021
ОШИБКА: обнаружена 1 ошибка проверки: значение ‘AspNetCoreFunction.Arn’ в ‘functionName’ не удовлетворяет ограничению: элемент должен удовлетворять шаблону регулярного выражения: (arn: (aws [a-zA-Z -] *) ?: лямбда :)? ([az] {2} ((- gov) | (-iso (b?)))? — [az] + — \ d {1}:)? (\ d {12}:)? (функция ? ([a-zA-Z0-9- ] +) (: (\ $ LATEST | [a-zA-Z0-9-] +))? (Сервис: AWSLambda; Код состояния: 400; Код ошибки: ValidationException; Идентификатор запроса: 02eb03d7-d249-4d40-bea2-4c75c7720557; Прокси-сервер: null) — person kaka; 04.05.2021
@kaka Вы должны использовать
Fn::GetAtt
, чтобы получить arn, как в исходном шаблоне. — person kaka; 05.05.2021@kaka Как все прошло? Все еще не работает? — person kaka; 06.05.2021
AllowApiInvokations: Тип: AWS :: Lambda :: Permission Свойства: Действие: lambda: InvokeFunction Имя функции: Fn :: GetAtt: AspNetCoreFunction.Arn Участник: apigateway.amazonaws.com — person kaka; 06.05.2021
Найдите приведенный выше код, который я использовал в исходном шаблоне, но по-прежнему имеет ту же проблему. — person kaka; 06.05.2021