はじめに
DMS記事第2弾。
DMSは便利だが、マネージドに色々やってくれる分、中身がブラックボックスで、いざ何かが起きたときにログがないと不安である。
そういったケースに備えて、CloudWatch Logsへのログ出力の設定をしておこう。
DMSのインスタンスやタスクについては、基本編の構成を変更していくので、未読の方はそちらからご覧いただきたい。
IAMロールの作成
いきなりハマりどころである。DMSのサービスロールをテキトーに作ってCloudWatch Logsに出力する権限をつけておけばいいんだろ、と思いたくなるが、ロール名をdms-cloudwatch-logs-role
固定で作らないといけない。ユーザーガイドに書かれたロール名は例として書かれているわけではないのである。
ということで、以下のように作成しておこう。
resource "aws_iam_role" "dms_cloudwatch" {
name = "dms-cloudwatch-logs-role"
assume_role_policy = data.aws_iam_policy_document.dms_cloudwatch_assume.json
}
data "aws_iam_policy_document" "dms_cloudwatch_assume" {
statement {
effect = "Allow"
actions = [
"sts:AssumeRole",
]
principals {
type = "Service"
identifiers = [
"dms.amazonaws.com",
]
}
}
}
resource "aws_iam_role_policy_attachment" "dms_cloudwatch" {
role = aws_iam_role.dms_cloudwatch.name
policy_arn = "arn:aws:iam::aws:policy/service-role/AmazonDMSCloudWatchLogsRole"
}
CloudWatch Logsのロググループ
DMSが勝手に作ってくれるが、勝手に作られるのが気に入らない場合は、以下の通りロググループ名が決められるので、あらかじめ作っておこう。
なお、ログストリーム名は、dms-task-[レプリケーションタスクID]
が設定される。
resource "aws_cloudwatch_log_group" "dms_replication_task" {
name = "dms-tasks-[レプリケーションインスタンス名]"
}
ロギングの設定
ロギングの設定は、基本編のレプリケーションのタスクを変更する。
具体的には、Logging
のセクションだ。CloudWatchLogGroup
とCloudWatchLogStream
はDMS側で勝手に設定してくれる(というか、設定するとエラーになる)ので、EnableLoggingだけ変更しよう。LogComponentsはエラーレベルを変更できるので、必要に応じて変更しよう。
なお、この項目はなぜかインスタンス作成時には有効化できない。
一度作成後に、EnableLogging
をfalse
からtrue
に変更して、再度terraform apply
しよう。
(前略)
"EnableLogging": true,
"CloudWatchLogGroup": null,
"CloudWatchLogStream": null,
"LogComponents": [
{
"Id": "SOURCE_UNLOAD",
"Severity": "LOGGER_SEVERITY_DEFAULT"
},
{
"Id": "SOURCE_CAPTURE",
"Severity": "LOGGER_SEVERITY_DEFAULT"
},
{
"Id": "TARGET_LOAD",
"Severity": "LOGGER_SEVERITY_DEFAULT"
},
{
"Id": "TARGET_APPLY",
"Severity": "LOGGER_SEVERITY_DEFAULT"
},
{
"Id": "TASK_MANAGER",
"Severity": "LOGGER_SEVERITY_DEFAULT"
}
]
},
(後略)
これでDMSのログが出力できるようになった!