將 Lambda 搭配基礎設施即程式碼 (IaC) - AWS Lambda

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

將 Lambda 搭配基礎設施即程式碼 (IaC)

Lambda 提供多種方式來部署程式碼和建立函數。例如,您可以使用 Lambda 主控台或 AWS Command Line Interface (AWS CLI) 手動建立或更新 Lambda 函數。除了這些手動選項之外,AWS 還提供了許多解決方案,可使用基礎設施即程式碼 (IaC) 部署 Lambda 函數和無伺服器應用程式。使用 IaC,您可以使用程式碼佈建和維護 Lambda 函數和其他 AWS 資源,而不是使用手動程序和設定。

大多數情況下,Lambda 函數不會單獨執行。相反地,它們是具有其他資源 (例如資料庫、佇列和儲存體) 的無伺服器應用程式的一部分。使用 IaC,您可以自動化部署程序,以快速且重複地部署並更新涉及許多不同 AWS 資源的整個無伺服器應用程式。這種方法可加快您的開發週期,使組態管理更加輕鬆,並確保您的資源每次都以相同的方式部署。

用於 Lambda 的 IaC 工具

若要使用 IaC 部署 Lambda 函數和無伺服器應用程式,AWS 會提供許多不同的工具和服務。

AWS CloudFormation 是由 AWS 所提供,用於建立和設定雲端資源的第一個服務。您可以使用 AWS CloudFormation 建立文字範本來定義基礎設施和程式碼。隨著 AWS 導入更多的新服務和建立 AWS CloudFormation 範本的複雜性增加,我們推出了另外兩個工具。AWS SAM 是另一個用於定義無伺服器應用程式的範本型架構。AWS Cloud Development Kit (AWS CDK) 是使用許多常用程式設計語言中的程式碼建構模組來定義和佈建基礎設施的程式碼優先方法。

使用 AWS SAM 和 AWS CDK,AWS CloudFormation 可在幕後運作以建置和部署您的基礎設施。下圖說明這些工具之間的關係,圖表後面的段落說明它們的主要功能。

圖表顯示 AWS SAM 和 AWS CDK 如何使用 AWS CloudFormation 部署 AWS 資源和程式碼,以建立應用程式堆疊。
  • AWS CloudFormation-使用描述您的AWS資源及其屬性的 YAML 或 JSON 範本來建立資源的模型和設定資源。 CloudFormation CloudFormation 以安全、可重複的方式佈建您的資源,讓您無需手動步驟即可經常建置基礎架構和應用程式。當您變更組態時, CloudFormation 決定更新堆疊所要執行的正確作業。 CloudFormation 甚至可以回滾更改。

  • AWS Serverless Application Model (AWS SAM) - AWS SAM 是一種開放原始碼架構,用於定義無伺服器應用程式。AWS SAM 範本使用簡寫語法來定義函數、API、資料庫和事件來源映射,每個資源只需要幾行文字 (YAML)。在部署期間,AWS SAM 將 AWS SAM 語法轉換並擴充至 AWS CloudFormation 語法。因此,任何 CloudFormation 語法都可以添加到AWS SAM模板中。這提供了AWS SAM所有功能 CloudFormation,但配置行較少。

  • AWS Cloud Development Kit (AWS CDK)-使用AWS CDK,您可以使用程式碼結構來定義基礎結構,並透過AWS CloudFormation佈建。 AWS CDK可讓您使用現有的 IDE TypeScript、測試工具和工作流程模式,使用 Python、Java、.NET 和 Go (在「開發人員預覽版」中) 建立應用程式基礎結構的模型。您可以獲得 AWS CloudFormation 的所有好處,包括可重複部署、輕鬆復原和漂移偵測。

AWS 還提供了一種稱為 AWS 應用程式編寫器、使用簡單的圖形介面開發 IaC 範本的服務。使用應用程式編寫器,您可以透過在視覺化畫布中拖曳、分組和連線 AWS 服務 來設計應用程式架構。然後,應用程式編寫器會從您的設計建立 AWS SAM 範本或 AWS CloudFormation 範本,供您用來部署應用程式。

在下面的 開始使用適用於 Lambda 的 IaC 章節中,您可以使用應用程式編寫器,根據現有的 Lambda 函數為無伺服器應用程式開發範本。

開始使用適用於 Lambda 的 IaC

