

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 教學課程：使用 AWS 整合建立 REST API
<a name="getting-started-aws-proxy"></a>

 如需了解如何建立 API Gateway API 以公開整合的 Lambda 函數，請參閱[教學：建立具 Lambda 代理整合的 REST API](api-gateway-create-api-as-simple-proxy-for-lambda.md) 和[教學：建立具 Lambda 非代理整合的 REST API](getting-started-lambda-non-proxy-integration.md) 主題。此外，您可以建立 API Gateway API 來公開其他服務 AWS ，例如 Amazon SNS、Amazon S3、Amazon Kinesis 甚至 AWS Lambda。這可透過 `AWS` 整合進行。Lambda 整合或 Lambda 代理整合則屬於特殊案例，這些項目會透過 API Gateway API 來公開叫用 Lambda 函數。

 所有 AWS 服務都支援專用 APIs來公開其功能。不過，應用程式協定或程式設計界面可能會因服務而不同。具有 `AWS`整合的 API Gateway API 可為您的用戶端提供一致的應用程式通訊協定，以存取不同的 AWS 服務。

 在本演練中，我們會建立 API 來公開 Amazon SNS。如需將 API 與其他 AWS 服務整合的更多範例，請參閱 [Amazon API Gateway 教學課程和研討會](api-gateway-tutorials.md)。

 與 Lambda 代理整合不同，其他 AWS 服務沒有對應的代理整合。因此，API 方法與單一 AWS 動作整合。如需更多的彈性，您可以設定 Lambda 代理整合，這種方法與代理整合類似。Lambda 函數接著會剖析和處理其他 AWS 動作的請求。

 如果端點逾時，則 API Gateway 不會重試，API 發起人必須實作重試邏輯來處理端點逾時。

 此演練採用 [教學：建立具 Lambda 非代理整合的 REST API](getting-started-lambda-non-proxy-integration.md) 中的說明與概念為基礎。若您尚未完成該演練，建議先行完成。



