本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
了解如何搭配自訂屬性使用 AWS Cloud Map 服務探索
下列教學課程示範如何使用 AWS Cloud Map 服務探索搭配可使用 AWS Cloud Map API 探索的自訂屬性。本教學課程會逐步引導您使用 建立和執行用戶端應用程式 AWS CloudShell。應用程式使用兩個 Lambda 函數將資料寫入 DynamoDB 資料表,然後從資料表讀取。Lambda 函數和 DynamoDB 資料表會在 中註冊 AWS Cloud Map 為服務執行個體。用戶端應用程式和 Lambda 函數中的程式碼使用 AWS Cloud Map 自訂屬性來探索執行任務所需的資源。
如需本教學課程的 AWS CLI版本,請參閱 了解如何使用 搭配自訂屬性使用 AWS Cloud Map 服務探索 AWS CLI。
重要
您將在研討會期間建立 AWS 資源,這會在您的帳戶 AWS 中產生費用。建議您在完成研討會後立即清理資源,以將成本降至最低。
先決條件
開始之前,請完成 設定 以使用 AWS Cloud Map 中的步驟。
步驟 1:建立 AWS Cloud Map 命名空間
在此步驟中,您會建立 AWS Cloud Map 命名空間。命名空間是用來將應用程式服務分組的建構。建立命名空間時,您可以指定如何探索資源。在此步驟中建立的命名空間中建立的資源,將可透過使用自訂屬性的 AWS Cloud Map API 呼叫來探索。
登入 AWS Management Console 並在 https://https://console.aws.amazon.com/cloudmap/
開啟 AWS Cloud Map 主控台。 -
選擇 Create namespace (建立命名空間)。
-
針對命名空間名稱,指定
cloudmap-tutorial
。 -
(選用) 針對命名空間描述,指定您要使用命名空間的描述。
-
針對執行個體探索,選取 API 呼叫。
-
保留其餘的預設值,然後選擇建立命名空間。
步驟 2:建立 DynamoDB 資料表
在此步驟中,您會建立 DynamoDB 資料表。資料表用於存放和擷取您將在下列步驟中建立之範例應用程式的資料。
如需有關如何建立 DynamoDB 的資訊,請參閱 DynamoDB 開發人員指南中的步驟 1:在 DynamoDB 中建立資料表,並使用下表來決定要指定哪些選項。 DynamoDB
選項 | Value |
---|---|
資料表名稱 |
cloudmap |
分割區索引鍵 |
id |
保留其餘設定的預設值並建立資料表。
步驟 3:建立 AWS Cloud Map 資料服務並將 DynamoDB 資料表註冊為執行個體
在此步驟中,您會建立 AWS Cloud Map 服務,然後將最後一個步驟中建立的 DynamoDB 資料表註冊為服務執行個體。
-
在 https://https://console.aws.amazon.com/cloudmap/
開啟 AWS Cloud Map 主控台 -
從命名空間清單中,選取
cloudmap-tutorial
命名空間,然後選擇檢視詳細資訊。 -
在服務區段中,選擇建立服務並執行下列動作。
-
對於服務名稱,輸入
data-service
。 -
保留其餘的預設值,然後選擇建立服務。
-
-
在服務區段中,選取
data-service
服務,然後選擇檢視詳細資訊。 -
在服務執行個體區段中,選擇註冊服務執行個體。
-
在註冊服務執行個體頁面上,執行下列動作。
-
針對執行個體類型,選取識別另一個資源的資訊。
-
針對服務執行個體 ID,指定
data-instance
。 -
在自訂屬性區段中,指定下列鍵/值對:鍵 =
tablename
,值 =cloudmap
。
-
步驟 4:建立 AWS Lambda 執行角色
在此步驟中,您會建立 AWS Lambda 函數在下一個步驟中使用的 IAM 角色。您可以命名 IAM 角色cloudmap-tutorial-role
並省略許可界限,因為該角色僅用於本教學課程,之後可以將其刪除。
建立 Lambda 的服務角色 (IAM 主控台)
登入 AWS Management Console ,並在 https://https://console.aws.amazon.com/iam/
開啟 IAM 主控台。 -
在 IAM 主控台的導覽窗格中,選擇角色,然後選擇建立角色。
-
對於 Trusted entity type (信任的實體類型),請選擇 AWS 服務。
-
針對服務或使用案例,選擇 Lambda,然後選擇 Lambda 使用案例。
-
選擇下一步。
-
搜尋並選取
PowerUserAccess
政策旁的方塊,然後選擇下一步。 -
選擇下一步。
-
針對角色名稱,指定
cloudmap-tutorial-role
。 -
檢閱角色,然後選擇 Create role (建立角色)。
步驟 5:建立 Lambda 函數以寫入資料
在此步驟中,您會建立從頭開始編寫的 Lambda 函數,使用 AWS Cloud Map API 查詢您建立 AWS Cloud Map 的服務,將資料寫入 DynamoDB 資料表。
如需有關建立 Lambda 函數的資訊,請參閱《 AWS Lambda 開發人員指南》中的使用主控台建立 Lambda 函數,並使用下表來決定要指定或選擇哪些選項。
選項 | Value |
---|---|
函數名稱 |
寫入函數 |
執行期 |
Python 3.12 |
架構 |
x86_64 |
許可 |
使用現有角色 |
現有角色 |
cloudmap-tutorial-role |
建立函數之後,請更新範例程式碼以反映下列 Python 程式碼,然後部署函數。請注意,您要指定與為 DynamoDB 資料表建立之 AWS Cloud Map 服務執行個體相關聯的datatable
自訂屬性。函數會產生介於 1 到 100 之間的隨機數字索引鍵,並將其與呼叫函數時傳遞給函數的值建立關聯。
import json import boto3 import random def lambda_handler(event, context): serviceclient = boto3.client('servicediscovery') response = serviceclient.discover_instances( NamespaceName='cloudmap-tutorial', ServiceName='data-service') tablename = response["Instances"][0]["Attributes"]["tablename"] dynamodbclient = boto3.resource('dynamodb') table = dynamodbclient.Table(tablename) response = table.put_item( Item={ 'id': str(random.randint(1,100)), 'todo': event }) return { 'statusCode': 200, 'body': json.dumps(response) }
部署函數之後,若要避免逾時錯誤,請將函數逾時更新為 5 秒。如需詳細資訊,請參閱《 AWS Lambda 開發人員指南》中的設定 Lambda 函數逾時。
步驟 6:建立 AWS Cloud Map 應用程式服務,並將 Lambda 寫入函數註冊為執行個體
在此步驟中,您會建立 AWS Cloud Map 服務,然後將 Lambda 寫入函數註冊為服務執行個體。
-
在 https://https://console.aws.amazon.com/cloudmap/
開啟 AWS Cloud Map 主控台 -
在左側導覽中,選擇命名空間。
-
從命名空間清單中,選取
cloudmap-tutorial
命名空間,然後選擇檢視詳細資訊。 -
在服務區段中,選擇建立服務並執行下列動作。
-
對於服務名稱,輸入
app-service
。 -
保留其餘的預設值,然後選擇建立服務。
-
-
在服務區段中,選取
app-service
服務,然後選擇檢視詳細資訊。 -
在服務執行個體區段中,選擇註冊服務執行個體。
-
在註冊服務執行個體頁面上,執行下列動作。
-
針對執行個體類型,選取識別另一個資源的資訊。
-
針對服務執行個體 ID,指定
write-instance
。 -
在自訂屬性區段中,指定下列鍵/值對。
-
key =
action
, value =write
-
key =
functionname
, value =writefunction
-
-
步驟 7:建立 Lambda 函數以讀取資料
在此步驟中,您會建立從頭開始撰寫的 Lambda 函數,將資料寫入您建立的 DynamoDB 資料表。
如需有關建立 Lambda 函數的資訊,請參閱《 AWS Lambda 開發人員指南》中的使用主控台建立 Lambda 函數,並使用下表來決定要指定或選擇哪些選項。
選項 | Value |
---|---|
函數名稱 |
讀取函數 |
執行期 |
Python 3.12 |
架構 |
x86_64 |
許可 |
使用現有角色 |
現有角色 |
cloudmap-tutorial-role |
建立函數之後,請更新範例程式碼以反映下列 Python 程式碼,然後部署函數。函數掃描資料表 amd 會傳回所有項目。
import json import boto3 def lambda_handler(event, context): serviceclient = boto3.client('servicediscovery') response = serviceclient.discover_instances(NamespaceName='cloudmap-tutorial', ServiceName='data-service') tablename = response["Instances"][0]["Attributes"]["tablename"] dynamodbclient = boto3.resource('dynamodb') table = dynamodbclient.Table(tablename) response = table.scan(Select='ALL_ATTRIBUTES') return { 'statusCode': 200, 'body': json.dumps(response) }
部署函數之後,若要避免逾時錯誤,請將函數逾時更新為 5 秒。如需詳細資訊,請參閱《 AWS Lambda 開發人員指南》中的設定 Lambda 函數逾時。
步驟 8:將 Lambda 讀取函數註冊為 AWS Cloud Map 服務執行個體
在此步驟中,您會在先前建立的 服務中,將 Lambda 讀取函數註冊為app-service
服務執行個體。
-
在 https://https://console.aws.amazon.com/cloudmap/
開啟 AWS Cloud Map 主控台 -
在左側導覽中,選擇命名空間。
-
從命名空間清單中,選取
cloudmap-tutorial
命名空間,然後選擇檢視詳細資訊。 -
在服務區段中,選取
app-service
服務,然後選擇檢視詳細資訊。 -
在服務執行個體區段中,選擇註冊服務執行個體。
-
在註冊服務執行個體頁面上,執行下列動作。
-
針對執行個體類型,選取識別另一個資源的資訊。
-
針對服務執行個體 ID,指定
read-instance
。 -
在自訂屬性區段中,指定下列鍵/值對。
-
key =
action
, value =read
-
key =
functionname
, value =readfunction
-
-
步驟 9:在 上建立並執行讀取和寫入用戶端 AWS CloudShell
您可以在 中建立和執行使用程式碼 AWS CloudShell 的用戶端應用程式,以探索您在 中設定的服務, AWS Cloud Map 並呼叫這些服務。
-
在 https://https://console.aws.amazon.com/cloudshell/
開啟 AWS CloudShell 主控台 -
使用下列命令來建立名為 的檔案
writefunction.py
。vim writeclient.py
-
在
writeclient.py
檔案中,按下i
按鈕進入插入模式。然後,複製並貼上下列程式碼。此程式碼探索 Lambda 函數,透過搜尋app-service
服務name=writeservice
中的自訂屬性來寫入資料。會傳回負責將資料寫入 DynamoDB 資料表的 Lambda 函數名稱。然後調用 Lambda 函數,將寫入資料表的範例承載做為值傳遞。import boto3 serviceclient = boto3.client('servicediscovery') response = serviceclient.discover_instances(NamespaceName='cloudmap-tutorial', ServiceName='app-service', QueryParameters={ 'action': 'write' }) functionname = response["Instances"][0]["Attributes"]["functionname"] lambdaclient = boto3.client('lambda') resp = lambdaclient.invoke(FunctionName=functionname, Payload='"This is a test data"') print(resp["Payload"].read())
-
按逸出鍵,輸入
:wq
,然後按 Enter 鍵儲存檔案並退出。 -
使用下列命令來執行 Python 程式碼。
python3 writeclient.py
輸出應為
200
回應,如下所示。b'{"statusCode": 200, "body": "{\\"ResponseMetadata\\": {\\"RequestId\\": \\"Q0M038IT0BPBVBJK8OCKK6I6M7VV4KQNSO5AEMVJF66Q9ASUAAJG\\", \\"HTTPStatusCode\\": 200, \\"HTTPHeaders\\": {\\"server\\": \\"Server\\", \\"date\\": \\"Wed, 06 Mar 2024 22:46:09 GMT\\", \\"content-type\\": \\"application/x-amz-json-1.0\\", \\"content-length\\": \\"2\\", \\"connection\\": \\"keep-alive\\", \\"x-amzn-requestid\\": \\"Q0M038IT0BPBVBJK8OCKK6I6M7VV4KQNSO5AEMVJF66Q9ASUAAJG\\", \\"x-amz-crc32\\": \\"2745614147\\"}, \\"RetryAttempts\\": 0}}"}'
-
若要在上一個步驟中驗證寫入是否成功,請建立讀取用戶端。
-
使用下列命令來建立名為 的檔案
readfunction.py
。vim readclient.py
-
在
readclient.py
檔案中,按下i
按鈕以進入插入模式。然後,複製並貼上下列程式碼。此程式碼會掃描資料表,並傳回您在上一個步驟中寫入資料表的值。import boto3 serviceclient = boto3.client('servicediscovery') response = serviceclient.discover_instances(NamespaceName='cloudmap-tutorial', ServiceName='app-service', QueryParameters={ 'action': 'read' }) functionname = response["Instances"][0]["Attributes"]["functionname"] lambdaclient = boto3.client('lambda') resp = lambdaclient.invoke(FunctionName=functionname, InvocationType='RequestResponse') print(resp["Payload"].read())
-
按逸出鍵,輸入
:wq
,然後按 Enter 鍵儲存檔案並退出。 -
使用下列命令來執行 Python 程式碼。
python3 readclient.py
輸出看起來應該類似以下內容,列出透過執行 寫入資料表的值,
writefunction.py
以及在 Lambda 寫入函數中產生的隨機索引鍵。b'{"statusCode": 200, "body": "{\\"Items\\": [{\\"id\\": \\"45\\", \\"todo\\": \\"This is a test data\\"}], \\"Count\\": 1, \\"ScannedCount\\": 1, \\"ResponseMetadata\\": {\\"RequestId\\": \\"9JF8J6SFQCKR6IDT5JG5NOM3CNVV4KQNSO5AEMVJF66Q9ASUAAJG\\", \\"HTTPStatusCode\\": 200, \\"HTTPHeaders\\": {\\"server\\": \\"Server\\", \\"date\\": \\"Thu, 25 Jul 2024 20:43:33 GMT\\", \\"content-type\\": \\"application/x-amz-json-1.0\\", \\"content-length\\": \\"91\\", \\"connection\\": \\"keep-alive\\", \\"x-amzn-requestid\\": \\"9JF8J6SFQCKR6IDT5JG5NOM3CNVV4KQNSO5AEMVJF66Q9ASUAAJG\\", \\"x-amz-crc32\\": \\"1163081893\\"}, \\"RetryAttempts\\": 0}}"}'
-
步驟 10:清除資源
完成教學課程後,請刪除資源以避免產生額外費用。 AWS Cloud Map 要求您以相反的順序、服務執行個體先、服務,最後是命名空間進行清除。下列步驟會逐步引導您清除教學課程中使用 AWS Cloud Map 的資源。
刪除 AWS Cloud Map 資源
登入 AWS Management Console ,並在 https://https://console.aws.amazon.com/cloudmap/
開啟 AWS Cloud Map 主控台。 -
從命名空間清單中,選取
cloudmap-tutorial
命名空間,然後選擇檢視詳細資訊。 -
在命名空間詳細資訊頁面上,從服務清單中,選取
data-service
服務,然後選擇檢視詳細資訊。 -
在服務執行個體區段中,選取
data-instance
執行個體,然後選擇取消註冊。 -
使用頁面頂端的導覽列,選取 cloudmap-tutorial.com 以導覽回命名空間詳細資訊頁面。
-
在命名空間詳細資訊頁面上,從服務清單中,選取資料服務,然後選擇刪除。
-
針對
app-service
服務和write-instance
read-instance
和服務執行個體重複步驟 3-6。 -
在左側導覽中,選擇命名空間。
-
選取
cloudmap-tutorial
命名空間,然後選擇刪除。
下表列出您可以遵循的程序,以刪除教學中使用的其他資源。
資源 | 步驟 |
---|---|
DynamoDB 表 |
步驟 6:(選用) 刪除 DynamoDB 資料表以清除 Amazon DynamoDB 開發人員指南中的資源 DynamoDB |
Lambda 函數和相關聯的 IAM 執行角色 |
《 AWS Lambda 開發人員指南》中的清除 |