Amazon VPC フローログ の Apache Parquet 形式を CloudFormation から設定するサンプルテンプレート
VPC フローログの Apache Parquet 形式の設定を CloudFormation がサポートしていたのでサンプルテンプレートを作成し設定を確認しました。
機能詳細は以下のリンクをご確認ください。
ユーザーガイドを確認
2021年10月のアップデート当時はマネジメントコンソールからの設定はできましたが、CloudFormation からの設定はサポートされていませんでした。久々にユーザーガイドを確認したらサポートされていることに気づきました。
- デフォルト設定は
plain-text
なので明示的に指定する必要があります - 設定書式は
Json
形式です
参照元: AWS::EC2::FlowLog - AWS CloudFormation
作ってみた
既存 VPC を選択してApache Parquet 形式を指定した VPC フローログを設定するサンプルテンプレートです。
VPC フローログ保存用の S3 バケットは一定期間経過後にログ(オブジェクト)を完全に削除するライフサイクルルールを設定しています。
- 90日後に現行オブジェクトを削除
- 非現行オブジェクトは30日後に完全に削除
ログ保存ポリシーをご確認の上、ライフサイクルルールは適切なものをご検討ください。
--- AWSTemplateFormatVersion: "2010-09-09" Description: VPC Flow Logs Parameters: ProjectName: Description: Project Name Type: String Default: unnamed Environment: Description: Environment Type: String Default: dev AllowedValues: - prod - dev - stg VpcId: Description: VPC ID Type: AWS::EC2::VPC::Id Filter: Type: String Default: ALL AllowedValues: [ALL, ACCEPT, REJECT] S3BucketName: Description: Type the name of S3 Bucket for VPC Flow Logs Type: String Resources: # ------------------------------------------------------------# # S3 Bucket for VPC Flow Logs # ------------------------------------------------------------# S3Bucket: Type: AWS::S3::Bucket DeletionPolicy: Retain UpdateReplacePolicy: Retain Properties: BucketName: !Sub ${ProjectName}-${Environment}-${S3BucketName}-${AWS::AccountId} OwnershipControls: # ACL無効化設定 Rules: - ObjectOwnership: "BucketOwnerEnforced" PublicAccessBlockConfiguration: # パブリックアクセスの設定 BlockPublicAcls: True BlockPublicPolicy: True IgnorePublicAcls: True RestrictPublicBuckets: True VersioningConfiguration: # バージョニング設定 Status: Enabled BucketEncryption: # 暗号化設定 ServerSideEncryptionConfiguration: - ServerSideEncryptionByDefault: SSEAlgorithm: "AES256" BucketKeyEnabled: false LifecycleConfiguration: # ライフサイクルルール設定 Rules: - Id: AbortIncompleteMultipartUpload # 未完了なマルチパートアップロードの削除 AbortIncompleteMultipartUpload: DaysAfterInitiation: 7 Status: "Enabled" - Id: CurrentVersionExpiration # 現行のバージョン削除 ExpirationInDays: 90 Status: "Enabled" - Id: NoncurrentVersionExpiration # 非現行のバージョン削除 NoncurrentVersionExpiration: # NewerNoncurrentVersions: 1 NoncurrentDays: 30 Status: "Enabled" # ------------------------------------------------------------# # VPC Flow Logs # ------------------------------------------------------------# VPCFlowLogs: Type: "AWS::EC2::FlowLog" Properties: LogDestinationType: s3 LogDestination: !GetAtt S3Bucket.Arn ResourceType: "VPC" ResourceId: !Ref VpcId TrafficType: !Ref Filter DestinationOptions: { "FileFormat": "parquet", "HiveCompatiblePartitions": true, "PerHourPartition": true, }
VPC フローログ確認
parquet
形式の設定が入っています。
S3 バケット確認
parquet
形式で保存されていました。
おわりに
Terraform は早々にparquet
をサポートしていました。と、リリース当時に同僚から教えてもらい、CloudFormation はいつ対応するのかと待っていました。調べる用があったついでに確認したらサポートされていたので動作確認しました。VPC フローログを CloudFormation から設定する機会があればご参考にしていただければ幸いです。
aws_flow_log | Resources | hashicorp/aws | Terraform Registry
最後に一点注意して頂きたいのは今回設定したDestinationOptions
の項目についてユーザーガイドにはYAML
で指定するサンプルが掲載されておりますが、現時点ではJson
形式の指定のみのサポートのため、サンプルをコピペするとエラーになります。