在本教學課程中,您可以透過從現有的 Lambda 函數建立 AWS SAM 範本,然後新增其他 AWS 資源,在應用程式編寫器中建置無伺服器應用程式,開始將 IaC 與 Lambda 搭配使用。

如果您想開始執行 AWS SAM 或 AWS CloudFormation 教學課程,以瞭解如何在不使用應用程式編寫器的情況下使用範本,您可以在本頁結尾的 後續步驟 章節中找到其他資源的連結。

當您執行此教學課程時,您將學習到一些基本概念,例如如何在 AWS SAM 中指定 AWS 資源。您也將學習如何使用應用程式編寫器來建置可使用 AWS SAM 或 AWS CloudFormation 部署的無伺服器應用程式。

請執行下列步驟以完成本教學課程:

  • 建立範例 Lambda 函數

  • 使用 Lambda 主控台可檢視函數的 AWS SAM 範本

  • 將函數的配置匯出到 AWS 應用程式編寫器 並根據函數的組態設計一個簡單的無伺服器應用程式

  • 儲存可用來部署無伺服器應用程式的更新 AWS SAM 範本

在此 後續步驟 區段中,您會找到可用來進一步瞭解 AWS SAM 和應用程式編寫器的資源。這些資源包括更進階教學課程的連結,會教導您如何使用 AWS SAM 部署無伺服器應用程式。

必要條件

在本教學課程中,您會使用應用程式編寫器的本機同步處理功能,將範本和程式碼檔案儲存到本機建置機器。要使用此功能,您需要一個支援檔案系統存取 API 的瀏覽器,該瀏覽器允許 Web 應用程式在本機檔案系統中讀取、寫入和儲存文件。我們建議使用 Google Chrome 或 Microsoft Edge。如需檔案系統存取 API 的詳細資訊,請參閱什麼是檔案系統存取 API?

建立 Lambda 函數

在此第一步驟中,將會建立 Lambda 函數,可用於完成本教學課程的其餘部分。為了簡化事情,您可以使用 Lambda 主控台,使用 Python 3.11 執行期來建立基本的「Hello world」函數。

若要使用主控台建立「Hello world」Lambda 函數
  1. 開啟 Lambda 主控台

  2. 選擇 建立函式

  3. 保持選取從頭開始撰寫,然後在基本資訊之下的函數名稱中輸入 LambdaIaCDemo

  4. 針對執行期,選取 Python 3.11

  5. 選擇 建立函式

檢視函數的 AWS SAM 範本

在您將函數組態匯出至應用程式編寫器之前,請使用 Lambda 主控台以 AWS SAM 範本的方式檢視函數目前的組態。按照本章節中的步驟操作,您將瞭解 AWS SAM 範本的剖析,以及如何定義 Lambda 函數等資源以開始指定無伺服器應用程式。

檢視函數的 AWS SAM 範本
  1. 開啟 Lambda 主控台中的 函數頁面

  2. 選擇您剛建立的函數 (LambdaIaCDemo)。

  3. 函數概觀窗格中,選擇範本

    代替表示函數配置的圖表,您將看到一個函數的 AWS SAM 模板。範本看起來應該如下所示。

    # This AWS SAM template has been generated from your function's # configuration. If your function has one or more triggers, note # that the AWS resources associated with these triggers aren't fully # specified in this template and include placeholder values.Open this template # in AWS Application Composer or your favorite IDE and modify # it to specify a serverless application with other AWS resources. AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: An AWS Serverless Specification template describing your function. Resources: LambdaIaCDemo: Type: AWS::Serverless::Function Properties: CodeUri: . Description: '' MemorySize: 128 Timeout: 3 Handler: lambda_function.lambda_handler Runtime: python3.11 Architectures: - x86_64 EventInvokeConfig: MaximumEventAgeInSeconds: 21600 MaximumRetryAttempts: 2 EphemeralStorage: Size: 512 RuntimeManagementConfig: UpdateRuntimeOn: Auto SnapStart: ApplyOn: None PackageType: Zip Policies: Statement: - Effect: Allow Action: - logs:CreateLogGroup Resource: arn:aws:logs:us-east-1:123456789012:* - Effect: Allow Action: - logs:CreateLogStream - logs:PutLogEvents Resource: - >- arn:aws:logs:us-east-1:123456789012:log-group:/aws/lambda/LambdaIaCDemo:*

讓我們花一點時間看看函數的 YAML 範本,並了解一些重要概念。

