CloudTrailでLambda関数を使用する
AWS CloudTrailはAmazonで利用可能なサービスであり、AWSコンソール内で行われたすべてのアクティビティをログに記録するのに役立ちます。すべてのAPI呼び出しをログに記録し、履歴を保存します。履歴は後でデバッグ目的で使用できます。CloudTrailからLambdaをトリガーできないことに注意してください。代わりに、CloudTrailはすべての履歴をログの形式でS3バケットに保存し、S3からAWSLambdaをトリガーできます。ログが処理されると、ログがS3バケットに追加されるたびにAWSLambdaがトリガーされます。
必要条件
AWS CloudTrail、S3、およびAWS Lambdaの使用を開始する前に、以下を実行する必要があります-
- CloudTrailログを保存するS3バケットを作成します
- SNSサービスを作成する
- CloudTrailでトレイルを作成し、S3バケットとSNSサービスを割り当てます
- 権限を使用してIAMロールを作成します。
- awsラムダ関数を作成する
- AWSLambda構成
例
AWS CloudTrail、S3、AWSLambdaの動作を示す例を考えてみましょう。ここでは、AWSコンソールで行われたすべてのインタラクションのすべてのログを保存するバケットをS3に作成します。SNSトピックを作成して公開しましょう。このアクションでは、ログはS3にファイルとして入力されます。AWSラムダがトリガーされ、AmazonSESサービスを使用してメールが送信されます。
このプロセスを説明するためのブロック図は次のとおりです。

CloudTrailログを保存するためのS3バケットを作成する
AWSコンソールに移動し、[S3サービス]をクリックします。クリックCreate bucket 次に示すように、cloudtrailログを保存するバケットの名前を入力します-

ここでS3バケットを作成したことに注意してください cloudtraillogsaws ログを保存するため。
SNSサービスを作成する
AWSコンソールに移動し、 Simple notification Service。左側からトピックを選択し、[新しいトピックの作成]ボタンをクリックします。

というトピックを作成しました displaytrailトピックを公開します。その詳細は、上記で作成されたS3bucketに保存されます。
Cloudtrailでトレイルを作成し、S3バケットとSNSサービスを割り当てます
AWSコンソールに移動し、 CloudTrail 図のように管理ツールからのサービス-

クリック Trails 下図のように左側から−


クリック Create Trailボタン。入力しますTrail name, Apply trail to all regions と選択します Yes。次に、ログはすべてのリージョンに適用されます。

ために Read/Write events、選択 All。追加しますS3 bucket そして SNS topic詳細は以下のとおりです。ここで新しいものを作成することも、既存のものを追加することもできます。

利用可能なオプションがあることに注意してください encrypt log files, enable log file validation, send sns notification for every log file deliveryなど。ここではデフォルト値を使用しました。ファイルの暗号化を許可すると、暗号化キーが要求されます。詳細が追加されたら、[トレイルの作成]ボタンをクリックします。

権限のあるIAMロールを作成する
AWSコンソールに移動し、IAMを選択します。メールを送信するためのS3、Lambda、CloudTrail、SESの権限を持つロールを作成します。作成される役割は次のとおりです-

AWSLambda関数を作成する
AWSサービスに移動し、 Lambdaサービス。関数名を追加し、ランタイムを次のように選択しますnodejs、ラムダ関数用に作成されたロールを選択します。以下は、作成されたラムダ関数です。

AWSLambda構成
次に、作成されたAWSラムダのトリガーとしてS3を追加する必要があります。

S3バケットの詳細を追加してトリガーを追加し、次のAWSLambdaコードを追加します-
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: ["[email protected]"]
},
Message: {
Body: {
Text: {
Data:s3message
}
},
Subject: {
Data: "cloudtrail logs"
}
},
Source: "[email protected]"
};
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ラムダがトリガーされ、コードに記載されているメールIDにメールが送信されます。

AWSLambdaで必要に応じてログを処理できることに注意してください。