0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【導入編】オンプレのログ分析基盤をAWSマネージドサービスへ移行する全体設計

0
Last updated at Posted at 2026-09-18

はじめに

自宅環境では、rsyslogとFluentdでsyslog/auth.logを集め、Kafkaを中心にHDFS、Spark、Flink、Iceberg、Hive Metastore、Trinoへ接続している。

先行する「HDFSログ分析基盤をAWS S3へ段階移行する」シリーズでは、rawログ、Iceberg、checkpoint、catalog、query、運用処理をAmazon S3とAWS Glue Data Catalogへ切り替え、HDFSを停止・撤去した。

本シリーズでは、そのS3/Glue data基盤を作り直さず、オンプレで稼働しているKafka、Kafka Connect、Spark、Flink、TrinoをAWSマネージドサービスへ移行する。

本シリーズを開始する前に、先行シリーズの第1〜7編を完了する。S3、Glue、IAMを削除する第8編のcleanupはスキップする。

「HDFSログ分析基盤をAWS S3へ段階移行する」シリーズから続ける場合は、次の状態を開始条件とする。

  • S3にrawログの履歴が存在する
  • S3上にbatch用Iceberg tableが存在する
  • AWS Glue Data Catalogのlogs databaseからtableを参照できる
  • Athenaで件数と時刻範囲を確認できる
  • オンプレKafka ConnectがAmazon S3へrawログを継続保存している
  • オンプレSparkがS3 rawを読み、S3 Icebergへ書き込んでいる
  • オンプレFlinkがS3 checkpointを使用し、S3 Icebergへ書き込んでいる
  • Trino、Grafana、ZeppelinがGlueとS3を参照している
  • HDFSが停止・撤去済みである

現在の構成

既存記事から確認した基準構成は次のとおりである。

項目 現在値
Kafka 3.7.1、KRaft、controller 3台、broker 3台
topic syslog、authlog、各3 partition/replication factor 3
Kafka Connect 2台、S3 Sink、JSON、1時間directory、Asia/Tokyo
raw Amazon S3のraw/syslog、raw/authlog
Spark 3.5系、/usr/local/bin/spark-sql-iceberg、日次batch
Flink 2.0.1、S3 checkpoint 5分、EXACTLY_ONCE
Iceberg 1.10.1、format-version 2、GlueCatalog、Amazon S3
batch table logs.syslog_iceberg、logs.authlog_iceberg
stream table syslog_events、authlog_events、syslog_host_1m、authlog_host_1m
query Trino経由でGrafana/Zeppelinから参照

Sparkはrawログの日次変換、FlinkはKafkaからのstreaming処理を担当する。この役割はAWS側でも変えない。

AWSとの境界

awslog-managed-services-overview.png

FluentdからS3へ直接送らず、Amazon MSKを分岐点として維持する。

サービス対応表

オンプレ AWS 移行方針
rsyslog / Fluentd 変更なし 自宅側に残す
Kafka broker Amazon MSK Provisioned topic名とpartition数を維持
Kafka Connect S3 Sink MSK Connect + Confluent S3 Sink 既存prefixへの保存を引き継ぐ
Amazon S3 raw 変更なし 履歴は再コピーせず、raw/syslog、raw/authlogへMSK Connectの新規分を追加
Spark 3.5系 EMR Serverless Spark 日次batchをPySparkへ移植
Flink 2.0.1 Managed Service for Apache Flink 対応runtimeへbuildし直す
Iceberg/S3 変更なし 既存の履歴、schema、partitionを引き継ぐ
AWS Glue Data Catalog 変更なし 既存のlogs databaseを引き継ぐ
Trino Amazon Athena Engine v3 検証queryを移植

共通の名前

Rawバックアップ記事の/etc/rawlog-s3-backup/common.envと、Iceberg構築記事の/etc/iceberg/aws.envを引き継ぐ。通常のデータ確認では、Rawにhome-rawlog-backup、Icebergにhome-awsを使用する。bucket、Glue、Athenaなどの管理操作に限りhome-aws-adminへ切り替える。

export AWS_REGION=ap-northeast-1
source /etc/rawlog-s3-backup/common.env
export RAW_BUCKET="${S3_BUCKET_NAME}"

source /etc/iceberg/aws.env
export LAKE_BUCKET="${ICEBERG_BUCKET}"
export GLUE_DATABASE="${GLUE_DATABASE:-logs}"

export AWS_RAW_PROFILE=home-rawlog-backup
export AWS_SYNC_PROFILE=home-aws
export AWS_ADMIN_PROFILE=home-aws-admin

aws sts get-caller-identity --profile "${AWS_RAW_PROFILE}"
aws sts get-caller-identity --profile "${AWS_SYNC_PROFILE}"

# S3 bucket名は全accountで一意にする。
AWS_ACCOUNT_ID=$(aws sts get-caller-identity \
  --query Account --output text --profile "${AWS_ADMIN_PROFILE}")
export ARTIFACT_BUCKET="home-log-artifacts-${AWS_ACCOUNT_ID}-${AWS_REGION}"

aws s3api create-bucket \
  --bucket "${ARTIFACT_BUCKET}" \
  --region "${AWS_REGION}" \
  --create-bucket-configuration LocationConstraint="${AWS_REGION}" \
  --profile "${AWS_ADMIN_PROFILE}"