範本以宣告 Transform: AWS::Serverless-2016-10-31 開始。此聲明是必需的,因為在幕後,AWS SAM 模板是透過 AWS CloudFormation 而部署。使用 Transform 陳述式將範本識別為 AWS SAM 範本檔案。

Transform 聲明之後伴隨的 Resources 部分。這是您要使用 AWS SAM 範本部署的 AWS 資源的定義位置。AWS SAM 範本可以包含 AWS SAM 資源和 AWS CloudFormation 資源的組合。這是因為在部署期間,AWS SAM 範本會展開為 AWS CloudFormation 範本,因此任何有效的 AWS CloudFormation 語法都可以新增至 AWS SAM 範本。

目前,範本 Resources 區段中只定義了一個資源,即您的 Lambda 函數 LambdaIaCDemo。若要將 Lambda 函數新增至 AWS SAM 範本,請使用 AWS::Serverless::Function 資源類型。Lambda 函數資源的 Properties 定義函數的執行期、函數處理常式和其他組態選項。此處也定義了函數原始碼的路徑,AWS SAM 應該用於部署該函數。若要進一步了解中的 Lambda 函數資源AWS SAM,請參閱AWS SAM開發人員指南AWS::Serverless::Function中的。

除了函數屬性和組態外,範本還會為您的函數指定 AWS Identity and Access Management (IAM) 政策。此政策授予您將日誌寫入 Amazon CloudWatch 日誌的函數權限。當您在 Lambda 主控台中建立函數時,Lambda 會自動將此政策附加至您的函數。若要進一步了解如何為AWS SAM範本中的函數指定 IAM 政策,請參閱AWS SAM開發人員指南AWS::Serverless::Function頁面上的policies屬性。

若要進一步瞭解 AWS SAM 範本的結構,請參閱AWS SAM 範本剖析

使用 AWS 應用程式編寫器 來設計無伺服器應用程式

若要開始使用函數的 AWS SAM 範本做為起點來建立簡單的無伺服器應用程式,請將函數組態匯出至應用程式編寫器,然後啟動應用程式編寫器的本機同步處理模式。本機同步會自動將函數的程式碼和 AWS SAM 範本保存到本機構置機器,並在您在應用程式編寫器中添加其他 AWS 資源時保持已儲存的範本保持同步。

若要將函數匯出至應用程式編寫器
  1. 函數概觀窗格中,選擇匯出至應用程式編寫器

    若要將函數的組態和程式碼匯出至應用程式編寫器,Lambda 會在您的帳戶中建立 Amazon S3 儲存貯體來暫時存放此資料。

  2. 在對話方塊中,選擇確認並建立專案以接受此儲存貯體的預設名稱,並將函數的設定和程式碼匯出至應用程式編寫器。

  3. (選擇性) 若要為 Lambda 建立的 Amazon S3 儲存貯體選擇其他名稱,請輸入新名稱,然後選擇確認並建立專案。Amazon S3 儲存貯體的名稱必須是全域唯一的,並遵循儲存貯體命名規則

    選取確認並建立專案會開啟應用程式編寫器主控台。在畫布上,您將看到您 Lambda 函數。

  4. 選單下拉式清單中選擇啟用本機同步

  5. 在開啟的對話方塊中,選擇選取資料夾,然後選取本機建置機器上的資料夾。

  6. 選擇啟用以啟用本機同步。

若要將您的函數匯出至應用程式編寫器,您需要有使用某些 API 動作的許可。如果您無法匯出函數,請見 所需的許可 並確認您有所需的許可。

注意

標準 Amazon S3 定價適用於 Lambda 在您將函數匯出至應用程式編寫器時所建立的儲存貯體。Lambda 放入儲存貯體的物件會在 10 天後自動刪除,但 Lambda 不會刪除儲存貯體本身。

若要避免額外費用新增至您的 AWS 帳戶,請在將函數匯出至應用程式編寫器之後,依照刪除儲存貯體中的指示執行。如需 Lambda 所建立 Amazon S3 儲存貯體的詳細資訊,請參閱 AWS Lambda 搭配使用 AWS 應用程式編寫器

在應用程式編寫器中設計無伺服器應用程式

