CloudFormationでAurora(MySQL5.6,5.7互換)で詳細ログ出力を有効にする

こんばんわ、札幌のヨシエです。
クルマの内装掃除に使った洗剤が中々匂いがキツくて、氷点下の中を窓全開で走りました。

以前に弊社先輩のブログにて紹介しているAuroraの詳細ログをCloudwatchLogsへ出力する設定についてCloudFormationで実現することが出来たのでご紹介します。

記事の元ネタ

【アップデート】Amazon Auroraでスロークエリや一般ログがCloudWatch Logsへ出力可能に

今回は使用したAurora(MySQL5.6/5.7互換)でDBエンジンの変更についても以前に書きましたので合わせて紹介します。

CloudformationでAurora(MySQL5.7互換)を作ってみる

主なポイント

今回のポイントとしては以下のプロパティを追加しております。
以下の設定値をRDSクラスターへ追記することと、ParameterGroupにて出力ログ設定を変更することでCloudWatchLogsへログを出力できます。

EnableCloudwatchLogsExports:
  - general
  - error
  - slowquery
  - audit

検証前提

今回ご紹介するCloudFormationテンプレートは詳細ログ出力で監査ログ、エラーログ、一般ログ、
スロークエリログを有効にしております。

以下のようにログが出力されます。

Aurora(5.6互換) CloudFormationテンプレート公開

AWSTemplateFormatVersion: "2010-09-09"
Parameters:
# 配置VPCサブネット選択
  DBSubnetsInVPC:
    Type: CommaDelimitedList
    Description: The list of SubnetIds, one in each AZ in the region in your Virtual
      Private Cloud (VPC)
# DBバックアップウィンドウ設定
  DBBackupWindow:
    Type: String
    Description: Daily backup window
    Default: 15:00-15:30
# バックアップ取得世代指定
  DBBackupRetentionPeriod:
    Type: Number
    Description: Days to retend the backup
    Default: "7"
# DBメンテナンスウィンドウ設定
  DBMaintenanceWindow:
    Type: String
    Description: Weekly maintenance window
    Default: Tue:15:31-Tue:16:01
# RDSインスタンスタイプ指定
  DBInstanceClass:
    Type: String
    Description: Database InstanceType
    Default: db.t2.small
# RDSセキュリティグループ指定
  DBSecurityGroupId:
    Type: String
    Description: SecurityGroup Id to associate to the RDS
# RDSDB管理者ユーザー指定
  DBMasterUser:
    Type: String
    Description: Database Master Username
    Default: root
# RDSDB管理用パスワード指定
  DBMasterPassword:
    Type: String
    Description: Database Master User's password
    NoEcho: True
Resources: 
  TestAurora56dbSubnetGroup:
    Type: AWS::RDS::DBSubnetGroup
    Properties:
      DBSubnetGroupDescription: Subnets available for the RDS DB Instance
      SubnetIds:
        Ref: DBSubnetsInVPC
  TestAurora56dbClusterParameterGroup:
    Type: AWS::RDS::DBClusterParameterGroup
    Properties:
      Family: "aurora5.6"
      Description: "Test-Aurora-56ClusterParameterGroup"
      Parameters:
        time_zone: "Asia/Tokyo"
        server_audit_logging: 1
        server_audit_events : QUERY
  TestAurora56dbOptionGroup:
    Type: "AWS::RDS::OptionGroup"
    Properties:
      EngineName: "aurora"
      MajorEngineVersion: "5.6"
      OptionGroupDescription: "TestAurora56db_RDS_OptionGroup"
      Tags:
        - Key: Name
          Value: Test-Aurora-56db-OptionGroup
  TestAurora56dbInstanceParameterGroup:
    Type: AWS::RDS::DBParameterGroup
    Properties:
      Family: "aurora5.6"
      Description: "Test-Aurora-56InstanceParameterGroup"
      Parameters:
        log_output: FILE
        general_log: 1
        slow_query_log: 1
        long_query_time: 0
  TestAurora56dbCluster:
    Type: AWS::RDS::DBCluster
    Properties:
      BackupRetentionPeriod:
        Ref: DBBackupRetentionPeriod
      DatabaseName: TestAurora56db
      DBClusterIdentifier: Test-Aurora-56cluster
      DBClusterParameterGroupName:
        Ref: TestAurora56dbClusterParameterGroup
      DBSubnetGroupName:
        Ref: TestAurora56dbSubnetGroup
      Engine: aurora
      MasterUsername:
        Ref: DBMasterUser
      MasterUserPassword:
        Ref: DBMasterPassword
      Port: 3306
      PreferredBackupWindow:
        Ref: DBBackupWindow
      PreferredMaintenanceWindow:
        Ref: DBMaintenanceWindow
      EnableCloudwatchLogsExports:
        - general
        - error
        - slowquery
        - audit
      VpcSecurityGroupIds:
        - Ref: DBSecurityGroupId
      Tags:
        - Key: Name
          Value: Test-Aurora-56db-Cluster
  TestAurora56dbInstance:
    Type: "AWS::RDS::DBInstance"
    Properties:
      AutoMinorVersionUpgrade: False
      AvailabilityZone: ap-northeast-1a
      DBInstanceClass:
        Ref: DBInstanceClass
      DBInstanceIdentifier: Test-Aurora-56db
      DBClusterIdentifier:
        Ref: TestAurora56dbCluster
      DBSubnetGroupName:
        Ref: TestAurora56dbSubnetGroup
      Engine: aurora
      OptionGroupName:
        Ref: TestAurora56dbOptionGroup
      DBParameterGroupName:
        Ref: TestAurora56dbInstanceParameterGroup
      PubliclyAccessible: False
      Tags:
        - Key: Name
          Value: TestAurora56dbInstance

