簡體   English   中英

AWS ApiGateway集成S3、SQS、SNS、DynamoDB等服務,如何構建AWS CloudFormation集成URI?

[英]How to construct AWS CloudFormation integration URI for AWS ApiGateway integration with S3, SQS, SNS, DynamoDB and other services?

是否有一些地方有關於如何通過 ApiGateway 集成進行一系列操作的示例? 查看如何將 object 上傳到 S3,將項目推送到 SQS 和 SNS 隊列,進行 DynamoDB 調用和許多其他事情,試圖找到有關如何構建這些路徑的文檔。

我正在使用 CloudFormation 模板,它使用集成 URI 來設置此 AWS ApiGateway 與 AWS 服務的集成。

找不到說明如何為各種服務創建這些 URI 路徑的文檔。

在此處輸入圖像描述 在此處輸入圖像描述

當使用另一個 AWS 服務操作設置集成請求時,集成請求 URI 也是一個 ARN。

例如,對於與 Amazon S3 的 GetBucket 操作的集成,集成請求 URI 是以下格式的 ARN:

arn:aws:apigateway:api-region:s3:路徑

查看更多: https://docs.aws.amazon.com/apigateway/latest/developerguide/integration-request-basic-setup.html

Dynamodb:比 S3 復雜一點: https://aws.amazon.com/blogs/compute/using-amazon-api-gateway-as-a-proxy-for-dynamodb/

SNS: https://aws.amazon.com/premiumsupport/knowledge-center/api-gateway-proxy-integrate-service/

對於 SQS,我找到了 cloudformation 設置:

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"

這里是 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"

來自 Uri 屬性文檔

如果您為 Type 屬性指定 AWS,請指定遵循以下形式的 AWS 服務:arn:aws:apigateway:region:subdomain.service|service:path|action/service_api。 例如,Lambda function URI 遵循以下形式:arn:aws:apigateway:region:lambda:path/path。 該路徑通常采用 /2015-03-31/functions/LambdaFunctionARN/invocations 的形式。 有關更多信息,請參閱 Amazon API 網關 REST API 參考中集成資源的 uri 屬性。

來自另一個 AWS 文檔的更多描述和示例:

在此處輸入圖像描述

從這些文檔示例和描述中,似乎有 2 種類型的 API——基於操作和基於路徑。

使用基於動作的 API

我認為大多數人(如果不是全部)都支持這一點。 雖然這些操作在 IAM 設置和所有 API 文檔中可用,但所有 AWS 服務都是web服務,也就是它們具有 API 接口,並且這些接口使用操作。 如果某些服務有誤,請糾正我,但我認為通過遵循此結構應該可以對與 API 網關服務集成的任何服務進行任何調用。

有時需要使用路徑 API

試圖使用 PutObject 將文件上傳到 S3,但出現錯誤:

<?xml version="1.0" encoding="UTF-8"?>
<Error>
    <Code>MethodNotAllowed</Code>
    <Message>The specified method is not allowed against this resource.</Message>
    <Method>PUT</Method>
    <ResourceType>SERVICE</ResourceType>
    <RequestId>....</RequestId>
    <HostId>....=</HostId>
</Error>

替換為路徑 API 格式,它成功了。 所以這里的學習是我將繼續首先嘗試使用操作 API,如果不能針對該特定操作 - 切換到路徑 API,而我覺得操作 API 更具聲明性。

示例結構操作 API:

arn:aws:apigateway:us-east-1:SERVICE_NAME:action/ACTION_NAME&Var1=Value1&Var2=Value2

對 S3 服務的示例調用。 操作名稱 - GetObject 此 API 操作的文檔說有 2 個必需屬性 - Bucket(存儲桶名稱)和 Key。 如此完整的示例 URI:

arn:aws:apigateway:us-east-1:s3:action/GetObject&Bucket=myDemoBucket1&Key=some/path/to/file

與路徑 API 相同:

arn:aws:apigateway:us-east-1:s3:path/myDemoBucket1/some/path/to/file

我找到了一種獲取樣本的方法。 使用控制台 UI,制作端點,部署到某個階段和 go 到階段,select 導出選項卡,並導出為 Yaml 格式的 Swagger + API 網關擴展。 當我將 Yaml 與 cloudformation 一起使用時。 在那個 Yaml 里面有你需要的一切。 如果沒有“Stages”,go 到“Resources”,然后從下拉列表 select 在對話框中部署和創建 Stage。

在此處輸入圖像描述


以下是我能夠為主要服務找到的一些不同示例:

調用 Lambda 文檔

arn:aws:apigateway:api-region:lambda:path//2015-03-31/functions/ arn:aws:lambda:lambda-region:account-id:function:lambda-function-name /invocations

在此處輸入圖像描述 路徑部分似乎是API 文檔中的 map 到 API 操作: 在此處輸入圖像描述

DynamoDB 博客文章

您需要使用 API Action 文檔 + Api Action名稱 + IntegrationRequest 模板的 HTTP 方法來調用 DynamoDB。

查詢操作的示例 URI:

arn:aws:apigateway:us-east-1:dynamodb:action/Query

社交網絡博客文章

示例 URI: arn:aws:apigateway:region:sns:action/Publish With region: arn:aws:apigateway:us-east-1:sns:action/Publish

需要通過URL Query String參數傳入TopicArn和Message等參數。 關於這個主題有很好的話題: https://stackoverflow.com/a/64268791/1737158

在此處輸入圖像描述 https://docs.aws.amazon.com/sns/latest/api/API_Publish.html#API_Publish_Examples

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM