本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
教學課程: AWS Lambda 搭配 Amazon DocumentDB Streams 使用
在本教學課程中,您將建立一個基礎 Lambda 函數,它會從 Amazon DocumentDB (with MongoDB compatibility) 變更串流中取用事件。完成本教學課程需逐一進行以下階段:
-
設定您的 Amazon DocumentDB 叢集、連線到叢集,然後在叢集上啟用變更串流。
-
建立 Lambda 函數,並將 Amazon DocumentDB 叢集設定為函數的事件來源。
-
將 end-to-end項目插入您的 Amazon DocumentDB 資料庫來測試設定。
主題
必要條件
如果您沒有 AWS 帳戶,請完成下列步驟以建立 。
若要註冊 AWS 帳戶
開啟https://portal.aws.amazon.com/billing/註冊
。 請遵循線上指示進行。
部分註冊程序需接收來電,並在電話鍵盤輸入驗證碼。
當您註冊 時 AWS 帳戶,AWS 帳戶根使用者會建立 。根使用者有權存取該帳戶中的所有 AWS 服務 和資源。作為安全最佳實務,請將管理存取權指派給使用者,並且僅使用根使用者來執行需要根使用者存取權的任務。
AWS 會在註冊程序完成後傳送確認電子郵件給您。您可以隨時前往 https://aws.amazon.com/
註冊 後 AWS 帳戶,請保護 AWS 帳戶根使用者、啟用 AWS IAM Identity Center並建立管理使用者,以免將根使用者用於日常任務。
保護您的 AWS 帳戶根使用者
-
選擇根使用者並輸入 AWS 帳戶 您的電子郵件地址,以帳戶擁有者AWS Management Console
身分登入 。在下一頁中,輸入您的密碼。 如需使用根使用者登入的說明,請參閱 AWS 登入 使用者指南中的以根使用者身分登入。
-
為您的根使用者開啟多重要素驗證 (MFA)。
如需指示,請參閱 IAM 使用者指南 中的為 AWS 帳戶 根使用者 (主控台) 啟用虛擬MFA裝置。
建立具有管理存取權的使用者
-
啟用IAM身分中心。
如需指示,請參閱 AWS IAM Identity Center 使用者指南中的啟用 AWS IAM Identity Center。
-
在 IAM Identity Center 中,將管理存取權授予使用者。
如需使用 IAM Identity Center 目錄 做為身分來源的教學課程,請參閱 AWS IAM Identity Center 使用者指南 中的使用 設定使用者存取權 IAM Identity Center 目錄。
以具有管理存取權的使用者身分登入
-
若要使用 IAM Identity Center 使用者登入,請使用您建立 IAM Identity Center 使用者時URL傳送到您電子郵件地址的登入。
如需使用 IAM Identity Center 使用者登入的協助,請參閱 AWS 登入 使用者指南 中的登入 AWS 存取入口網站。
如果您尚未安裝 AWS Command Line Interface,請依照安裝或更新最新版本 AWS CLI的步驟進行安裝。
本教學課程需使用命令列終端機或 Shell 來執行命令。在 Linux 和 macOS 中,使用您偏好的 Shell 和套件管理工具。
注意
在 Windows 中,作業系統的內建終端機不支援您常與 Lambda 搭配使用的某些 Bash CLI命令 (例如 zip
)。若要取得 Ubuntu 和 Bash 的 Windows 整合版本,請安裝適用於 Linux 的 Windows 子系統
建立 AWS Cloud9 環境
在建立 Lambda 函數之前,您需要建立並設定 Amazon DocumentDB 叢集。本教學課程中設定叢集的步驟是以 Amazon DocumentDB 入門中的程序為基礎。
注意
如果您已設定 Amazon DocumentDB 叢集,請確定您啟用變更串流並建立必要的介面VPC端點。然後,可以直接跳到函數建立步驟。
首先,建立 AWS Cloud9 環境。在本教學課程中,您將使用此環境來連線至並查詢 Amazon DocumentDB 叢集。
建立 AWS Cloud9 環境
-
開啟AWS Cloud9 主控台
,然後選擇建立環境 。 -
使用下列組態建立環境:
-
在詳細資訊下:
-
名稱:
DocumentDBCloud9Environment
-
環境類型:新EC2執行個體
-
-
在新EC2執行個體 下:
-
執行個體類型:
t2.micro
(1 GiB RAM + 1 vCPU) -
平台:Amazon Linux 2
-
逾時:30 分鐘
-
-
在網路設定下:
-
連線 : AWS Systems Manager (SSM)
-
展開VPC設定下拉式清單。
-
Amazon Virtual Private Cloud (VPC):選擇您的預設 VPC。
-
子網路:無偏好設定
-
-
請保留所有其他預設設定。
-
-
選擇 Create (建立)。佈建新 AWS Cloud9 環境可能需要幾分鐘的時間。
建立 Amazon EC2安全群組
接下來,使用允許 Amazon DocumentDB 叢集與環境之間的流量的規則建立 Amazon EC2安全群組。 Amazon DocumentDB AWS Cloud9
建立EC2安全群組
-
開啟EC2主控台
。在網路與安全性下,選擇安全群組。 -
選擇建立安全群組。
-
使用下列組態建立安全群組:
-
在基本詳細資訊下:
-
安全群組名稱:
DocDBTutorial
-
說明 : AWS Cloud9 與 Amazon DocumentDB 之間流量的安全群組。
-
VPC:選擇您的預設 VPC。
-
-
在 Inbound rules (入站規則) 下,選擇 Add rule (新增規則)。使用下列組態建立規則:
-
類型:自訂 TCP
-
連接埠範圍:27017
-
Source (來源):自訂
-
在來源 旁邊的搜尋方塊中,選擇您在上一個步驟中建立 AWS Cloud9 的環境的安全群組。若要查看可用安全群組清單,請在搜尋方塊中輸入
cloud9
。選擇名稱為aws-cloud9-<environment_name>
的安全群組。
-
-
請保留所有其他預設設定。
-
-
選擇建立安全群組。
建立 Amazon DocumentDB 叢集
在此步驟中,您將使用上一步的安全群組建立 Amazon DocumentDB 叢集。
建立 Amazon DocumentDB 叢集
-
開啟 Amazon DocumentDB 主控台
。在叢集下,選擇建立。 -
使用下列組態建立叢集:
-
針對叢集類型,選擇執行個體型叢集。
-
在組態下:
-
引擎版本:5.0.0
-
執行個體類別:db.t3.medium (免費試用資格)
-
執行個體數目:1
-
-
在身分驗證下:
-
輸入連線到叢集所需的使用者名稱和密碼 (與您在上一個步驟中建立秘密所用的登入資料相同)。在確認密碼中,確認您的密碼。
-
-
開啟顯示進階設定。
-
在網路設定下:
-
虛擬私有雲端 (VPC):選擇您的預設 VPC。
-
子網路群組:預設
-
VPC 安全群組 :除了 之外
default (VPC)
,請選擇您在上一個步驟中建立DocDBTutorial (VPC)
的安全群組。
-
-
請保留所有其他預設設定。
-
-
選擇建立叢集。佈建 Amazon DocumentDB 叢集可能需要幾分鐘的時間。
在 Secrets Manager 中建立密碼
若要手動存取 Amazon DocumentDB 叢集,您必須提供使用者名稱和密碼憑證。若要讓 Lambda 存取您的叢集,您必須提供一個 Secrets Manager 機密,其中包含設定事件來源映射時的相同存取憑證。在此步驟中,您將建立此密碼。
在 Secrets Manager 中建立密碼
-
開啟 Secrets Manager
主控台,並選擇儲存新密碼。 -
針對選擇密碼類型,選擇以下選項:
-
在基本詳細資訊下:
-
秘密類型:Amazon DocumentDB 資料庫的憑證
-
在憑證 下,輸入您要用來存取 Amazon DocumentDB 叢集的使用者名稱和密碼。
-
資料庫 :選擇您的 Amazon DocumentDB 叢集。
-
選擇 Next (下一步)。
-
-
-
針對設定密碼,選擇下列選項:
-
秘密名稱 –
DocumentDBSecret
-
選擇 Next (下一步)。
-
-
選擇 Next (下一步)。
-
選擇儲存。
-
重新整理主控台以確認您已成功儲存
DocumentDBSecret
密碼。
記下秘密的秘密ARN。在後續步驟中需要它。
安裝 mongo Shell
在此步驟中,您將在 AWS Cloud9 環境中安裝 mongo shell。mongo shell 是命令列公用程式,用於連線至 和查詢 Amazon DocumentDB 叢集。
在 AWS Cloud9 環境中安裝 mongo shell
-
開啟 AWS Cloud9 主控台
。在您先前建立 DocumentDBCloud9Environment
的環境旁,按一下AWS Cloud9 IDE欄下方的開啟連結。 -
在終端視窗中,使用下列命令建立 MongoDB 儲存庫檔案:
echo -e "[mongodb-org-5.0] \nname=MongoDB Repository\nbaseurl=https://repo.mongodb.org/yum/amazon/2/mongodb-org/5.0/x86_64/\ngpgcheck=1 \nenabled=1 \ngpgkey=https://www.mongodb.org/static/pgp/server-5.0.asc" | sudo tee /etc/yum.repos.d/mongodb-org-5.0.repo
-
然後,使用以下命令安裝 mongo Shell:
sudo yum install -y mongodb-org-shell
-
若要加密傳輸中的資料,請下載 Amazon DocumentDB 的公有金鑰
。下列命令會下載名為 global-bundle.pem
的檔案:wget https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem
連線至 Amazon DocumentDB 叢集
您現在可以使用 mongo shell 連線至 Amazon DocumentDB 叢集。
連線至 Amazon DocumentDB 叢集
-
開啟 Amazon DocumentDB 主控台
。在叢集下,透過選擇叢集識別碼來選擇叢集。 -
在連線與安全索引標籤中,使用 mongo shell 連線至此叢集下,選擇複製 。
-
在您的 AWS Cloud9 環境中,將此命令貼到終端機中。將
<insertYourPassword>
取代為正確密碼。
輸入此命令之後,如果命令提示變為 rs0:PRIMARY>
,表示您已連線至 Amazon DocumentDB 叢集。
啟用變更串流
在本教學課程中,您將追蹤 Amazon DocumentDB 叢集中docdbdemo
資料庫products
集合的變更。可以透過啟用變更串流來完成此操作。首先,建立 docdbdemo
資料庫,並插入記錄進行測試。
在叢集內建立新資料庫
-
在您的 AWS Cloud9 環境中,請確定您仍連接至 Amazon DocumentDB 叢集 。
-
在終端視窗中,使用下列命令建立名為
docdbdemo
的新資料庫:use docdbdemo
-
然後,使用下列命令將記錄插入
docdbdemo
:db.products.insert({"hello":"world"})
您應該會看到輸出,如下所示:
WriteResult({ "nInserted" : 1 })
-
使用下列命令列出所有資料庫:
show dbs
確保您的輸出包含
docdbdemo
資料庫:docdbdemo 0.000GB
接下來,使用以下命令在 docdbdemo
資料庫的 products
集合上啟用變更串流:
db.adminCommand({modifyChangeStreams: 1, database: "docdbdemo", collection: "products", enable: true});
您應該會看到輸出,如下所示:
{ "ok" : 1, "operationTime" : Timestamp(1680126165, 1) }
建立介面VPC端點
接下來,建立介面VPC端點,以確保 Lambda 和 Secrets Manager (稍後用於存放我們的叢集存取憑證) 可以連線至您的預設 VPC。
建立介面VPC端點
-
開啟VPC主控台
。在左側選單的虛擬私有雲端下,選擇端點。 -
選擇建立端點。使用下列組態建立端點:
-
針對名稱標籤,輸入
lambda-default-vpc
。 -
針對服務類別 ,選擇 AWS 服務。
-
針對服務,在搜尋方塊中輸入
lambda
。選擇格式為com.amazonaws.<region>.lambda
的服務。 -
針對 VPC,選擇您的預設 VPC。
-
針對子網路,請核取每個可用區域旁邊的方塊。請選擇每個可用區域的正確子網路。
-
對於 IP 地址類型 ,選取 IPv4。
-
針對安全群組 ,選擇預設VPC安全群組 ( 的群組名稱
default
),以及您先前建立的安全群組 ( 的群組名稱DocDBTutorial
)。 -
請保留所有其他預設設定。
-
選擇建立端點。
-
-
再次選擇建立端點。使用下列組態建立端點:
-
針對名稱標籤,輸入
secretsmanager-default-vpc
。 -
針對服務類別 ,選擇 AWS 服務。
-
針對服務,在搜尋方塊中輸入
secretsmanager
。選擇格式為com.amazonaws.<region>.secretsmanager
的服務。 -
針對 VPC,選擇您的預設 VPC。
-
針對子網路,請核取每個可用區域旁邊的方塊。請選擇每個可用區域的正確子網路。
-
對於 IP 地址類型 ,選取 IPv4。
-
針對安全群組 ,選擇預設VPC安全群組 (群組名稱為
default
),以及您先前建立的安全群組 (群組名稱為DocDBTutorial
)。 -
請保留所有其他預設設定。
-
選擇建立端點。
-
這就完成了本教學課程的叢集設定部分。
建立執行角色
在接下來的一組步驟中,您將建立 Lambda 函數。首先,您需要建立授予函數存取叢集許可的執行角色。您可以先建立IAM政策,然後將此政策連接至IAM角色,藉此執行此操作。
若要建立IAM政策
-
在IAM主控台中開啟政策頁面
,然後選擇建立政策 。 -
選擇 JSON索引標籤。在下列政策中,將陳述式最後一行ARN中的 Secrets Manager 資源取代為ARN舊版的秘密,並將政策複製到編輯器中。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "LambdaESMNetworkingAccess", "Effect": "Allow", "Action": [ "ec2:CreateNetworkInterface", "ec2:DescribeNetworkInterfaces", "ec2:DescribeVpcs", "ec2:DeleteNetworkInterface", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups", "kms:Decrypt" ], "Resource": "*" }, { "Sid": "LambdaDocDBESMAccess", "Effect": "Allow", "Action": [ "rds:DescribeDBClusters", "rds:DescribeDBClusterParameters", "rds:DescribeDBSubnetGroups" ], "Resource": "*" }, { "Sid": "LambdaDocDBESMGetSecretValueAccess", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": "arn:aws:secretsmanager:us-east-1:123456789012:secret:DocumentDBSecret" } ] }
-
選擇下一步:標籤,然後選擇下一步:檢閱。
-
對於 Name (名稱),輸入
AWSDocumentDBLambdaPolicy
。 -
選擇 建立政策。
建立 IAM 角色
-
在IAM主控台中開啟角色頁面
,然後選擇建立角色 。 -
針對選取信任的實體,請選擇以下選項:
-
受信任實體類型 – AWS 服務
-
使用案例 – Lambda
-
選擇 Next (下一步)。
-
-
針對新增許可 ,選擇您剛建立
AWSDocumentDBLambdaPolicy
的政策,以及AWSLambdaBasicExecutionRole
,以授予函數寫入 Amazon CloudWatch Logs 的許可。 -
選擇 Next (下一步)。
-
在角色名稱中,輸入
AWSDocumentDBLambdaExecutionRole
。 -
選擇建立角色。
建立 Lambda 函式
下列範例程式碼會收到 Amazon DocumentDB 事件輸入,並處理其中包含的訊息。
建立 Lambda 函數
-
將範本程式碼複製到名為
index.js
的檔案。 -
使用下列命令建立部署套件。
zip function.zip index.js
-
使用下列CLI命令來建立函數。
us-east-1
將 取代為 AWS 區域,並將 取代123456789012
為您的帳戶 ID。aws lambda create-function \ --function-name ProcessDocumentDBRecords \ --zip-file fileb://function.zip --handler index.handler --runtime nodejs20.x \ --region us-east-1 \ --role arn:aws:iam::123456789012:role/AWSDocumentDBLambdaExecutionRole
建立 Lambda 事件來源映射
建立將 Amazon DocumentDB 變更串流與 Lambda 函數建立關聯的事件來源映射。建立此事件來源映射之後, AWS Lambda 立即開始輪詢串流。
建立事件來源映射
-
開啟 Lambda 主控台中的函數
頁面。 -
選擇您之前建立的
ProcessDocumentDBRecords
函數。 -
選擇組態索引標籤,然後在左側選單中選擇觸發程序。
-
選擇 Add trigger (新增觸發條件)。
-
在觸發組態 下,針對來源選取 Amazon DocumentDB。
-
使用下列組態建立事件來源映射:
-
Amazon DocumentDB 叢集 – 選擇您先前建立的叢集。
-
資料庫名稱 –
docdbdemo
-
集合名稱 – 產品
-
批次大小 – 1
-
開始位置 – 最新
-
驗證 – BASIC_AUTH
-
Secrets Manager 金鑰 – 選擇
DocumentDBSecret
您剛建立的 。 -
批次時段 – 1
-
完整文件組態 – UpdateLookup
-
-
選擇新增。建立事件來源映射可能需要幾分鐘的時間。
測試函數 - 手動調用
若要測試您是否正確建立了函數和事件來源映射,請使用 invoke
命令調用函數。若要執行此操作,請先將下列事件複製到名為 JSON的檔案input.txt
:
{ "eventSourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:canaryclusterb2a659a2-qo5tcmqkcl03", "events": [ { "event": { "_id": { "_data": "0163eeb6e7000000090100000009000041e1" }, "clusterTime": { "$timestamp": { "t": 1676588775, "i": 9 } }, "documentKey": { "_id": { "$oid": "63eeb6e7d418cd98afb1c1d7" } }, "fullDocument": { "_id": { "$oid": "63eeb6e7d418cd98afb1c1d7" }, "anyField": "sampleValue" }, "ns": { "db": "docdbdemo", "coll": "products" }, "operationType": "insert" } } ], "eventSource": "aws:docdb" }
然後,使用下列命令透過此事件調用函數:
aws lambda invoke \ --function-name ProcessDocumentDBRecords \ --cli-binary-format raw-in-base64-out \ --region us-east-1 \ --payload file://input.txt out.txt
應看到如下回應:
{ "StatusCode": 200, "ExecutedVersion": "$LATEST" }
您可以檢查 CloudWatch Logs 來驗證您的函數是否已成功處理事件。
透過 CloudWatch 日誌驗證手動調用
-
開啟 Lambda 主控台中的函數
頁面。 -
選擇監控索引標籤,然後選擇檢視 CloudWatch 日誌 。這會將您引導至 CloudWatch 主控台中與函數相關聯的特定日誌群組。
-
選擇最新的日誌串流。在日誌訊息中,您應該會看到事件 JSON。
測試函數 - 插入記錄
直接與您的 Amazon DocumentDB 資料庫互動,以測試 end-to-end您的設定。在接下來的一組步驟中,您將插入記錄、更新記錄,然後將其刪除。
插入記錄
-
重新連線至您環境中的 Amazon DocumentDB 叢集。 AWS Cloud9
-
使用此命令可確保您目前正在使用
docdbdemo
資料庫:use docdbdemo
-
將記錄插入到
docdbdemo
資料庫的products
集合中:db.products.insert({"name":"Pencil", "price": 1.00})
測試函數 - 更新記錄
接下來,使用以下命令更新剛剛插入的記錄:
db.products.update( { "name": "Pencil" }, { $set: { "price": 0.50 }} )
透過檢查 CloudWatch 日誌,確認您的函數已成功處理此事件。
測試函數 - 刪除記錄
最後,使用以下命令刪除剛剛更新的記錄:
db.products.remove( { "name": "Pencil" } )
透過檢查 CloudWatch 日誌,確認您的函數已成功處理此事件。
清除您的資源
除非您想要保留為此教學課程建立的資源,否則您現在便可刪除。透過刪除您不再使用的 AWS 資源,可為 AWS 帳戶避免不必要的費用。
若要刪除 Lambda 函數
-
開啟 Lambda 主控台中的 函數頁面
。 -
選擇您建立的函數。
-
選擇 Actions (動作)、Delete (刪除)。
-
在文字輸入欄位中輸入
delete
,然後選擇 刪除 。
刪除執行角色
-
開啟IAM主控台的角色頁面
。 -
選取您建立的執行角色。
-
選擇 刪除 。
-
在文字輸入欄位中輸入角色的名稱,然後選擇 刪除 。
若要刪除VPC端點
-
開啟VPC主控台
。在左側選單的虛擬私有雲端下,選擇端點。 -
選擇您建立的端點。
-
選擇動作 ,刪除VPC端點 。
-
在文字輸入欄位中輸入
delete
。 -
選擇 刪除 。
刪除 Amazon DocumentDB 叢集
-
選擇您為此教學課程建立的 Amazon DocumentDB 叢集,並停用刪除保護。
-
在主叢集頁面中,再次選擇您的 Amazon DocumentDB 叢集。
-
選擇 動作、刪除。
-
針對建立最終叢集快照,請選取否。
-
在文字輸入欄位中輸入
delete
。 -
選擇 刪除 。
在 Secrets Manager 中刪除密碼
-
選擇您為此教學課程建立的密碼。
-
選擇動作、刪除機密。
-
選擇 Schedule deletion (排定刪除)。
若要刪除 Amazon EC2安全群組
-
開啟EC2主控台
。在網路與安全性下,選擇安全群組。 -
選擇您為此教學課程建立的安全群組。
-
選擇動作、刪除安全群組。
-
選擇 刪除 。
若要刪除 AWS Cloud9 環境
-
開啟 AWS Cloud9 主控台
。 -
選取您為本教學課程建立的環境。
-
選擇 刪除 。
-
在文字輸入欄位中輸入
delete
。 -
選擇 刪除 。