solution/solution-log-audit-using-sls/step2-delivery-to-central-logarchive/main.tf (141 lines of code) (raw):

provider "alicloud" { region = var.logarchive_central_region } # assume role to account provider "alicloud" { alias = "delivery" region = var.delivery_region assume_role { role_arn = format("acs:ram::%s:role/ResourceDirectoryAccountAccessRole", var.delivery_account_id) session_name = "WellArchitectedSolutionSetup" session_expiration = 999 } } provider "alicloud" { alias = "logarchive" region = var.logarchive_central_region assume_role { role_arn = format("acs:ram::%s:role/ResourceDirectoryAccountAccessRole", var.logarchive_account_id) session_name = "WellArchitectedSolutionSetup" session_expiration = 999 } } # create ram role for delivery account module "delivery_ram_role" { source = "../modules/ram-role" providers = { alicloud = alicloud.delivery } role_name = format("%slogaudit-data-transformation-role", var.delivery_ram_name_prefix) role_document = <<EOF { "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "log.aliyuncs.com" ] } } ], "Version": "1" } EOF policy_name = format("%slogaudit-data-transformation-policy", var.delivery_ram_name_prefix) policy_document = <<EOF { "Version": "1", "Statement": [ { "Action": [ "log:ListShards", "log:GetCursorOrData", "log:GetConsumerGroupCheckPoint", "log:UpdateConsumerGroup", "log:ConsumerGroupHeartBeat", "log:ConsumerGroupUpdateCheckPoint", "log:ListConsumerGroup", "log:CreateConsumerGroup" ], "Resource": [ "acs:log:*:*:project/${var.delivery_sls_project}/logstore/${var.delivery_sls_logstore}", "acs:log:*:*:project/${var.delivery_sls_project}/logstore/${var.delivery_sls_logstore}/*" ], "Effect": "Allow" } ] } EOF } module "logarchive_ram_role" { source = "../modules/ram-role" count = try(var.is_logarchive_ram_role_existed, false) == true ? 0 : 1 providers = { alicloud = alicloud.logarchive } role_name = var.logarchive_ram_role_name role_document = <<EOF { "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "${var.delivery_account_id}@log.aliyuncs.com" ] } } ], "Version": "1" } EOF policy_name = format("%s-policy", var.logarchive_ram_role_name) policy_document = <<EOF { "Version": "1", "Statement": [ { "Action": [ "log:Post*", "log:BatchPost*" ], "Resource": "acs:log:*:*:project/${var.central_sls_project}/logstore/${var.central_sls_logstore_name}", "Effect": "Allow" } ] } EOF } resource "alicloud_log_store" "logarchive" { count = try(var.is_central_sls_logstore_existed, false) == true ? 0 : 1 provider = alicloud.logarchive auto_split = true max_split_shard_count = 64 name = var.central_sls_logstore_name project = var.central_sls_project retention_period = 180 shard_count = 2 hot_ttl = 30 } # create data transformation resource "alicloud_log_etl" "delivery" { provider = alicloud.delivery etl_name = "delivery-to-central-logarchive" project = var.delivery_sls_project display_name = "delivery-to-central-logarchive" logstore = var.delivery_sls_logstore role_arn = format("acs:ram::%s:role/%s", var.delivery_account_id, format("%slogaudit-data-transformation-role", var.delivery_ram_name_prefix)) script = "" etl_sinks { name = "central-logarchive" project = var.central_sls_project logstore = var.central_sls_logstore_name role_arn = format("acs:ram::%s:role/%s", var.logarchive_account_id, var.logarchive_ram_role_name) endpoint = format("https://%s.log.aliyuncs.com", var.logarchive_central_region) } depends_on = [ module.delivery_ram_role, module.logarchive_ram_role, alicloud_log_store.logarchive ] }