0

Ich versuche, eine Vorlage zu erstellen, so dass, wenn ich api/divide/inputvalue aufrufen, sendet die API Antwort von DynamoDB, die inputvalue Zuordnung entspricht.ApiGateway CloudFormation ohne Lambda

Es ist ziemlich direkt, da ich Wert direkt von db ohne irgendeine Geschäftslogik abhole, folglich brauche ich kein Lambda. Aber alle Beispiele, die ich google oder alle Tutorials verwenden sie lambdas und ich bin jetzt verloren, wie kann ich es ohne Lambda arbeiten

Das ist, was ich bisher habe. Es gibt einen Bug in dieser Vorlage, da ich Uri in ApiGateway::Method nicht zur Verfügung gestellt habe. Woran ich gerade festhalte.

{ 

    "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" 
     } 
    } 
} 
} 

Antwort

1

Gemäß der Dokumentation, die Uri Eigenschaft ist wie für AWS Service-Proxy-Integration Typen folgt:

Wenn Sie AWS für die Type Eigenschaft angeben, einen AWS-Service an, die die Form folgt : arn:aws:apigateway:region:subdomain.service|service:path|action/service_api. Ein Lambda-Funktions-URI folgt beispielsweise dem folgenden Formular: arn:aws:apigateway:region:lambda:path/path. Der Pfad hat normalerweise die Form /2015-03-31/functions/LambdaFunctionARN/invocations. Weitere Informationen finden Sie in der Eigenschaft uri der Ressource Integration in der Amazon API Gateway-REST-API-Referenz.

Die uri API-Gateway-Eigenschaft Referenz liefert weitere Details:

Für AWS Integrationen sollte die URI arn:aws:apigateway:{region}:{subdomain.service|service}:{path|action}/{service_api} der Form sein. Region, subdomain und service werden verwendet, um den richtigen Endpunkt zu bestimmen. Für AWS-Dienste, die den Abfragezeichenfolgenparameter Action= verwenden, sollte service_api eine gültige Aktion für den gewünschten Dienst sein. Für RESTful-AWS-Service-APIs wird path verwendet, um anzugeben, dass der verbleibende Teilstring im URI als Pfad zur Ressource behandelt werden soll, einschließlich des ursprünglichen /.

Für einen AWS-Service-Proxy auf den dynamodb Dienst die QueryAction Aufruf sollte die Uri so etwas wie diese (unter Verwendung der YAML Kurzform von Fn::Sub ein Ref für die aktuelle AWS-Region einfügen):

Für Ihren breiteren Anwendungsfall der Verwendung des API-Gateways für den Zugriff auf DynamoDB ohne Verwendung von Lambda-Funktionen finden Sie in Andrew Bairds Tutorial-Blogbeitrag "Using Amazon API Gateway as a Proxy for DynamoDB" die angegebenen Management Console-Schritte in entsprechende CloudFormation-Vorlagen Ouren.

+0

Danke. Das war hilfreich. Ich habe mir bereits die Service-URL angesehen, als ich deine Antwort gesehen habe. Ich habe die * Vorlage * aktualisiert. Nun ist der Teil, bei dem ich feststecke, den path-Parameter in meinem Fall 'inputvalue' von der URL' api/divide/inputvalue' zu ​​erhalten und die Dynamodb-Abfrage zu verwenden. Ich schaute auf http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apgateway-method.html#d0e33813 Beispiel, um zu sehen, wie kann ich das tun, aber die resultierende Vorlage gab mir Fehler, dass ' Das Ressourcenattribut restApiName.Arn' ist ungültig. –

+0

Sie sollten "requestParameters" in restApiMethod definieren können und in der Integrationsanforderungsvorlage darauf Bezug nehmen. – Balaji

Verwandte Themen