Aws-lambda-using-lambda-function-with-cloudtrail
CloudTrailでLambda関数を使用する
*AWS CloudTrail* はAmazonで利用可能なサービスで、AWSコンソール内で行われたすべてのアクティビティを記録するのに役立ちます。 すべてのAPI呼び出しをログに記録し、履歴を保存します。これは後でデバッグ目的で使用できます。 CloudTrailからLambdaをトリガーできないことに注意してください。 代わりに、CloudTrailはすべての履歴をログの形式でS3バケットに保存し、S3からAWS Lambdaをトリガーできます。 ログが処理されると、S3バケットにログが追加されるたびにAWS Lambdaがトリガーされます。
必要条件
あなたがAWS CloudTrail、S3およびAWS Lambdaで作業を開始する前に、次を実行する必要があります-
- CloudTrailログを保存するS3バケットを作成する
- SNSサービスを作成する
- CloudTrailで証跡を作成し、S3バケットとSNSサービスを割り当てます
- IAMロールを許可付きで作成します。
- AWSラムダ関数を作成する
- AWS Lambda設定
例
AWS CloudTrail、S3、AWS Lambdaの動作を示す例を考えてみましょう。 ここでは、S3でバケットを作成し、AWSコンソールで行われた相互作用のすべてのログを保存します。 SNSトピックを作成して公開しましょう。 このアクションの場合、ログはS3にファイルとして入力されます。 AWSラムダがトリガーされ、Amazon SESサービスを使用してメールが送信されます。
このプロセスを説明するためのブロック図は以下のとおりです-
CloudTrailログを保存するS3バケットを作成する
AWSコンソールに移動し、S3サービスをクリックします。 [*バケットの作成]をクリックし、示されているようにcloudtrailログを保存するバケットの名前を入力します-
ここで、ログを保存するためのS3バケット cloudtraillogsaws を作成したことに注意してください。
SNSサービスを作成する
AWSコンソールに移動し、[簡易通知サービス]をクリックします。 左側からトピックを選択し、[新しいトピックを作成]ボタンをクリックします。
トピックを公開する displaytrail というトピックを作成しました。 その詳細は、上記で作成されたS3bucketに保存されます。
Cloudtrailで証跡を作成し、S3バケットとSNSサービスを割り当てます
AWSコンソールに移動し、示されているように管理ツールから CloudTrail サービスをクリックします-
以下に示すように、左側から*トレイル*をクリックします-
[証跡の作成]ボタンをクリックします。 *トレイル名を入力し、すべてのリージョンにトレイルを適用*し、*はい*を選択します。 その後、ログはすべてのリージョンに適用されます。
読み取り/書き込みイベント*では、*すべて*を選択します。 以下に示すように、 S3バケット*および* SNSトピック*の詳細を追加します。 ここで新しいものを作成するか、既存のものを追加できます。
- ログファイルの暗号化、ログファイルの検証の有効化、ログファイルの配信ごとにsns通知を送信する*などのオプションがあります ここではデフォルト値を使用しました。 ファイルの暗号化を許可すると、暗号化キーが要求されます。 詳細が追加されたら、「証跡の作成」ボタンをクリックします。
許可付きのIAMロールを作成する
AWSコンソールに移動し、IAMを選択します。 メールを送信するためのS3、Lambda、CloudTrail、およびSESの権限を持つロールを作成します。 作成された役割は以下のとおりです-
AWS Lambda関数を作成する
AWSサービスに移動し、 Lambda サービスをクリックします。 関数名を追加し、ランタイムを nodejs として選択し、ラムダ関数用に作成されたロールを選択します。 以下は、作成されたラムダ関数です。
AWS Lambda設定
次に、作成されたAWSラムダのトリガーとしてS3を追加する必要があります。
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: ["[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 lambdaがトリガーされ、メールがコードに記載されているメールIDに送信されます。
AWS Lambdaのニーズに応じてログを処理できることに注意してください。