जेफिरनेट लोगो

Amazon OpenSearch Ingestion के लिए टेराफॉर्म समर्थन का परिचय | अमेज़न वेब सेवाएँ

दिनांक:

आज, हम टेराफ़ॉर्म समर्थन लॉन्च कर रहे हैं Amazon OpenSearch अंतर्ग्रहण. टेराफॉर्म एक बुनियादी ढांचा कोड (IaC) उपकरण है जो आपको क्लाउड संसाधनों को कुशलतापूर्वक बनाने, तैनात करने और प्रबंधित करने में मदद करता है। OpenSearch Ingestion एक पूरी तरह से प्रबंधित, सर्वर रहित डेटा संग्राहक है जो वास्तविक समय लॉग, मीट्रिक और ट्रेस डेटा वितरित करता है अमेज़न ओपन सर्च सर्विस डोमेन और Amazon OpenSearch सर्वर रहित संग्रह. इस पोस्ट में, हम बताते हैं कि आप ओपनसर्च अंतर्ग्रहण पाइपलाइनों को तैनात करने के लिए टेराफॉर्म का उपयोग कैसे कर सकते हैं। उदाहरण के तौर पर, हम इनपुट के रूप में एक HTTP स्रोत का उपयोग करते हैं अमेज़न ओपन सर्च सर्विस डोमेन (सूचकांक) आउटपुट के रूप में।

समाधान अवलोकन

इस पोस्ट के चरण टेराफॉर्म के साथ एक सार्वजनिक रूप से सुलभ ओपनसर्च इंजेस्टियन पाइपलाइन को तैनात करते हैं, साथ ही अन्य सहायक संसाधनों के साथ जो पाइपलाइन को अमेज़ॅन ओपनसर्च में डेटा डालने के लिए आवश्यक हैं। हमने इसे लागू कर दिया है ट्यूटोरियल: Amazon OpenSearch Ingestion का उपयोग करके किसी डोमेन में डेटा अंतर्ग्रहण करना, टेराफॉर्म का उपयोग करना।

हम टेराफ़ॉर्म के साथ निम्नलिखित संसाधन बनाते हैं:

आपके द्वारा बनाई गई पाइपलाइन इनपुट के रूप में एक HTTP स्रोत और घटनाओं के बैचों को सहेजने के लिए एक अमेज़ॅन ओपनसर्च सिंक को उजागर करती है।

.. पूर्वापेक्षाएँ

इस पोस्ट में दिए गए चरणों का पालन करने के लिए, आपको निम्नलिखित की आवश्यकता है:

  • एक सक्रिय AWS खाता.
  • आपकी स्थानीय मशीन पर टेराफ़ॉर्म स्थापित किया गया है। अधिक जानकारी के लिए देखें टेराफॉर्म स्थापित करें.
  • टेराफ़ॉर्म का उपयोग करके AWS संसाधन बनाने के लिए आवश्यक IAM अनुमतियाँ।
  • कमांड लाइन के माध्यम से HTTPS अनुरोध भेजने के लिए awscurl एडब्ल्यूएस Sigv4 प्रमाणीकरण. इस उपकरण को स्थापित करने के निर्देशों के लिए, देखें गीथहब रेपो.

एक निर्देशिका बनाएँ

टेराफॉर्म में, बुनियादी ढांचे को कोड के रूप में प्रबंधित किया जाता है, जिसे ए कहा जाता है परियोजना. टेराफ़ॉर्म प्रोजेक्ट में विभिन्न टेराफ़ॉर्म कॉन्फ़िगरेशन फ़ाइलें शामिल होती हैं, जैसे main.tf, provider.tf, variables.tf, तथा output.df . आइए सर्वर या मशीन पर एक निर्देशिका बनाएं जिसका उपयोग हम AWS सेवाओं से कनेक्ट करने के लिए कर सकते हैं AWS कमांड लाइन इंटरफ़ेस (एडब्ल्यूएस सीएलआई):

mkdir osis-pipeline-terraform-example

निर्देशिका में बदलें.

cd osis-pipeline-terraform-example

टेराफॉर्म कॉन्फ़िगरेशन बनाएं

AWS संसाधनों को परिभाषित करने के लिए एक फ़ाइल बनाएँ।

touch main.tf

निम्नलिखित कॉन्फ़िगरेशन दर्ज करें main.tf और अपनी फ़ाइल सहेजें:

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.36"
    }
  }

  required_version = ">= 1.2.0"
}

provider "aws" {
  region = "eu-central-1"
}

data "aws_region" "current" {}
data "aws_caller_identity" "current" {}
locals {
    account_id = data.aws_caller_identity.current.account_id
}

