6

Как и в заголовке. Я пытаюсь интегрировать метод API Gateway с SQS с использованием формирования облаков. То, что мне не хватает, это правильный URI для SQS. Если кто-то из вас уже сделал это, как должен выглядеть URI?Как интегрировать API-шлюз с SQS

я придумал что-то вроде этого, но понятия не имею, где поставить SQS ARN

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

Вот полная конфигурация метода:

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" 

А вот пример URI, если вы интегрируетесь с лямбда-функцией:

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

ответ

9

Ответьте на мой вопрос. Вот как вы интегрировать SQS как прокси-сервер службы в API шлюза:

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" 

Я, наконец, нашел все ответы на свои вопросы в различной документации. Я думаю, RTFM.

EDIT:

и вот код для 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

Спасибо для этого примера, его самое близкое к тому, что я хочу сделать, что я могу найти в Интернете. Один вопрос, который у меня есть, это то, что выглядит RestApiRole? В моем шаблоне формирования облаков я создаю очередь sqs для использования. Есть ли способ создать роль в шаблоне, чтобы он имел доступ к этому ресурсу? – fantapop

+0

@fantapop Я отредактировал свой ответ с RestApiRole. Он находится в том же шаблоне, что и api gateway и sqs. – greg

+0

большое спасибо. Я смог добиться этого. – fantapop

 Смежные вопросы

  • Нет связанных вопросов^_^