**Topics**
+ [先決條件](#getting-started-aws-proxy-prerequisites)
+ [步驟 1：建立 AWS 服務代理執行角色](#getting-started-aws-proxy-add-roles)
+ [步驟 2：建立資源](#getting-started-aws-proxy-add-resources)
+ [步驟 3：建立 GET 方法](#getting-started-aws-proxy-add-methods)
+ [步驟 4：指定方法設定並測試方法](#getting-started-aws-proxy-set-methods)
+ [步驟 5：部署 API](#getting-started-aws-proxy-deploy)
+ [步驟 6：測試 API](#getting-started-aws-proxy-test)
+ [步驟 7：清除](#getting-started-aws-proxy-clean-up)

## 先決條件
<a name="getting-started-aws-proxy-prerequisites"></a>

開始此演練前，請執行下列操作：

1. 完成「[設定為使用 API Gateway](setting-up.md)」中的步驟。

1.  建立名為 `MyDemoAPI` 的新 API。如需詳細資訊，請參閱 [教學：建立具有 HTTP 非代理整合的 REST API](api-gateway-create-api-step-by-step.md)。

1. 至少將 API 部署至名為 `test` 的階段一次。如需詳細資訊，請參閱「[」中的「](getting-started-lambda-non-proxy-integration.md#getting-started-deploy-api)部署 API[選擇 AWS Lambda 整合教學課程](getting-started-with-lambda-integration.md)」。

1. 完成 中的其餘步驟[選擇 AWS Lambda 整合教學課程](getting-started-with-lambda-integration.md)

1. 在 Amazon Simple Notification Service (Amazon SNS) 中建立至少一個主題。您將使用部署的 API 來取得與您 AWS 帳戶相關聯的 Amazon SNS 主題清單。如需了解如何在 Amazon SNS 中建立主題，請參閱[建立主題](https://docs.aws.amazon.com/sns/latest/dg/sns-create-topic.html)。(您不需要複製步驟 5 中提到的主題 ARN。)

## 步驟 1：建立 AWS 服務代理執行角色
<a name="getting-started-aws-proxy-add-roles"></a>

 若要允許 API 調用 Amazon SNS 動作，您必須將適當的 IAM 政策附加至 IAM 角色。在此步驟中，您會建立新的 IAM 角色。

**建立 AWS 服務代理執行角色**

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 選擇**角色**。

1. 選擇建**立角色**。

1.  在**選取信任的實體類型**下選擇 **AWS 服務**，然後選取 **API Gateway** 並選取**允許 API Gateway 將日誌推送到 CloudWatch Logs**。

1.  選擇**下一步**，然後選擇**下一步**。

1. 針對**角色名稱**，輸入 **APIGatewaySNSProxyPolicy**，然後選擇**建立角色**。

1. 在**角色**清單中，選擇您剛剛建立的角色。您可能需要捲動或使用搜尋列來尋找該角色。

1. 針對選取的角色，選取 **許可** 索引標籤。

1. 在下拉式清單中，選擇 **連接政策**。

1. 在搜尋列中輸入 **AmazonSNSReadOnlyAccess**，並選擇**新增許可**。
**注意**  
本教學課程為了簡單起見，使用受管理政策。最佳實務是，您應建立自己的 IAM 政策以授予所需的最低許可。

1. 記下新建的**角色 ARN**，以在稍後使用。

## 步驟 2：建立資源
<a name="getting-started-aws-proxy-add-resources"></a>

在此步驟中，您會建立資源，讓 AWS 服務代理能夠與服務互動 AWS 。

**建立資源**

1. 在以下網址登入 API Gateway 主控台：[https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway)。

1. 選擇您的 API。

1. 選取根資源 **/** (其以一條正斜線 (**/**) 表示)，然後選擇**建立資源**。

1. 讓**代理資源**保持關閉。

1. 將**資源路徑**保持為 `/`。

1. 針對**資源名稱**，輸入 **mydemoawsproxy**。

1. 讓 **CORS (跨來源資源分享)** 保持關閉。

1. 選擇**建立資源**。

## 步驟 3：建立 GET 方法
<a name="getting-started-aws-proxy-add-methods"></a>

在此步驟中，您會建立 GET 方法，讓 AWS 服務代理能夠與服務互動 AWS 。

**建立 `GET` 方法**

1. 選取 **/mydemoawsproxy** 資源，然後選擇**建立方法**。

1. 針對方法類型，選取 **GET**。

1. 針對**整合類型**，選取 **AWS 服務**。

1. 針對 **AWS 區域**，選取您建立 Amazon SNS 主題 AWS 區域 的 。

1. 針對 **AWS 服務**，選取 **Amazon SNS**。

1. 讓 **AWS 子網域**保持空白。

1. 針對 **HTTP 方法**，選取 **GET**。

1. 針對**動作類型**，選取**使用動作名稱**。

1. 針對**動作名稱**，輸入 **ListTopics**。

1. 針對**執行角色**，輸入 **APIGatewaySNSProxyPolicy** 的角色 ARN。

1. 選擇**建立方法**。

## 步驟 4：指定方法設定並測試方法
<a name="getting-started-aws-proxy-set-methods"></a>

您現在可以測試您的 `GET` 方法，確認其已正確設定，可以列出您的 Amazon SNS 主題。

**測試 `GET` 方法**

1. 選擇**測試**標籤。您可能需要選擇向右箭頭按鈕才能顯示此索引標籤。

1. 選擇**測試**。

   結果會顯示類似以下內容的回應：

   ```
   {
     "ListTopicsResponse": {
       "ListTopicsResult": {
         "NextToken": null,
         "Topics": [
           {
             "TopicArn": "arn:aws:sns:us-east-1:80398EXAMPLE:MySNSTopic-1"
           },
           {
             "TopicArn": "arn:aws:sns:us-east-1:80398EXAMPLE:MySNSTopic-2"
           },
           ...
           {
             "TopicArn": "arn:aws:sns:us-east-1:80398EXAMPLE:MySNSTopic-N"
           }
         ]
       },
       "ResponseMetadata": {
         "RequestId": "abc1de23-45fa-6789-b0c1-d2e345fa6b78"
       }
     }
   }
   ```

## 步驟 5：部署 API
<a name="getting-started-aws-proxy-deploy"></a>

在此步驟中，您將部署 API 以從 API Gateway 主控台外部呼叫 API。

**部署 API**

1. 選擇**部署 API**。

1. 針對**階段**，選取**新階段**。

1. 針對**階段名稱**，輸入 **test**。

1. 在**描述**，請輸入描述。

1. 選擇**部署**。

## 步驟 6：測試 API
<a name="getting-started-aws-proxy-test"></a>

在此步驟中，您會離開 API Gateway 主控台，並使用 AWS 服務代理與 Amazon SNS 服務互動。

1. 在主導覽窗格中，選擇**階段**。

1. 在**階段詳細資訊**下，選擇複製圖示以複製 API 的調用 URL。

   它應該如下所示：

   ```
   https://my-api-id.execute-api.region-id.amazonaws.com/test
   ```

1. 將 URL 輸入到新瀏覽器標籤的網址方塊中。

1. 附加 `/mydemoawsproxy`，讓 URL 看起來如下：

   ```
   https://my-api-id.execute-api.region-id.amazonaws.com/test/mydemoawsproxy
   ```

   瀏覽至該 URL。應該會顯示類似如下的資訊：

   ```
   {"ListTopicsResponse":{"ListTopicsResult":{"NextToken": null,"Topics":[{"TopicArn": "arn:aws:sns:us-east-1:80398EXAMPLE:MySNSTopic-1"},{"TopicArn": "arn:aws:sns:us-east-1:80398EXAMPLE:MySNSTopic-2"},...{"TopicArn": "arn:aws:sns:us-east-1:80398EXAMPLE:MySNSTopic-N}]},"ResponseMetadata":{"RequestId":"abc1de23-45fa-6789-b0c1-d2e345fa6b78}}}
   ```

## 步驟 7：清除
<a name="getting-started-aws-proxy-clean-up"></a>

您可以刪除 AWS 服務代理需要運作的 IAM 資源。

**警告**  
如果您刪除 AWS 服務代理依賴的 IAM 資源，則該 AWS 服務代理及其依賴的任何 APIs 將無法再運作。IAM 資源一經刪除，即無法復原。如果您要再次使用該 IAM 資源，就必須予以重建。

**刪除相關聯的 IAM 資源**

1. 在以下網址開啟 IAM 主控台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在 **Details (詳細資訊)** 區域中，選擇 **Roles (角色)**。

1. 選取 **APIGatewayAWSProxyExecRole**，然後依序選擇 **Role Actions (角色動作)** 和 **Delete Role (刪除角色)**。出現提示時，選擇 **Yes, Delete (是，刪除)**。

1. 在 **Details (詳細資訊)** 區域中，選擇 **Policies (政策)**。

1. 選取 **APIGatewayAWSProxyExecPolicy**，然後依序選擇 **Policy Actions (政策動作)** 和 **Delete (刪除)**。出現提示時，選擇 **Delete** (刪除)。

 本演練到此結束。如需建立 API 做為 AWS 服務代理的更詳細討論，請參閱 [教學：建立 REST API 做為 Amazon S3 代理](integrating-api-with-aws-services-s3.md)、 [教學課程：建立具有兩個 AWS 服務整合和一個 Lambda 非代理整合的計算器 REST API](integrating-api-with-aws-services-lambda.md)或 [教學課程：建立 REST API 做為 Amazon Kinesis 代理](integrating-api-with-aws-services-kinesis.md)。