Blog

AWS API Gateway Service-Integrationen

Dennis Vriend

Aktualisiert Oktober 21, 2025
5 Minuten

AWS API Gateway ist ein cloudbasierter API-Service, der einen Integrationspunkt für AWS-Services oder Services von Drittanbietern darstellt. Der Service ist sehr einfach zu nutzen. Definieren Sie zunächst eine OpenAPI-Spezifikation, definieren Sie dann Integrationen für die OpenAPI-Spezifikation und stellen Sie die Spezifikation mit CloudFormation bereit. API Gateway unterstützt fünf Arten von Integrationen:

  • mock: für die Integration mit API Gateway, ohne ein Backend aufzurufen
  • aws: für die Integration mit AWS-Diensten, wobei Transformationen möglich sind
  • aws_proxy: für die Integration mit AWS Lambda
  • http: für die Integration mit HTTP-Backends, wobei Transformationen möglich sind
  • http_proxy: für die Integration mit HTTP-Backends Wir werden uns heute alle Integrationstypen ansehen

aws-cfn-update

"AWS API Gateway macht es Entwicklern leicht, sichere APIs in beliebigem Umfang zu erstellen, zu veröffentlichen, zu pflegen und zu überwachen", so in der offiziellen Dokumentation. Obwohl das stimmt, ist es alles andere als trivial,eine API mit CloudFormation-Vorlagen zu erstellen. Die CloudFormation-Vorlage enthält sowohl eine OpenAPI-Spezifikation, AWS-Erweiterungen zur OpenAPI-Spezifikation als auch die zu erstellende AWS-Infrastrukturspezifikation. Um die Entwicklung von APIs zu vereinfachen, hat binx.io ein Tool namens aws-cfn-update entwickelt. Das Dienstprogramm aktualisiert CloudFormation-Vorlagen und führt die OpenAPI-Spezifikation mit den AWS-Erweiterungen zusammen und fügt dann das Ergebnis in die CloudFormation-Vorlagen ein. Das Dienstprogramm unterstützt auch das Zusammenführen von Lambda-Code in CloudFormation, wenn der Code4000 Zeichen nicht überschreitet und die Sprache entweder Python oder Node.js ist. Das Dienstprogramm ermöglicht es, Projekte zu erstellen, die Spezifikationen trennen und wartbare API-Projekte ermöglichen.

Beispiel Projekt

Das Beispielprojekt zeigt ein Projekt, das aus einer Reihe von Projekten besteht, die zeigen, wie man die einzelnen Integrationstypen erstellt und verwendet.

OpenAPI-Spezifikation

API Gateway unterstützt sowohl OpenAPI v2.0 alias 'swagger', und OpenAPI v3.0. Die OpenAPI-Spezifikation macht eseinfach, Ressourcen, Methoden und Antworten für die API zu definieren. Projekt 01-swagger zeigt ein Beispielprojekt, das nur die API-Gateway-Methodenanfragen erstellt. In diesem Projekt sind keine Integrationen konfiguriert. Die OpenAPI-Spezifikation ist im Verzeichnis swagger/swagger.yaml verfügbar. Typ:

  • make merge-swagger: um die OpenAPI-Spezifikation mit CloudFormation zusammenzuführen
  • make deploy: um das Projekt zu verteilen
  • make delete: um das Projekt zu löschen

Mock-Integration

Das Projekt 02-mock-integration zeigt , wie man 'Mock'-Integrationen einrichtet. Mock-Integrationen generieren API-Antworten direkt von API Gateway, ohne dass ein Integrations-Backend erforderlich ist. Mock-Integrationen eignen sich hervorragend zur Generierung statischer Antworten wie CORS-Antworten für eine POST-Anfrage. Die AWS-Erweiterungen zur OpenAPI-Spezifikation befinden sich im Verzeichnis swagger/aws-extensions.yaml. Ein Beispiel für eine Mock-Integration:

  x-amazon-apigateway-integration:
    responses:
      default:
        statusCode: '200'
        responseParameters:
          method.response.header.Content-Type: "'application/json'"
          method.response.header.Access-Control-Allow-Headers : "'Content-Type,X-Amz-Date,Authorization,X-Api-Key'"
          method.response.header.Access-Control-Allow-Methods : "'*'"
          method.response.header.Access-Control-Allow-Origin : "'*'"
        responseTemplates:
          application/json: |-
            [{
              "id": 1,
              "name": "Superman"
             },
             {
               "id": 2,
               "name": "Batman"
             }]
    passthroughBehavior: when_no_match
    requestTemplates:
      application/json: |-
        {
          "statusCode": 200
        }
    type: mock

Der Mock antwortet mit einem HTTP-'200' und einer Liste von Helden im JSON-Format.

HTTP-Integration

Projekt 03-http-integration zeigt , wie man 'http'-Integrationen einrichtet. HTTP-Integrationen sind nützlich, wenn eine API-Methode mit einem HTTP-Endpunkt integriert werden muss, wie z.B. ein Dienstim Internet oder ein HTTP-Dienst in der VPC. Ein Beispiel für eine HTTP-Integration:

  x-amazon-apigateway-integration:
    responses:
      default:
        statusCode: '200'
        responseParameters:
          method.response.header.Content-Type: "'application/json'"
          method.response.header.Access-Control-Allow-Headers : "'Content-Type,X-Amz-Date,Authorization,X-Api-Key'"
          method.response.header.Access-Control-Allow-Methods : "'*'"
          method.response.header.Access-Control-Allow-Origin : "'*'"
    passthroughBehavior: when_no_match
    uri: 'https://httpbin.org/anything'
    httpMethod: GET
    type: http_proxy

Die http-Integration ruft httpbin.org mit einem 'GET' auf und antwortet mit einem HTTP '200'. Der Integrationstyp kann entweder 'http_proxy' oder 'http' sein.

AWS Proxy (Lambda) Integration

Projekt 04-lambda-integration zeigt , wie Sie 'aws_proxy'-Integrationen einrichten. Die Erstellung eines Lambdas ist etwas komplizierter. Wenn Sie Python verwenden, kann das Lambda in der CloudFormationVorlage eingefügt werden, wenn der Code weniger als 4kB groß ist. Um gute Programmierpraktiken zu unterstützen, sollte der Code testbar sein und von der CloudFormation-Vorlage getrennt werden. Das Dienstprogramm aws-cfn-update kann den Lambda-Code mit der CloudFormation-Vorlage zusammenführen, wenn der Stack bereitgestellt werden soll. Für die Lambda-Integration muss API Gateway eine Rolle haben, um das Lambda aufzurufen:

  APIGatewayInvokeLambdaRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Statement:
        - Effect: Allow
          Principal:
            Service: apigateway.amazonaws.com
          Action: sts:AssumeRole
          Condition: {}
      Path: /
      Policies:
      - PolicyName: ApiGateway
        PolicyDocument:
          Statement:
          - Effect: Allow
            Action:
            - lambda:InvokeFunction
            Resource:
            - '*'

Die 'aws_proxy' Integration:

  x-amazon-apigateway-integration:
    responses: {}
    uri: !Sub arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${LambdaHandler.Arn}/invocations
    credentials: !GetAtt APIGatewayInvokeLambdaRole.Arn
    passthroughBehavior: when_no_match
    httpMethod: POST
    type: aws_proxy

Beachten Sie, dass die Integration 'aws_proxy' auf die 'arn' des Lambdas verweist. Die Anmeldeinformationen für API Gateway werden durch die 'APIGatewayInvokeLambdaRole' definiert.

AWS-Service-Integration

Projekt 05-aws-service-integration zeigt , wie Sie die Integration von AWS-Diensten einrichten. API-Gateway kann die API von AWS-Services wie z.B. DynamoDB aufrufen. API Gateway muss über die Rolle verfügen, um DynamoDB aufrufen zu können:

  APIGatewayRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Statement:
        - Effect: Allow
          Principal:
            Service: apigateway.amazonaws.com
          Action: sts:AssumeRole
          Condition: {}
      Path: /
      ManagedPolicyArns:
      - arn:aws:iam::aws:policy/AmazonDynamoDBFullAccess

Die 'aws' Integration:

  x-amazon-apigateway-integration:
    credentials: !GetAtt APIGatewayRole.Arn
    uri: !Sub "arn:aws:apigateway:${AWS::Region}:dynamodb:action/Scan"
    responses:
      default:
        statusCode: "200"
        responseTemplates:
          application/json: |-
            [
            #foreach ($item in $input.path('$.Items'))
            {
                "id": "$item.id.N",
                "name": "$item.name.S"
            }
            #if($foreach.hasNext), #end
            #end
            ]
    requestTemplates:
      application/json: !Sub |
        {
            "TableName": "${HeroesTable}",
            "ScanFilter": {
              "name": {
                "AttributeValueList":[ {"S":"$input.params('name')"} ],
                 "ComparisonOperator": "CONTAINS"
              }
            }
        }
    passthroughBehavior: when_no_templates
    httpMethod: POST
    type: aws

Die 'aws' Service-Integration beschreibt, welche API aufgerufen werden soll, z.B. die DynamoDB 'Scan' API. Das requestTemplate erstellt eine API-Anfrage und verwendet einen Parameter aus der Anfrage. Die DynamoDB 'Scan'-Antwort wird durch das responseTemplate in eine json-Antwort umgewandelt und verwendet die Syntax der Velocity Template Language.

Fazit

AWS Gateway Integrations macht es einfach, Backends mit einer API-Spezifikation zu integrieren. API Gateway kann mit AWS-Services (aws), http-Services (http, http_proxy), Lambda (aws_proxy) integrieren und kann direkt antworten (mock). aws-cfn-update ermöglicht es uns, alle Spezifikationen in Dateien zu trennen und in einer CloudFormation-Vorlage zusammenzuführen, wenn der Stack bereitgestellt wird. Dies ermöglicht wartbare Projekte und wiederverwendbare Skripte.

Verfasst von

Dennis Vriend

Contact

Let’s discuss how we can support your journey.