0

Я пытаюсь создать шаблон, чтобы при вызове api/divide/inputvalue, api отправляет ответ от DynamoDB, который соответствует отображению inputvalue.ApiGateway CloudFormation без lambda

Его довольно прямой вперед, так как я получаю значение непосредственно из db без какой-либо бизнес-логики, поэтому мне не нужна никакая лямбда. Но все примеры, что я google или все учебники они используют lambdas, и теперь я потерял, что как я могу заставить его работать без лямбда

Это то, что у меня есть до сих пор. В этом шаблоне есть ошибка, так как я не предоставил Uri в ApiGateway::Method. Это то, что я сейчас застрял.

{ 

    "AWSTemplateFormatVersion": "2010-09-09", 
    "Resources": { 
    "Deployment": { 
     "Type": "AWS::ApiGateway::Deployment", 
     "Properties": { 
     "RestApiId": { "Ref": "restApiName" }, 
     "Description": "First Deployment", 
     "StageName": "StagingStage" 
     }, 
     "DependsOn" : ["restApiMethod"] 
    }, 
    "restApiMethod": { 
     "Type": "AWS::ApiGateway::Method", 
     "Properties": { 
     "AuthorizationType": "NONE", 
     "HttpMethod": "GET", 
     "ResourceId": {"Ref": "apiRestResource"}, 
     "RestApiId": {"Ref": "restApiName"}, 
     "Integration": { 
      "Type": "AWS", 
      "IntegrationHttpMethod": "GET", 
      "IntegrationResponses": [{"StatusCode": 200}], 
      "Uri": { "Fn::Sub":"arn.aws.apigateway:${AWS::Region}:dynamodb:action/${restApiName.Arn}"} 
     }, 
     "MethodResponses": [{"StatusCode": 200}] 
     }, 
     "DependsOn": ["apiRestResource"] 
    }, 
    "apiRestResource": { 
     "Type": "AWS::ApiGateway::Resource", 
     "Properties": { 
     "RestApiId": {"Ref": "restApiName"}, 
     "ParentId": { 
      "Fn::GetAtt": ["restApiName","RootResourceId"] 
     }, 
     "PathPart": "divide" 
     }, 
     "DependsOn": ["restApiName"] 
    }, 
    "restApiName": { 
     "Type": "AWS::ApiGateway::RestApi", 
     "Properties": { 
     "Name": "CalculationApi" 
     } 
    } 
} 
} 

ответ

1

Согласно документации, то Uri свойство имеет следующую структуру для AWS сервис-прокси типов интеграции:

Если указать AWS для Type имущества, указать услугу AWS, следующий вид : arn:aws:apigateway:region:subdomain.service|service:path|action/service_api. Например, URI лямбда-функции следует за формой: arn:aws:apigateway:region:lambda:path/path. Путь обычно находится в форме /2015-03-31/functions/LambdaFunctionARN/invocations. Для получения дополнительной информации см. Свойство uri ресурса Integration в Справочнике API REST API Амазонки API.

uri API-справочник свойство Шлюз содержит более подробную информацию:

Для АМС интеграции, то URI должен иметь форму arn:aws:apigateway:{region}:{subdomain.service|service}:{path|action}/{service_api}. Region, subdomain и service используются для определения правильной конечной точки. Для служб AWS, которые используют параметр строки запроса Action=, service_api должно быть действительным действием для требуемой службы. Для API-интерфейсов RESTful AWS path используется для указания того, что оставшуюся подстроку в URI следует рассматривать как путь к ресурсу, включая начальный /.

Для обслуживания прокси AWS к dynamodb службе вызывающей QueryAction, то Uri должно быть что-то вроде этого (с помощью YAML короткой формы Fn::Sub для вставки Ref для текущего AWS области):

!Sub "arn:aws:apigateway:${AWS::Region}:dynamodb:action/Query" 

Что касается вашего более широкого использования с использованием API Gateway для доступа к DynamoDB без использования функций Lambda, обратитесь к сообщению об учебном блоге Andrew Baird, "Using Amazon API Gateway as a Proxy for DynamoDB", и переведите указанные шаги Management Console в соответствующий шаблон CloudFormation res ources.

+0

Спасибо. Это было полезно. Я уже смотрел URL-адрес службы, когда увидел ваш ответ. Я обновил * шаблон *. Теперь часть, за которой я застрял, - это получить параметр path в моем случае 'inputvalue' из url' api/divide/inputvalue' и использовать этот запрос dynamodb. Я смотрел пример http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-method.html#d0e33813, чтобы посмотреть, как я могу это сделать, но полученный в результате шаблон дал мне ошибку, атрибут ресурсаApiName.Arn' недействителен. –

+0

Вы должны уметь определять «RequestParameters» в restApiMethod и ссылаться на это в шаблоне запроса интеграции. – Balaji