6

Tak jak w tytule. Próbuję zintegrować metodę API Gateway z SQS z wykorzystaniem chmury. To, czego mi brakuje, to poprawny URI dla SQS. Jeśli któryś z was już to zrobił, jak powinien wyglądać URI?Jak zintegrować bramkę API z SQS

wymyśliłem coś takiego, ale nie mam pojęcia gdzie umieścić SQS ARN

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

Oto pełna konfiguracja dla metody:

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" 

I tu jest przykładem Uri jeśli zintegrować z funkcją lambda:

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

Odpowiedz

9

Aby odpowiedzieć na moje własne pytanie. Oto w jaki sposób można zintegrować SQS jako usługa proxy API bramy:

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" 

mam w końcu znaleźć wszystkie odpowiedzi na moje pytania w różnych dokumentacji. RTFM, jak sądzę.

EDIT:

i tutaj kod dla 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

Dzięki za tym przykładzie, jego najbliższa rzecz do tego, co chcę zrobić, że można znaleźć w Internecie. Mam pytanie, jak wygląda RestApiRole? W moim szablonie tworzenia chmury tworzę kolejkę sqs do użycia. Czy istnieje sposób, w jaki mogę utworzyć rolę w szablonie, aby miał on dostęp do tego zasobu? – fantapop

+0

@fantapop Edytowałem swoją odpowiedź z RestApiRole. Jest w tym samym szablonie co bramka API i sqs. – greg

+0

wielkie dzięki. Udało mi się to sprawić. – fantapop