Aurora(5.7互換) CloudFormationテンプレート公開

AWSTemplateFormatVersion: "2010-09-09"
Parameters:
# 配置VPCサブネット選択
  DBSubnetsInVPC:
    Type: CommaDelimitedList
    Description: The list of SubnetIds, one in each AZ in the region in your Virtual
      Private Cloud (VPC)
# DBバックアップウィンドウ設定
  DBBackupWindow:
    Type: String
    Description: Daily backup window
    Default: 15:00-15:30
# バックアップ取得世代指定
  DBBackupRetentionPeriod:
    Type: Number
    Description: Days to retend the backup
    Default: "7"
# DBメンテナンスウィンドウ設定
  DBMaintenanceWindow:
    Type: String
    Description: Weekly maintenance window
    Default: Tue:15:31-Tue:16:01
# RDSインスタンスタイプ指定
  DBInstanceClass:
    Type: String
    Description: Database InstanceType
    Default: db.t2.small
# RDSセキュリティグループ指定
  DBSecurityGroupId:
    Type: String
    Description: SecurityGroup Id to associate to the RDS
# RDSDB管理者ユーザー指定
  DBMasterUser:
    Type: String
    Description: Database Master Username
    Default: root
# RDSDB管理用パスワード指定
  DBMasterPassword:
    Type: String
    Description: Database Master User's password
    NoEcho: True
Resources: 
  TestAurora57dbSubnetGroup:
    Type: AWS::RDS::DBSubnetGroup
    Properties:
      DBSubnetGroupDescription: Subnets available for the RDS DB Instance
      SubnetIds:
        Ref: DBSubnetsInVPC
  TestAurora57dbClusterParameterGroup:
    Type: AWS::RDS::DBClusterParameterGroup
    Properties:
      Family: "aurora-mysql5.7"
      Description: "Test-Aurora-57ClusterParameterGroup"
      Parameters:
        time_zone: "Asia/Tokyo"
        server_audit_logging: 1
        server_audit_events : QUERY
  TestAurora57dbOptionGroup:
    Type: "AWS::RDS::OptionGroup"
    Properties:
      EngineName: "aurora-mysql"
      MajorEngineVersion: "5.7"
      OptionGroupDescription: "TestAurora57db_RDS_OptionGroup"
      Tags:
        - Key: Name
          Value: Test-Aurora-57db-OptionGroup
  TestAurora57dbInstanceParameterGroup:
    Type: AWS::RDS::DBParameterGroup
    Properties:
      Family: "aurora-mysql5.7"
      Description: "Test-Aurora-57InstanceParameterGroup"
      Parameters:
        log_output: FILE
        general_log: 1
        slow_query_log: 1
        long_query_time: 0
  TestAurora57dbCluster:
    Type: AWS::RDS::DBCluster
    Properties:
      BackupRetentionPeriod:
        Ref: DBBackupRetentionPeriod
      DatabaseName: TestAurora57db
      DBClusterIdentifier: Test-Aurora-57cluster
      DBClusterParameterGroupName:
        Ref: TestAurora57dbClusterParameterGroup
      DBSubnetGroupName:
        Ref: TestAurora57dbSubnetGroup
      Engine: aurora-mysql
      MasterUsername:
        Ref: DBMasterUser
      MasterUserPassword:
        Ref: DBMasterPassword
      Port: 3306
      PreferredBackupWindow:
        Ref: DBBackupWindow
      PreferredMaintenanceWindow:
        Ref: DBMaintenanceWindow
      EnableCloudwatchLogsExports:
        - general
        - error
        - slowquery
        - audit
      VpcSecurityGroupIds:
        - Ref: DBSecurityGroupId
      Tags:
        - Key: Name
          Value: Test-Aurora-57db-Cluster
  TestAurora57dbInstance:
    Type: "AWS::RDS::DBInstance"
    Properties:
      AutoMinorVersionUpgrade: False
      AvailabilityZone: ap-northeast-1a
      DBInstanceClass:
        Ref: DBInstanceClass
      DBInstanceIdentifier: Test-Aurora-57db
      DBClusterIdentifier:
        Ref: TestAurora57dbCluster
      DBSubnetGroupName:
        Ref: TestAurora57dbSubnetGroup
      Engine: aurora-mysql
      OptionGroupName:
        Ref: TestAurora57dbOptionGroup
      DBParameterGroupName:
        Ref: TestAurora57dbInstanceParameterGroup
      PubliclyAccessible: False
      Tags:
        - Key: Name
          Value: TestAurora57dbInstance

終わりに

RDSの出力ログがCloudWatchLogsへの出力が発表された際は小躍りするぐらい嬉しいニュースだったのを覚えております。
しかし、発表当時はテンプレートに落とし込めませんでしたがアップデートが入ったことでCloudFormationに組み込むことが出来るようになりました。
CloudWatchLogsへのログ出力を目的としましたが、ログ保存料が増えることでコストも増えてしまいますので、
ログの保存期間はご注意ください。 ログは運用に欠かせない要素と考えておりますので、お役に立てば幸いです。