啟用本機同步之後,您在應用程式編寫器中所做的變更會反映在儲存於本機建置機器上的 AWS SAM 範本中。您現在可以將其他 AWS 資源拖放到應用程式編寫器畫布上,以建置您的應用程式。在此範例中,您將 Amazon SQS 簡單佇列新增為 Lambda 函數的觸發程序,以及新增 DynamoDB 資料表供函數寫入資料。

  1. 執行下列動作,將 Amazon SQS 觸發條件新增至您的 Lambda 函數:

    1. 資源面板的搜尋欄位中,輸入 SQS

    2. SQS 佇列資源拖曳到畫布上,並將其放置在 Lambda 函數的左側。

    3. 選擇詳細資訊,然後為邏輯 ID 輸入 LambdaIaCQueue

    4. 選擇儲存

    5. 按一下 SQS 佇列卡上的訂閱連接埠,然後將它拖曳至 Lambda 函數卡上的左側連接埠,即可連接您的 Amazon SQS 和 Lambda 資源。兩個資源之間出現一條線表示連線成功。應用程式編寫器也會在畫布底部顯示訊息,指示出兩個資源已成功連線。

  2. 執行下列動作,為您的 Lambda 函數新增 Amazon DynamoDB 資料表,以便將資料寫入:

    1. 資源面板的搜尋欄位中,輸入 DynamoDB

    2. DynamoDB 資料表資源拖曳到畫布上,並將其放置在 Lambda 函數的右側。

    3. 選擇詳細資訊,然後為邏輯 ID 輸入 LambdaIaCTable

    4. 選擇儲存

    5. 按一下 Lambda 函數卡的右側連接埠,然後將其拖曳至 DynamoDB 卡上的左側連接埠,藉此將 DynamoDB 資料表連接至 Lambda 函數。

現在您已新增這些額外資源,讓我們來看看應用程式編寫器已建立的更新 AWS SAM 範本。

若要檢視更新的 AWS SAM 範本
  • 在應用程式編寫器畫布上,選擇範本以從畫布檢視切換至範本檢視。

您的 AWS SAM 範本現在應該包含下列其他資源和屬性:

  • 識別碼為 LambdaIaCQueue 的 Amazon SQS 佇列

    LambdaIaCQueue: Type: AWS::SQS::Queue Properties: MessageRetentionPeriod: 345600

    當您使用應用程式編寫器新增 Amazon SQS 佇列時,應用程式編寫器會設定 MessageRetentionPeriod 屬性。您也可以選取 SQS 佇列卡上的詳細資訊,然後核取或取消核取 Fifo 佇列來設定 FifoQueue 屬性。

    若要設定佇列的其他屬性,您可以手動編輯範本以新增它們。若要進一步瞭解 AWS::SQS::Queue 資源及其可用的屬性,請參閱《AWS CloudFormation 使用者指南》中的AWS::SQS::Queue

  • Lambda 函數定義中的 Events 屬性,可將 Amazon SQS 佇列指定為函數的觸發程序

    Events: LambdaIaCQueue: Type: SQS Properties: Queue: !GetAtt LambdaIaCQueue.Arn BatchSize: 1

    Events 屬性由事件類型和一組依賴於類型的屬性組成。若要了解不同項目,AWS 服務您可以設定以觸發 Lambda 函數和可設定的屬性,請參閱開發AWS SAM人員指南EventSource中的。

  • 具有識別碼 LambdaIaCTable 的 DynamoDB 資料表

    LambdaIaCTable: Type: AWS::DynamoDB::Table Properties: AttributeDefinitions: - AttributeName: id AttributeType: S BillingMode: PAY_PER_REQUEST KeySchema: - AttributeName: id KeyType: HASH StreamSpecification: StreamViewType: NEW_AND_OLD_IMAGES

    使用應用程式編寫器新增 DynamoDB 資料表時,您可以選擇 DynamoDB 資料表卡片上的「詳細資料」並編輯索引鍵值來設定資料表的索引鍵。應用程式編寫器也會設定許多其他屬性的預設值,包括 BillingModeStreamViewType

    若要進一步瞭解這些屬性和您可以新增至 AWS SAM 範本的其他屬性,請參閱《AWS CloudFormation 使用者指南》中的 AWS::DynamoDB::Table

  • 一項新的 IAM 政策,可讓您在新增的 DynamoDB 資料表上執行 CRUD 操作的函數許可。

    Policies: ... - DynamoDBCrudPolicy: TableName: !Ref LambdaIaCTable

完整的最終 AWS SAM 範本看起來應該如下所示。

AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: An AWS Serverless Specification template describing your function. Resources: LambdaIaCDemo: Type: AWS::Serverless::Function Properties: CodeUri: . Description: '' MemorySize: 128 Timeout: 3 Handler: lambda_function.lambda_handler Runtime: python3.11 Architectures: - x86_64 EventInvokeConfig: MaximumEventAgeInSeconds: 21600 MaximumRetryAttempts: 2 EphemeralStorage: Size: 512 RuntimeManagementConfig: UpdateRuntimeOn: Auto SnapStart: ApplyOn: None PackageType: Zip Policies: - Statement: - Effect: Allow Action: - logs:CreateLogGroup Resource: arn:aws:logs:us-east-1:594035263019:* - Effect: Allow Action: - logs:CreateLogStream - logs:PutLogEvents Resource: - arn:aws:logs:us-east-1:594035263019:log-group:/aws/lambda/LambdaIaCDemo:* - DynamoDBCrudPolicy: TableName: !Ref LambdaIaCTable Events: LambdaIaCQueue: Type: SQS Properties: Queue: !GetAtt LambdaIaCQueue.Arn BatchSize: 1 Environment: Variables: LAMBDAIACTABLE_TABLE_NAME: !Ref LambdaIaCTable LAMBDAIACTABLE_TABLE_ARN: !GetAtt LambdaIaCTable.Arn LambdaIaCQueue: Type: AWS::SQS::Queue Properties: MessageRetentionPeriod: 345600 LambdaIaCTable: Type: AWS::DynamoDB::Table Properties: AttributeDefinitions: - AttributeName: id AttributeType: S BillingMode: PAY_PER_REQUEST KeySchema: - AttributeName: id KeyType: HASH StreamSpecification: StreamViewType: NEW_AND_OLD_IMAGES

使用 AWS SAM (選擇性) 部署您的無伺服器應用程式

如果您使用您剛在應用程式編寫器中建立的範本,想要用 AWS SAM 來部署無伺服器應用程式,您必須先安裝 AWS SAM CLI。若要執行此操作,請遵循安裝 AWS SAM CLI 中的說明。

在部署應用程式之前,您也需要更新應用程式編寫器與範本一起儲存的函數程式碼。目前,應用程式編寫器儲存的 lambda_function.py 檔案只包含 Lambda 在建立函數時提供的基本 'Hello world' 程式碼。

若要更新您的函數程式碼,請複製下列程式碼,並將其貼到儲存至本機建置機器的應用程式編寫器 lambda_function.py 檔案中。當您啟動本機同步模式時,您已指定應用程式編寫器要儲存此檔案的目錄。

此程式碼接受來自您在應用程式編寫器中建立之 Amazon SQS 佇列的訊息中的索引鍵值組。如果索引鍵和值都是字串,則程式碼會使用它們將項目寫入範本中定義的 DynamoDB 資料表。

import boto3 import os import json # define the DynamoDB table that Lambda will connect to tablename = os.environ['LAMBDAIACTABLE_TABLE_NAME'] # create the DynamoDB resource dynamo = boto3.client('dynamodb') def lambda_handler(event, context): # get the message out of the SQS event message = event['Records'][0]['body'] data = json.loads(message) # write event data to DDB table if check_message_format(data): key = next(iter(data)) value = data[key] dynamo.put_item( TableName=tablename, Item={ 'id': {'S': key}, 'Value': {'S': value} } ) else: raise ValueError("Input data not in the correct format") # check that the event object contains a single key value # pair that can be written to the database def check_message_format(message): if len(message) != 1: return False key, value = next(iter(message.items())) if not (isinstance(key, str) and isinstance(value, str)): return False else: return True
若要部署您的無伺服器應用程式

若要使用 AWS SAM CLI 部署您的應用程式,請執行下列步驟。若要讓您的函數正確建置和部署,Python 第 3.11 版本必須安裝在您的建置機器和 PATH

  1. 從應用程式編寫器儲存 template.yamllambda_function.py 檔案的目錄執行下列命令。

    sam build

    此命令會收集應用程式的建置成品,並將它們放置在適當的格式和位置以進行部署。

  2. 若要部署應用程式並建立 AWS SAM 範本中指定的 Lambda、Amazon SQS 和 DynamoDB 資源,請執行下列命令。

    sam deploy --guided

    使用此 --guided 標記意味著 AWS SAM 將顯現提示,以引導您完成部署過程。對於此部署,請按 Enter 接受預設選項。