output "ingest_endpoint_url" {
  value = tolist(aws_osis_pipeline.example.ingest_endpoint_urls)[0]
}

resource "aws_iam_role" "example" {
  name = "exampleosisrole"
  assume_role_policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Action = "sts:AssumeRole"
        Effect = "Allow"
        Sid    = ""
        Principal = {
          Service = "osis-pipelines.amazonaws.com"
        }
      },
    ]
  })
}

resource "aws_opensearch_domain" "test" {
  domain_name           = "osi-example-domain"
  engine_version = "OpenSearch_2.7"
  cluster_config {
    instance_type = "r5.large.search"
  }
  encrypt_at_rest {
    enabled = true
  }
  domain_endpoint_options {
    enforce_https       = true
    tls_security_policy = "Policy-Min-TLS-1-2-2019-07"
  }
  node_to_node_encryption {
    enabled = true
  }
  ebs_options {
    ebs_enabled = true
    volume_size = 10
  }
 access_policies = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "${aws_iam_role.example.arn}"
      },
      "Action": "es:*"
    }
  ]
}

EOF

}

resource "aws_iam_policy" "example" {
  name = "osis_role_policy"
  description = "Policy for OSIS pipeline role"
  policy = jsonencode({
    Version = "2012-10-17",
    Statement = [
        {
          Action = ["es:DescribeDomain"]
          Effect = "Allow"
          Resource = "arn:aws:es:${data.aws_region.current.name}:${local.account_id}:domain/*"
        },
        {
          Action = ["es:ESHttp*"]
          Effect = "Allow"
          Resource = "arn:aws:es:${data.aws_region.current.name}:${local.account_id}:domain/osi-test-domain/*"
        }
    ]
})
}

resource "aws_iam_role_policy_attachment" "example" {
  role       = aws_iam_role.example.name
  policy_arn = aws_iam_policy.example.arn
}

resource "aws_cloudwatch_log_group" "example" {
  name = "/aws/vendedlogs/OpenSearchIngestion/example-pipeline"
  retention_in_days = 365
  tags = {
    Name = "AWS Blog OSIS Pipeline Example"
  }
}

resource "aws_osis_pipeline" "example" {
  pipeline_name               = "example-pipeline"
  pipeline_configuration_body = <<-EOT
            version: "2"
            example-pipeline:
              source:
                http:
                  path: "/test_ingestion_path"
              processor:
                - date:
                    from_time_received: true
                    destination: "@timestamp"
              sink:
                - opensearch:
                    hosts: ["https://${aws_opensearch_domain.test.endpoint}"]
                    index: "application_logs"
                    aws:
                      sts_role_arn: "${aws_iam_role.example.arn}"   
                      region: "${data.aws_region.current.name}"
        EOT
  max_units                   = 1
  min_units                   = 1
  log_publishing_options {
    is_logging_enabled = true
    cloudwatch_log_destination {
      log_group = aws_cloudwatch_log_group.example.name
    }
  }
  tags = {
    Name = "AWS Blog OSIS Pipeline Example"
  }
  }

संसाधन बनाएँ

निर्देशिका प्रारंभ करें:

terraform init

यह देखने के लिए योजना की समीक्षा करें कि कौन से संसाधन तैयार किए जाएंगे:

terraform plan

कॉन्फ़िगरेशन लागू करें और उत्तर दें yes योजना चलाने के लिए:

terraform apply

प्रक्रिया को पूरा होने में लगभग 7-10 मिनट लग सकते हैं।

पाइपलाइन का परीक्षण करें

संसाधन बनाने के बाद, आपको यह देखना चाहिए ingest_endpoint_url आउटपुट प्रदर्शित. इस मान को कॉपी करें और इसे अपने पर्यावरण चर में निर्यात करें:

export OSIS_PIPELINE_ENDPOINT_URL=<Replace with value copied>

के साथ एक नमूना लॉग भेजें awscurl. क्रेडेंशियल के लिए प्रोफ़ाइल को अपनी उपयुक्त AWS प्रोफ़ाइल से बदलें:

awscurl --service osis --region eu-central-1 -X POST -H "Content-Type: application/json" -d '[{"time":"2014-08-11T11:40:13+00:00","remote_addr":"122.226.223.69","status":"404","request":"GET http://www.k2proxy.com//hello.html HTTP/1.1","http_user_agent":"Mozilla/4.0 (compatible; WOW64; SLCC2;)"}]' https://$OSIS_PIPELINE_ENDPOINT_URL/test_ingestion_path

आपको प्राप्त करना चाहिए 200 OK प्रतिक्रिया के रूप में.

