Terraform 0.11

aws_cloudwatch_event_target




terraform

aws_cloudwatch_event_target

CloudWatch इवेंट लक्ष्य संसाधन प्रदान करता है।

उदाहरण उपयोग

resource "aws_cloudwatch_event_target" "yada" {
  target_id = "Yada"
  rule      = "${aws_cloudwatch_event_rule.console.name}"
  arn       = "${aws_kinesis_stream.test_stream.arn}"

  run_command_targets {
    key = "tag:Name"
    values = ["FooBar"]
  }

  run_command_targets {
    key = "InstanceIds"
    values = ["i-162058cd308bffec2"]
  }
}

resource "aws_cloudwatch_event_rule" "console" {
  name        = "capture-ec2-scaling-events"
  description = "Capture all EC2 scaling events"

  event_pattern = <<PATTERN
{
  "source": [
    "aws.autoscaling"
  ],
  "detail-type": [
    "EC2 Instance Launch Successful",
    "EC2 Instance Terminate Successful",
    "EC2 Instance Launch Unsuccessful",
    "EC2 Instance Terminate Unsuccessful"
  ]
}
PATTERN
}

resource "aws_kinesis_stream" "test_stream" {
  name        = "terraform-kinesis-test"
  shard_count = 1
}

उदाहरण एसएसएम दस्तावेज़ उपयोग

data "aws_iam_policy_document" "ssm_lifecycle_trust" {
  statement {
    actions = ["sts:AssumeRole"]

    principals {
      type        = "Service"
      identifiers = ["events.amazonaws.com"]
    }
  }
}

data "aws_iam_policy_document" "ssm_lifecycle" {
  statement {
    effect    = "Allow"
    actions   = ["ssm:SendCommand"]
    resources = ["arn:aws:ec2:eu-west-1:1234567890:instance/*"]

    condition {
      test     = "StringEquals"
      variable = "ec2:ResourceTag/Terminate"
      values   = ["*"]
    }
  }

  statement {
    effect    = "Allow"
    actions   = ["ssm:SendCommand"]
    resources = ["${aws_ssm_document.stop_instance.arn}"]
  }
}

resource "aws_iam_role" "ssm_lifecycle" {
  name               = "SSMLifecycle"
  assume_role_policy = "${data.aws_iam_policy_document.ssm_lifecycle_trust.json}"
}

resource "aws_iam_policy" "ssm_lifecycle" {
  name   = "SSMLifecycle"
  policy = "${data.aws_iam_policy_document.ssm_lifecycle.json}"
}

resource "aws_ssm_document" "stop_instance" {
  name          = "stop_instance"
  document_type = "Command"

  content = <<DOC
  {
    "schemaVersion": "1.2",
    "description": "Stop an instance",
    "parameters": {

    },
    "runtimeConfig": {
      "aws:runShellScript": {
        "properties": [
          {
            "id": "0.aws:runShellScript",
            "runCommand": ["halt"]
          }
        ]
      }
    }
  }
DOC
}

resource "aws_cloudwatch_event_rule" "stop_instances" {
  name                = "StopInstance"
  description         = "Stop instances nightly"
  schedule_expression = "cron(0 0 * * ? *)"
}

resource "aws_cloudwatch_event_target" "stop_instances" {
  target_id = "StopInstance"
  arn       = "${aws_ssm_document.stop_instance.arn}"
  rule      = "${aws_cloudwatch_event_rule.stop_instances.name}"
  role_arn  = "${aws_iam_role.ssm_lifecycle.arn}"

  run_command_targets {
    key    = "tag:Terminate"
    values = ["midnight"]
  }
}

उदाहरण RunCommand उपयोग

resource "aws_cloudwatch_event_rule" "stop_instances" {
  name                = "StopInstance"
  description         = "Stop instances nightly"
  schedule_expression = "cron(0 0 * * ? *)"
}

resource "aws_cloudwatch_event_target" "stop_instances" {
  target_id = "StopInstance"
  arn       = "arn:aws:ssm:${var.aws_region}::document/AWS-RunShellScript"
  input     = "{\"commands\":[\"halt\"]}"
  rule      = "${aws_cloudwatch_event_rule.stop_instances.name}"
  role_arn  = "${aws_iam_role.ssm_lifecycle.arn}"

  run_command_targets {
    key    = "tag:Terminate"
    values = ["midnight"]
  }
}

उदाहरण ईसीएस रन टास्क विथ रोल एंड टास्क ओवरराइड यूज़

resource "aws_iam_role" "ecs_events" {
  name = "ecs_events"
  assume_role_policy = <<DOC
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "events.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
DOC
}

resource "aws_iam_role_policy" "ecs_events_run_task_with_any_role" {
  name = "ecs_events_run_task_with_any_role"
  role = "${aws_iam_role.ecs_events.id}"
  policy = <<DOC
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "ecs:RunTask",
            "Resource": "${replace(aws_ecs_task_definition.task_name.arn, "/:\\d+$/", ":*")}"
        }
    ]
}
DOC
}

resource "aws_cloudwatch_event_target" "ecs_scheduled_task" {
  target_id = "run-scheduled-task-every-hour"
  arn       = "${aws_ecs_cluster.cluster_name.arn}"
  rule      = "${aws_cloudwatch_event_rule.every_hour.name}"
  role_arn  = "${aws_iam_role.ecs_events.arn}"

  ecs_target = {
    task_count = 1
    task_definition_arn = "${aws_ecs_task_definition.task_name.arn}"
  }

  input = <<DOC
{
  "containerOverrides": [
    {
      "name": "name-of-container-to-override",
      "command": ["bin/console", "scheduled-task"]
    }
  ]
}
DOC
}