在部署程序期間,AWS SAM 會在您的 AWS 帳戶 中建立下列資源:

  • 一個名為 sam-app 的 AWS CloudFormation 堆疊

  • 名稱格式為 sam-app-LambdaIaCDemo-99VXPpYQVv1M 的 Lambda 函數

  • 名稱格式為 sam-app-LambdaIaCQueue-xL87VeKsGiIo 的 Amazon SQS 佇列

  • 名稱格式為 sam-app-LambdaIaCTable-CN0S66C0VLNV 的 DynamoDB 資料表

AWS SAM 還會建立必要的 IAM 角色和政策,讓 Lambda 函數可以讀取來自 Amazon SQS 佇列的訊息,並在 DynamoDB 資料表上執行 CRUD 操作。

若要進一步瞭解如何使用 AWS SAM 部署無伺服器應用程式,請參閱 後續步驟 章節中的資源。

測試已部署的應用程式 (選擇性)

若要確認您的無伺服器應用程式是否正確部署,請將訊息傳送至包含索引鍵值組的 Amazon SQS 佇列,並檢查 Lambda 是否使用這些值將項目寫入 DynamoDB 資料表。

測試您的無伺服器應用程式
  1. 開啟 Amazon SQS 主控台的佇列頁面,然後選取從範本所建立 AWS SAM 的佇列。名稱具有格式 sam-app-LambdaIaCQueue-xL87VeKsGiIo

  2. 選擇傳送和接收訊息,然後將以下 JSON 貼到傳送訊息區段裡的訊息內文中。

    { "myKey": "myValue" }
  3. 選擇 傳送訊息

    將訊息傳送至佇列會導致 Lambda 透過範本 AWS SAM 中定義的事件來源映射調用您的函數。若要確認 Lambda 已如預期調用您的函數,請確認項目已新增至 DynamoDB 資料表中。

  4. 開啟 DynamoDB 主控台的 資料表 頁面,然後選擇資料表。名稱具有格式 sam-app-LambdaIaCTable-CN0S66C0VLNV

  5. 選擇 探索資料表項目 。在 Items returned 窗格中,應該會看到一個包含 id myKey數值 myValue 的項目。

後續步驟

若要進一步瞭解如何搭配 AWS SAM 和 AWS CloudFormation 使用應用程式編寫器,請先從搭配 AWS CloudFormation 和 AWS SAM 使用應用程式編寫開始。

對於使用 AWS SAM 部署在應用程式編寫器中設計的無伺服器應用程式的引導式教學課程,我們也建議您在 AWS 無伺服器模式研討會中執行 AWS 應用程式編寫器 教學課程

AWS SAM 提供命令列介面 (CLI),您可以將其與 AWS SAM 範本和支援的第三方整合搭配使用,以建置和執行無伺服器應用程式。使用 AWS SAM CLI,您可以建置和部署應用程式、執行本機測試和偵錯、設定 CI/CD 管道等。若要進一步瞭解如何使用 AWS SAM CLI,請參閱AWS Serverless Application Model開發人員指南中的 AWS SAM 入門

若要瞭解如何使用 AWS CloudFormation 主控台以 AWS SAM 範本部署無伺服器應用程式,請從《AWS CloudFormation 使用者指南》中的使用 AWS CloudFormation 主控台開始。

Lambda 與應用程式編寫器整合的支援區域

下列 AWS 區域 項目支援與應用程式編寫器整合的 Lambda:

  • 美國東部 (維吉尼亞北部)

  • 美國東部 (俄亥俄)

  • 美國西部 (加利佛尼亞北部)

  • 美國西部 (奧勒岡)

  • 非洲 (開普敦)

  • 亞太區域 (香港)

  • 亞太區域 (海德拉巴)

  • 亞太區域 (雅加達)

  • 亞太區域 (墨爾本)

  • 亞太區域 (孟買)

  • 亞太區域 (大阪)

  • 亞太區域 (首爾)

  • 亞太區域 (新加坡)

  • 亞太區域 (雪梨)

  • 亞太區域 (東京)

  • 加拿大 (中部)

  • 歐洲 (法蘭克福)

  • 歐洲 (蘇黎世)

  • 歐洲 (愛爾蘭)

  • 歐洲 (倫敦)

  • 歐洲 (斯德哥爾摩)

  • 中東 (阿拉伯聯合大公國)