यह सत्यापित करने के लिए कि डेटा ओपनसर्च इंजेस्टियन पाइपलाइन में डाला गया था और ओपनसर्च में सहेजा गया था, ओपनसर्च पर नेविगेट करें और उसका डोमेन एंडपॉइंट प्राप्त करें। प्रतिस्थापित करें <OPENSEARCH ENDPOINT URL> नीचे दिए गए स्निपेट में और इसे चलाएँ।

awscurl --service es --region eu-central-1 -X GET https://<OPENSEARCH ENDPOINT URL>/application_logs/_search | json_pp 

आपको आउटपुट इस प्रकार देखना चाहिए:

क्लीन अप

आपके द्वारा बनाए गए संसाधनों को नष्ट करने के लिए, निम्न आदेश चलाएँ और उत्तर दें yes जब नौबत आई:

terraform destroy

प्रक्रिया को पूरा होने में लगभग 30-35 मिनट लग सकते हैं।

निष्कर्ष

इस पोस्ट में, हमने दिखाया कि आप ओपनसर्च अंतर्ग्रहण पाइपलाइनों को तैनात करने के लिए टेराफॉर्म का उपयोग कैसे कर सकते हैं। AWS विभिन्न ऑफर करता है संसाधन आपके लिए OpenSearch Ingestion का उपयोग करके शीघ्रता से पाइपलाइन बनाना शुरू करना और उन्हें तैनात करने के लिए टेराफ़ॉर्म का उपयोग करना। आप विभिन्न अंतर्निर्मित का उपयोग कर सकते हैं पाइपलाइन एकीकरण से डेटा शीघ्रता से ग्रहण करने के लिए अमेज़ॅन डायनेमोडीबी, Apache Kafka के लिए Amazon प्रबंधित स्ट्रीमिंग (अमेज़ॅन एमएसके), अमेज़न सुरक्षा झील, फ्लुएंट बिट, और भी बहुत कुछ। निम्नलिखित ओपनसर्च अंतर्ग्रहण ब्लूप्रिंट आपको न्यूनतम कॉन्फ़िगरेशन परिवर्तनों के साथ डेटा पाइपलाइन बनाने और टेराफ़ॉर्म का उपयोग करके आसानी से प्रबंधित करने की अनुमति देता है। अधिक जानने के लिए, इसे देखें टेराफ़ॉर्म दस्तावेज़ीकरण अमेज़ॅन ओपनसर्च अंतर्ग्रहण के लिए।


लेखक के बारे में

राहुल शर्मा अमेज़ॅन वेब सर्विसेज में एक तकनीकी खाता प्रबंधक है। वह डेटा प्रौद्योगिकियों के बारे में भावुक हैं जो रणनीतिक संपत्ति के रूप में डेटा का लाभ उठाने में मदद करते हैं और वह न्यूयॉर्क शहर, न्यूयॉर्क में स्थित हैं।

फरहान एंगुलिया सिंगापुर स्थित AWS प्रोफेशनल सर्विसेज में क्लाउड एप्लिकेशन आर्किटेक्ट हैं। वह मुख्य रूप से माइक्रोसर्विस सॉफ्टवेयर पैटर्न के साथ आधुनिक अनुप्रयोगों पर ध्यान केंद्रित करते हैं, और ग्राहकों के लिए सॉफ्टवेयर डिलीवरी जीवनचक्र को अनुकूलित करने के लिए मजबूत सीआई/सीडी प्रथाओं को लागू करने की वकालत करते हैं। उन्हें अपने खाली समय में ओपन सोर्स टेराफॉर्म इकोसिस्टम में योगदान करना अच्छा लगता है।

अर्जुन नांबियार अमेज़ॅन ओपनसर्च सेवा के साथ एक उत्पाद प्रबंधक है। वह अंतर्ग्रहण प्रौद्योगिकियों पर ध्यान केंद्रित करता है जो विभिन्न प्रकार के स्रोतों से डेटा को बड़े पैमाने पर अमेज़ॅन ओपनसर्च सेवा में अंतर्ग्रहण करने में सक्षम बनाता है। अर्जुन की रुचि बड़े पैमाने पर वितरित प्रणालियों और क्लाउड-नेटिव प्रौद्योगिकियों में है और वह सिएटल, वाशिंगटन में स्थित है।

मुथु पिचाईमनी Amazon OpenSearch सेवा के साथ एक खोज विशेषज्ञ हैं। वह बड़े पैमाने पर खोज एप्लिकेशन और समाधान बनाता है। मुथु नेटवर्किंग और सुरक्षा के विषयों में रुचि रखते हैं, और ऑस्टिन, टेक्सास में रहते हैं।

स्पॉट_आईएमजी

नवीनतम खुफिया

स्पॉट_आईएमजी