
- AWS Lambda教程
- AWS Lambda - 首頁
- AWS Lambda - 概述
- AWS Lambda - 環境設定
- AWS Lambda - 簡介
- 構建Lambda函式
- Node.js函式
- Java函式
- Python函式
- Go函式
- C#函式
- 配置Lambda函式
- 使用AWS控制檯建立和部署
- 使用AWS CLI建立和部署
- 使用Serverless Framework建立和部署
- AWS執行和呼叫Lambda函式
- 刪除Lambda函式
- 使用Amazon API Gateway
- Lambda函式與Amazon S3
- Lambda函式與Amazon DynamoDB
- Lambda函式與計劃事件
- Lambda函式與Amazon SNS
- Lambda函式與CloudTrail
- Lambda函式與Amazon Kinesis
- Lambda函式與自定義使用者應用程式
- AWS Lambda@Edge與CloudFront
- 使用Cloudwatch監控和故障排除
- AWS Lambda - 附加示例
- AWS Lambda有用資源
- AWS Lambda - 快速指南
- AWS Lambda - 有用資源
- AWS Lambda - 討論
使用Lambda函式與CloudTrail
AWS CloudTrail是Amazon提供的一項服務,它可以記錄在AWS控制檯中執行的所有活動。它記錄所有API呼叫並存儲歷史記錄,這些記錄可用於後續的除錯目的。請注意,我們無法從CloudTrail觸發Lambda。相反,CloudTrail將所有歷史記錄以日誌的形式儲存在S3儲存桶中,我們可以從S3觸發AWS Lambda。每當向S3儲存桶新增任何日誌時,一旦需要處理任何日誌,AWS Lambda就會被觸發。
先決條件
在開始使用AWS CloudTrail、S3和AWS Lambda之前,您需要執行以下操作:
- 建立S3儲存桶以儲存CloudTrail日誌
- 建立SNS服務
- 在CloudTrail中建立一個跟蹤,並分配S3儲存桶和SNS服務
- 建立具有許可權的IAM角色。
- 建立AWS Lambda函式
- AWS Lambda配置
示例
讓我們考慮一個示例,該示例演示了AWS CloudTrail、S3和AWS Lambda的工作原理。在這裡,我們將建立一個S3儲存桶,用於儲存在AWS控制檯中執行的任何互動的所有日誌。讓我們建立一個SNS主題併發布它。對於此操作,日誌將作為檔案輸入到S3中。AWS Lambda將被觸發,它將使用Amazon SES服務傳送郵件。
解釋此過程的框圖如下所示:

建立S3儲存桶以儲存CloudTrail日誌
轉到AWS控制檯並單擊S3服務。單擊建立儲存桶並輸入要儲存CloudTrail日誌的儲存桶名稱,如下所示:

請注意,在這裡我們建立了一個名為cloudtraillogsaws的S3儲存桶來儲存日誌。
建立SNS服務
轉到AWS控制檯並單擊簡單通知服務。從左側選擇主題,然後單擊“建立新主題”按鈕。

我們建立了一個名為displaytrail的主題來發布主題。其詳細資訊將儲存在上面建立的S3儲存桶中。
在Cloudtrail中建立一個跟蹤,並分配S3儲存桶和SNS服務
轉到AWS控制檯,從管理工具中單擊CloudTrail服務,如下所示:

從左側單擊跟蹤,如下所示:


單擊建立跟蹤按鈕。輸入跟蹤名稱,將跟蹤應用於所有區域選擇是。然後日誌將應用於所有區域。

對於讀/寫事件,選擇全部。新增S3儲存桶和SNS主題詳細資訊,如下所示。您可以在此處建立一個新的或新增一個現有的。

請注意,可以選擇加密日誌檔案、啟用日誌檔案驗證、為每個日誌檔案交付傳送SNS通知等。我在這裡使用了預設值。您可以允許檔案加密,它將要求加密金鑰。新增詳細資訊後,單擊“建立跟蹤”按鈕。

建立具有許可權的IAM角色
轉到AWS控制檯並選擇IAM。建立一個具有S3、Lambda、CloudTrail和SES許可權的角色,用於傳送電子郵件。建立的角色如下所示:

建立AWS Lambda函式
轉到AWS服務並單擊Lambda服務。新增函式名稱,選擇執行時為nodejs,並選擇為Lambda函式建立的角色。以下是建立的Lambda函式。

AWS Lambda配置
接下來,我們需要新增S3作為建立的AWS Lambda的觸發器。

新增S3儲存桶詳細資訊以新增觸發器,並新增以下AWS Lambda程式碼:
const aws = require("aws-sdk"); const sns = new aws.SNS({ region:'us-east-1' }); var ses = new aws.SES({ region: 'us-east-1' }); exports.handler = function(event, context, callback) { console.log("AWS lambda and SNS trigger "); console.log(event); const s3message = "Bucket Name:"+event.Records[0].s3.bucket.name+"\nLog details:"+event.Records[0].s3.object.key; console.log(s3message); var eParams = { Destination: { ToAddresses: ["xxxxxxxxx12@gmail.com"] }, Message: { Body: { Text: { Data:s3message } }, Subject: { Data: "cloudtrail logs" } }, Source: "coxxxxxx@gmail.com" }; var email = ses.sendEmail(eParams, function(err, data) { if (err) console.log(err); else { console.log("===EMAIL SENT==="); console.log("EMAIL CODE END"); console.log('EMAIL: ', email); context.succeed(event); callback(null, "email is send"); } }); };
請注意,我們正在從事件中獲取S3儲存桶和日誌詳細資訊,並如上所示使用SES服務傳送郵件。
每當在AWS控制檯中發生任何活動時,日誌都將傳送到S3儲存桶,同時AWS Lambda將被觸發,並將郵件傳送到程式碼中提到的電子郵件ID。

請注意,您可以在AWS Lambda中根據您的需要處理日誌。