【Udemy】AWS-SAA-C03 ソリューションアーキテクトアソシエイト

Udemyで公開しているAWSS-SAA-C03対策動画について、動画内のソースやリンクはこちらでまとめます。

## 動画
https://www.udemy.com/user/shan-wang-wan-jun-2/

https://www.youtube.com/c/Maruchintechch?sub_confirmation=1

## ソース
動画内で使ったコードです。

CloudWatch Logs、Amazon S3、および Amazon SNS にアクセスするためのアクセス許可を関数に付与するIAMロール
```json:IAMロール
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
		"logs:*"
		],
            "Resource": [
                "arn:aws:s3:logs:*:*:*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
             ],
            "Resource": [
                "arn:aws:s3:::my-bucket/*"
        },
           "Action": [
		"sns:Publish"
		],
            "Resource": [
                "arn:aws:sns:us-west-2:123456789012:my-tocip"
        }
    ]
}
```

CloudTrailログを処理し、新しいAmazon SNSトピックが作成されるたびに Amazon SNS から通知するLambda関数
```java:Lambda関数
var aws  = require('aws-sdk');
var zlib = require('zlib');
var async = require('async');

var EVENT_SOURCE_TO_TRACK = /sns.amazonaws.com/;
var EVENT_NAME_TO_TRACK   = /CreateTopic/;
var DEFAULT_SNS_REGION  = 'us-east-2';
var SNS_TOPIC_ARN       = 'arn:aws:sns:us-west-2:123456789012:my-topic';

var s3 = new aws.S3();
var sns = new aws.SNS({
    apiVersion: '2010-03-31',
    region: DEFAULT_SNS_REGION
});

exports.handler = function(event, context, callback) {
    var srcBucket = event.Records[0].s3.bucket.name;
    var srcKey = event.Records[0].s3.object.key;

    async.waterfall([
        function fetchLogFromS3(next){
            console.log('Fetching compressed log from S3...');
            s3.getObject({
               Bucket: srcBucket,
               Key: srcKey
            },
            next);
        },
        function uncompressLog(response, next){
            console.log("Uncompressing log...");
            zlib.gunzip(response.Body, next);
        },
        function publishNotifications(jsonBuffer, next) {
            console.log('Filtering log...');
            var json = jsonBuffer.toString();
            console.log('CloudTrail JSON from S3:', json);
            var records;
            try {
                records = JSON.parse(json);
            } catch (err) {
                next('Unable to parse CloudTrail JSON: ' + err);
                return;
            }
            var matchingRecords = records
                .Records
                .filter(function(record) {
                    return record.eventSource.match(EVENT_SOURCE_TO_TRACK)
                        && record.eventName.match(EVENT_NAME_TO_TRACK);
                });

            console.log('Publishing ' + matchingRecords.length + ' notification(s) in parallel...');
            async.each(
                matchingRecords,
                function(record, publishComplete) {
                    console.log('Publishing notification: ', record);
                    sns.publish({
                        Message:
                            'Alert... SNS topic created: \n TopicARN=' + record.responseElements.topicArn + '\n\n' +
                            JSON.stringify(record),
                        TopicArn: SNS_TOPIC_ARN
                    }, publishComplete);
                },
                next
            );
        }
    ], function (err) {
        if (err) {
            console.error('Failed to publish notifications: ', err);
        } else {
            console.log('Successfully published all notifications.');
        }
        callback(null,"message");
    });
};
```

参考: Lambdaのハンズオン
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/with-cloudtrail-example.html

## リンク
### 関連リンク
#### テキスト
この1冊で合格! AWS認定ソリューションアーキテクト
https://www.amazon.co.jp/dp/4046042036/
徹底攻略 AWS認定 ソリューションアーキテクト − アソシエイト教科書
https://www.amazon.co.jp/dp/4295010650/
AWS認定資格試験テキスト AWS認定ソリューションアーキテクト
https://www.amazon.co.jp/dp/4815607389/

#### お役立ちサイト
AWS公式
https://aws.amazon.com/jp/
ざっくりAWS
https://aws-rough.cc/
SlideShare: AWS
https://www.slideshare.net/AmazonWebServicesJapan
GitLab on AWS
https://about.gitlab.com/partners/technology-partners/aws/