1

私は現在、サーバの正常性状態を検出するAWS CloudWatchアラームを設定しています。Terraformです。健康状態は、AWS Route 53 Health Checkでチェックされます。私.tfファイルは次のとおりです。Terraformを使用してAWS CloudWatchアラームをAWS Route53ヘルスチェックにリンクする方法は?

resource "aws_cloudwatch_metric_alarm" "val1-alarm" { 
    alarm_name = "val-alarm" 
    comparison_operator = "LessThanOrEqualToThreshold" 
    evaluation_periods = "2" 
    metric_name = "HealthCheckStatus" 
    namespace = "AWS/Route53" 
    period = "60" 
    statistic = "Minimum" 
    threshold = "0" 
    dimensions { 
    HealthCheckId = "${aws_route53_health_check.val1-hc.id}" 
    } 
    alarm_description = "This metric monitor whether the server is down or not." 
    insufficient_data_actions = [] 
} 

resource "aws_route53_health_check" "val1-hc" { 
    fqdn = "${aws_route53_record.val1-record.name}" 
    port = 27017 
    type = "TCP" 
    failure_threshold = "3" 
    request_interval = "30" 
    measure_latency = 1 
    cloudwatch_alarm_name = "${aws_cloudwatch_metric_alarm.val1-alarm.alarm_name}" 
    cloudwatch_alarm_region = "eu-central-1" 
} 

適用するとき、私はこのエラーを持っている:

Cycle: aws_route53_health_check.val1-hc, aws_cloudwatch_metric_alarm.val1-alarm 

サイクルは、各リソースが他のを呼び出すことを意味します。ヘルスチェックからcloudwatch_alarm_namecloudwatch_alarm_regionを削除しようとすると、これらの2つの引数が必要であることを示すテーラフォームエラーが表示されます(ただし、docはこれらの2つがオプションであると指定しています)。 これを修正するには?

ご協力いただきありがとうございます。

+0

これは今テラフォーム・プロバイダのプロジェクトで開いて問題です - > https://github.com/terraform-providers/terraform-provider -aws/issues/712 – aimless

答えて

1

AからBおよびBからAまでは参照できません。

aws_cloudwatch_metric_alarm.val1-alarmなどから参照を削除:テラフォーム0.9.3オン

resource "aws_cloudwatch_metric_alarm" "val1-alarm" { 
    alarm_name = "val-alarm" 
    comparison_operator = "LessThanOrEqualToThreshold" 
    evaluation_periods = "2" 
    metric_name = "HealthCheckStatus" 
    namespace = "AWS/Route53" 
    period = "60" 
    statistic = "Minimum" 
    threshold = "0" 
    alarm_description = "This metric monitor whether the server is down or not." 
    insufficient_data_actions = [] 
} 

resource "aws_route53_health_check" "val1-hc" { 
    fqdn = "${aws_route53_record.val1-record.name}" 
    port = 27017 
    type = "TCP" 
    failure_threshold = "3" 
    request_interval = "30" 
    measure_latency = 1 
    cloudwatch_alarm_name = "${aws_cloudwatch_metric_alarm.val1-alarm.alarm_name}" 
    cloudwatch_alarm_region = "eu-central-1" 
} 

See CloudWatch Alarm Example from here

+0

私はOPと同じ問題を抱えていましたが、上記の提案は私のためには機能しませんでしたが、Route53ヘルスチェックダッシュボードには "No alarms configured"と表示されます。何か案は? – DuffJ

1

、私はアラームを接続するために取得するために反対をして、aws_route53_health_checkリソースからcloudwatch_alarm_nameとcloudwatch_alarm_regionを削除する必要がありましたヘルスチェック。それは後方に感じた。 HealthCheckIdディメンションは、それらを結び付けるのに十分な大きさでした。

resource "aws_cloudwatch_metric_alarm" "val1-alarm" { 
    alarm_name = "val-alarm" 
    comparison_operator = "LessThanOrEqualToThreshold" 
    evaluation_periods = "2" 
    metric_name = "HealthCheckStatus" 
    namespace = "AWS/Route53" 
    period = "60" 
    statistic = "Minimum" 
    threshold = "0" 
    dimensions { 
    HealthCheckId = "${aws_route53_health_check.val1-hc.id}" 
    } 
    alarm_description = "This metric monitor whether the server is down or not." 
    insufficient_data_actions = [] 
} 

resource "aws_route53_health_check" "val1-hc" { 
    fqdn = "${aws_route53_record.val1-record.name}" 
    port = 27017 
    type = "TCP" 
    failure_threshold = "3" 
    request_interval = "30" 
    measure_latency = 1 
} 
+0

あなたは 'aws_route53_health_check.val1-hc'リソースに' cloudwatch_alarm_name'と 'cloudwatch_alarm_region'をまだ持っています。 – vikas027

+0

ありがとう、@ vikas027!私はコードの書式設定に集中しているので、コードを編集するのを忘れました! :) –

+0

これは問題ありませんが、このコードは実際にあなたのために働いていますか?他のリソースもあります。それは私から期待どおりに動作していません。 [this](https://github.com/hashicorp/terraform/issues/13895)を参照してください。 – vikas027

1

ないあなたがいるので米国東部(N.バージニア州)であなたのリソースを持っている必要があること:あなたが現在のように、他の 地域を選択した場合

アマゾンルート53のメトリックが利用できません領域。

出所:Monitoring Health Check Status and Getting Notifications

私はそれがこのモジュールでeu-west-1で動作させるために管理:

variable "environment" {} 
variable "domain_name" {} 
variable "resource_path" {} 

provider "aws" { 
    alias = "use1" 
    region = "us-east-1" 
} 

resource "aws_route53_health_check" "health_check" { 
    fqdn    = "${var.domain_name}" 
    port    = 443 
    type    = "HTTPS" 
    resource_path  = "${var.resource_path}" 
    measure_latency = true 
    request_interval = 30 
    failure_threshold = 3 

    tags = { 
    Name  = "${var.environment}" 
    Origin  = "terraform" 
    Environment = "${var.environment}" 
    } 
} 

resource "aws_sns_topic" "topic" { 
    name  = "${var.environment}-healthcheck" 
    provider = "aws.use1" 
} 

resource "aws_cloudwatch_metric_alarm" "metric_alarm" { 
    provider     = "aws.use1" 
    alarm_name    = "${var.environment}-alarm-health-check" 
    comparison_operator  = "LessThanThreshold" 
    evaluation_periods  = "1" 
    metric_name    = "HealthCheckStatus" 
    namespace     = "AWS/Route53" 
    period     = "60" 
    statistic     = "Minimum" 
    threshold     = "1" 
    insufficient_data_actions = [] 
    alarm_actions    = ["${aws_sns_topic.topic.arn}"] 
    alarm_description   = "Send an alarm if ${var.environment} is down" 

    dimensions { 
    HealthCheckId = "${aws_route53_health_check.health_check.id}" 
    } 
} 
関連する問題