तर्क संदर्भ

निम्नलिखित तर्क समर्थित हैं:

  • rule - (आवश्यक) उस नियम का नाम जिसे आप लक्ष्य जोड़ना चाहते हैं।
  • target_id - (वैकल्पिक) अद्वितीय लक्ष्य असाइनमेंट ID। यदि गायब है, एक यादृच्छिक, अद्वितीय आईडी उत्पन्न करेगा।
  • arn - (आवश्यक) लक्ष्य से संबंधित अमेज़ॅन संसाधन नाम (ARN)।
  • input - (वैकल्पिक) मान्य JSON पाठ लक्ष्य के लिए दिया गया।
  • input_path - (वैकल्पिक) JSONPath वह मूल्य जो इसे लक्ष्य पर पास करते समय मिलान किए गए ईवेंट का हिस्सा निकालने के लिए उपयोग किया जाता है।
  • role_arn - (वैकल्पिक) IAM भूमिका के अमेज़ॅन संसाधन नाम (ARN) का उपयोग इस लक्ष्य के लिए किया जाता है जब नियम ट्रिगर किया जाता है। आवश्यक है अगर ecs_target का उपयोग किया जाता है।
  • run_command_targets - (वैकल्पिक) पैरामीटर का उपयोग तब किया जाता है जब आप अमेज़न EC2 रन कमांड को लागू करने के लिए नियम का उपयोग कर रहे होते हैं। नीचे प्रलेखित है। अधिकतम 5 की अनुमति है।
  • ecs_target - (वैकल्पिक) पैरामीटर का उपयोग तब किया जाता है जब आप अमेज़न ईसीएस टास्क को लागू करने के लिए नियम का उपयोग कर रहे हैं। नीचे प्रलेखित है। अधिकतम 1 की अनुमति है।
  • batch_target - (वैकल्पिक) अमेज़ॅन बैच जॉब को लागू करने के लिए आप नियम का उपयोग कर रहे हैं। नीचे प्रलेखित है। अधिकतम 1 की अनुमति है।
  • kinesis_target - (वैकल्पिक) जब आप Amazon Kinesis स्ट्रीम का उपयोग करने के लिए नियम का उपयोग कर रहे हैं तो पैरामीटर का उपयोग किया जाता है। नीचे प्रलेखित है। अधिकतम 1 की अनुमति है।
  • sqs_target - (वैकल्पिक) पैरामीटर का उपयोग तब किया जाता है जब आप अमेज़न SQS कतार को लागू करने के लिए नियम का उपयोग कर रहे होते हैं। नीचे प्रलेखित है। अधिकतम 1 की अनुमति है।
  • input_transformer - (वैकल्पिक) पैरामीटर का उपयोग तब किया जाता है जब आप किसी निश्चित ईवेंट डेटा के आधार पर किसी लक्ष्य को कस्टम इनपुट प्रदान कर रहे हों।

run_command_targets निम्नलिखित का समर्थन करता है:

  • key - (आवश्यक) tag:tag-key या तो हो सकता है tag:tag-key या InstanceIds
  • values - (आवश्यक) यदि कुंजी tag:tag-key , मान टैग मूल्यों की एक सूची है। अगर Key InstanceIds , तो Values ​​Amazon EC2 इंस्टेंस ID की एक सूची है।

ecs_target निम्नलिखित का समर्थन करता है:

  • task_count - (वैकल्पिक) टास्क डिफाइनमेंट के आधार पर बनाने के लिए कार्यों की संख्या। डिफ़ॉल्ट 1 है।
  • task_definition_arn - (आवश्यक) यदि इवेंट लक्ष्य एक अमेज़न ECS क्लस्टर है, तो उपयोग करने के लिए कार्य परिभाषा का ARN।

batch_target निम्नलिखित का समर्थन करता है:

  • job_definition - (आवश्यक) यदि इवेंट टारगेट AWS बैच है तो ARN या नौकरी की परिभाषा का नाम। इस नौकरी की परिभाषा पहले से मौजूद होनी चाहिए।
  • job_name - (आवश्यक) नौकरी के इस निष्पादन के लिए उपयोग होने वाला नाम, यदि लक्ष्य AWS बैच की नौकरी है।
  • array_size - (वैकल्पिक) सरणी का आकार, यदि यह एक सरणी बैच कार्य है। मान्य मान 2 और 10,000 के बीच पूर्णांक हैं।
  • job_attempts - (वैकल्पिक) यदि नौकरी विफल हो जाती है, तो फिर से प्रयास करने की संख्या। मान्य मान 1 से 10 हैं।

kinesis_target निम्नलिखित का समर्थन करता है:

  • partition_key_path - (वैकल्पिक) घटना से निकाले जाने वाले JSON पथ और विभाजन कुंजी के रूप में उपयोग किया जाता है।

sqs_target निम्नलिखित का समर्थन करता है:

  • message_group_id - (वैकल्पिक) लक्ष्य के रूप में उपयोग करने के लिए FIFO संदेश समूह ID।

input_transformer निम्नलिखित का समर्थन करता है:

  • input_paths - (वैकल्पिक) JSONPath के रूप में निर्दिष्ट मुख्य मूल्य जोड़े (उदाहरण के लिए, समय = $।)
  • input_template - (आवश्यक) टेम्पलेट निकाय युक्त संरचना।