6

Genau wie im Titel. Ich versuche, API-Gateway-Methode mit einer SQS unter Verwendung der Wolkenbildung zu integrieren. Was ich vermisse ist die korrekte URI für die SQS. Wenn einer von euch das schon gemacht hat, wie sollte der URI aussehen?So integrieren Sie API Gateway mit SQS

kam ich mit so etwas, aber haben keine Ahnung, wo das SQS-ARN

"arn:aws:apigateway:${AWS::Region}:sqs:action/SendMessage" 

Hier setzen die vollständige Konfiguration für die Methode:

PostMethod: 
    Type: "AWS::ApiGateway::Method" 
    Properties: 
     ApiKeyRequired: "true" 
     HttpMethod: "POST" 
     ResourceId: !Ref "SomeResource" 
     RestApiId: !Ref "SomeRestApi" 
     Integration: 
     IntegrationHttpMethod: "POST" 
     IntegrationResponses: 
     - StatusCode: 200 
     Type: "AWS" 
     Uri: "arn:aws:apigateway:${AWS::Region}:sqs:action/SendMessage" 

Und hier ist ein Beispiel von URI, wenn Sie mit einer Lambda-Funktion integrieren:

arn:aws:apigateway:us-west-2:lambda:path//2015-03-31/functions/arn:aws:lambda:us-west-2:123412341234:function:function_name/invocations 
- 

Antwort

9

Um meine eigene Frage zu beantworten. Hier ist, wie Sie SQS als Service Proxy in API-Gateway integrieren:

PostMethod: 
    Type: "AWS::ApiGateway::Method" 
    Properties: 
     AuthorizationType: "NONE" 
     ApiKeyRequired: "true" 
     HttpMethod: "POST" 
     ResourceId: !Ref "SomeResource" 
     RestApiId: !Ref "RestApi" 
     MethodResponses: 
     - StatusCode: 200 
     Integration: 
     Credentials: !GetAtt "RestApiRole.Arn" 
     IntegrationHttpMethod: "POST" 
     IntegrationResponses: 
     - StatusCode: 200 
     Type: "AWS" 
     Uri: !Sub "arn:aws:apigateway:${AWS::Region}:sqs:action/SendMessage" 
     RequestParameters: 
      integration.request.querystring.QueueUrl: !Sub "'${SomeQueue}'" 
      integration.request.querystring.MessageBody: "method.request.body" 

Ich habe endlich alle Antworten auf meine Fragen in verschiedener Dokumentation. RTFM, denke ich.

EDIT:

und hier ist der Code für RestApiRole:

RestApiRole: 
    Type: "AWS::IAM::Role" 
    Properties: 
     AssumeRolePolicyDocument: 
     Version: "2012-10-17" 
     Statement: 
     - Action: 
      - "sts:AssumeRole" 
      Principal: 
      Service: 
      - "apigateway.amazonaws.com" 
      Effect: "Allow" 
     Policies: 
     - PolicyName: "InvokeLambda" 
     PolicyDocument: 
      Version: "2012-10-17" 
      Statement: 
      - Action: 
      - "lambda:InvokeFunction" 
      Resource: !GetAtt "LambdaFunction.Arn" 
      Effect: "Allow" 
+0

Dank für dieses Beispiel sein die nächste Sache, was ich tun möchte, dass ich online finden können. Eine Frage, die ich hier habe, ist wie RestApiRole aussieht? In meiner Cloud-Formationsvorlage erstelle ich die zu verwendende sqs-Warteschlange. Gibt es eine Möglichkeit, die Rolle in der Vorlage so zu erstellen, dass sie auf diese Ressource zugreifen kann? – fantapop

+0

@fantapop Ich habe meine Antwort mit RestApiRole bearbeitet. Es ist in der gleichen Vorlage wie API Gateway und sqs. – greg

+0

vielen dank. Ich konnte das zum Laufen bringen. – fantapop

Verwandte Themen