aws s3api put-public-access-block \
  --bucket "${ARTIFACT_BUCKET}" \
  --public-access-block-configuration \
    'BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true' \
  --profile "${AWS_ADMIN_PROFILE}"
aws s3api put-bucket-encryption \
  --bucket "${ARTIFACT_BUCKET}" \
  --server-side-encryption-configuration \
    '{"Rules":[{"ApplyServerSideEncryptionByDefault":{"SSEAlgorithm":"AES256"}}]}' \
  --profile "${AWS_ADMIN_PROFILE}"

ARTIFACT_BUCKETだけはjob JARやconnector pluginを置くための検証用bucketとして別途用意する。既存のRaw/Iceberg bucketをartifact置き場として兼用しない。

AWS CLIの--profileは操作端末でのみ使う。MSK Connect、EMR Serverless、Managed Service for Apache FlinkからS3やGlueへ接続するときは、ローカルのprofileを配布せず、各サービスの実行IAM roleへ同等の最小権限を付与する。

S3は次のprefixへ固定する。

s3://${RAW_BUCKET}/raw/syslog/YYYY/MM/dd/HH/
s3://${RAW_BUCKET}/raw/authlog/YYYY/MM/dd/HH/
s3://${LAKE_BUCKET}/warehouse/logs/${TABLE}/
s3://${LAKE_BUCKET}/flink/checkpoints/
s3://${LAKE_BUCKET}/flink/savepoints/

IAMとnetworkの基本設計

実際のVPC、3 AZ subnet、route、Security Groupの作成commandは第1回に掲載する。後続記事では第1回で出力したVPC_ID、SUBNET_ID_1〜SUBNET_ID_3、MSK_SECURITY_GROUP_IDを再利用する。

  • MSK broker、MSK Connect、EMR Serverless、Managed Service for Apache Flinkはprivate subnetへ置く
  • serviceごとにIAM roleを分け、S3 prefixとGlue actionを絞る
  • S3 Gateway Endpoint、必要に応じてGlue/CloudWatch/STSのVPC endpointを用意する
  • S3 Block Public Accessとdefault encryptionを有効にする
  • secretはSecrets Managerを使い、記事やFluentd設定へ平文で書かない
  • オンプレ接続は本番ではSite-to-Site VPN、Direct Connect等を優先する

個人PoCではMSK ProvisionedのPublic accessとSASL/SCRAMを使える。ただしTLS、認証、接続元global IPのSecurity Group制限を必須とし、検証後に閉じる。

移行順序

  1. 「HDFSログ分析基盤をAWS S3へ段階移行する」第1〜7編を完了し、第8編のcleanupをスキップする
  2. Amazon MSKを構築し、Fluentdを一時的に新旧Kafkaへ切り替えて疎通を確認する
  3. 既存S3 rawの最新prefixを確認し、その続きへMSK Connectでraw保存を開始する
  4. EMR Serverlessで既存S3 rawを読み、既存batch Icebergとの比較後に新規日付分を生成する
  5. 既存Glue Data Catalogのtableとmetadata locationを確認する
  6. 既存Athena workgroupで件数、時刻範囲、日付別集計を比較する
  7. Flink jobをManaged Service for Apache Flinkへ移植する
  8. 観察期間後、置き換え済みのオンプレKafka、Kafka Connect、Spark、Flink、Trinoを停止する

費用上の注意

特にAmazon MSK Provisionedのbroker、NAT Gateway、Managed Service for Apache Flinkの常時稼働、MSK Connect workerは、データが少なくても時間課金が継続する。S3 request、CloudWatch Logs、Athena scan、cross-AZ通信も確認する。

PoCは作成日時、削除予定日、ownerをtagへ付け、各記事の終了時に不要resourceを停止する。MSKは停止できないため、不要ならclusterを削除する。

本シリーズ

  1. 本記事: オンプレのログ分析基盤をAWSマネージドサービスへ移行する全体設計
  2. Amazon MSKへKafkaを移行する
  3. MSK ConnectでS3へraw保存する
  4. Spark batchをEMR Serverlessへ移行する
  5. バックアップ済みIcebergとGlue Data Catalogを引き継ぐ
  6. Trino分析をAthenaへ移行する
  7. FlinkをManaged Service for Apache Flinkへ移行する
  8. 【第7回】EMR ServerlessとEventBridge SchedulerでIcebergメンテナンスを定期実行する
  9. AWS移行結果を確認して検証環境を削除する

完了条件

  • FluentdからMSKの両topicへ継続送信できる
  • 既存S3 rawの履歴を保持したまま、切り替え後のobjectが追加される
  • 既存batch Icebergを破壊せず、新規日付分とstreaming Icebergが更新される
  • Glueが全Iceberg tableの最新metadataを指す
  • Athenaの件数と時刻範囲が移行元と一致する
  • checkpointからFlink applicationを再開できる
  • credential、Public access、課金resourceを棚卸しできる

参考資料

実機検証について

本シリーズは構築前の手順書であり、執筆時点では一連の実機検証を完了していない。AWS Consoleに表示されるversion、料金、quotaを実施時に再確認し、まず検証accountで実行する。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?