Zephyrnet-Logo

Einführung der Terraform-Unterstützung für Amazon OpenSearch Ingestion | Amazon Web Services

Datum:

Heute starten wir die Terraform-Unterstützung für Amazon OpenSearch-Aufnahme. Terraform ist ein Infrastructure-as-Code (IaC)-Tool, mit dem Sie Cloud-Ressourcen effizient erstellen, bereitstellen und verwalten können. OpenSearch Ingestion ist ein vollständig verwalteter, serverloser Datensammler, der Protokoll-, Metrik- und Trace-Daten in Echtzeit liefert Amazon OpenSearch-Dienst Domänen und Amazon OpenSearch ohne Server Sammlungen. In diesem Beitrag erklären wir, wie Sie Terraform zum Bereitstellen von OpenSearch-Ingestion-Pipelines verwenden können. Als Beispiel verwenden wir eine HTTP-Quelle als Eingabe und eine Amazon OpenSearch-Dienst Domäne (Index) als Ausgabe.

Lösungsüberblick

Die Schritte in diesem Beitrag stellen eine öffentlich zugängliche OpenSearch-Ingestion-Pipeline mit Terraform bereit, zusammen mit anderen unterstützenden Ressourcen, die für die Pipeline zur Datenaufnahme in Amazon OpenSearch erforderlich sind. Wir haben das implementiert Tutorial: Daten in eine Domäne mit Amazon OpenSearch Ingestion aufnehmen, mit Terraform.

Wir erstellen mit Terraform folgende Ressourcen:

Die von Ihnen erstellte Pipeline stellt eine HTTP-Quelle als Eingabe und eine Amazon OpenSearch-Senke zum Speichern von Ereignisstapeln bereit.

Voraussetzungen:

Um die Schritte in diesem Beitrag auszuführen, benötigen Sie Folgendes:

  • Ein aktives AWS-Konto.
  • Terraform auf Ihrem lokalen Computer installiert. Weitere Informationen finden Sie unter Installieren Sie Terraform.
  • Die erforderlichen IAM-Berechtigungen zum Erstellen der AWS-Ressourcen mithilfe von Terraform.
  • awscurl zum Senden von HTTPS-Anfragen über die Befehlszeile mit AWS Sigv4 Authentifizierung. Anweisungen zur Installation dieses Tools finden Sie im GitHub Repo.

Erstellen Sie ein Verzeichnis

In Terraform wird die Infrastruktur als Code verwaltet, der als a bezeichnet wird Projekt. Ein Terraform-Projekt enthält verschiedene Terraform-Konfigurationsdateien, wie z main.tf, provider.tf, variables.tf und output.df . Erstellen wir ein Verzeichnis auf dem Server oder Computer, mit dem wir mithilfe von eine Verbindung zu AWS-Diensten herstellen können AWS-Befehlszeilenschnittstelle (AWS-CLI):

mkdir osis-pipeline-terraform-example

Wechseln Sie in das Verzeichnis.

cd osis-pipeline-terraform-example

Erstellen Sie die Terraform-Konfiguration

Erstellen Sie eine Datei, um die AWS-Ressourcen zu definieren.

touch main.tf

Geben Sie die folgende Konfiguration ein main.tf und speichern Sie Ihre Datei:

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"
  }
  }

Erstellen Sie die Ressourcen

Initialisieren Sie das Verzeichnis:

terraform init

Überprüfen Sie den Plan, um zu sehen, welche Ressourcen erstellt werden:

terraform plan

Wenden Sie die Konfiguration an und antworten Sie yes Um den Plan auszuführen:

terraform apply

Der Vorgang kann etwa 7–10 Minuten dauern.

Testen Sie die Pipeline

Nachdem Sie die Ressourcen erstellt haben, sollten Sie Folgendes sehen: ingest_endpoint_url Ausgabe angezeigt. Kopieren Sie diesen Wert und exportieren Sie ihn in Ihre Umgebungsvariable:

export OSIS_PIPELINE_ENDPOINT_URL=<Replace with value copied>

Senden Sie ein Beispielprotokoll mit awscurl. Ersetzen Sie das Profil durch Ihr entsprechendes AWS-Profil für Anmeldeinformationen:

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

Sie sollten a . erhalten 200 OK als Antwort.

Um zu überprüfen, ob die Daten in der OpenSearch-Ingestion-Pipeline aufgenommen und in OpenSearch gespeichert wurden, navigieren Sie zu OpenSearch und rufen Sie dessen Domänenendpunkt ab. Ersetze das <OPENSEARCH ENDPOINT URL> in den unten angegebenen Ausschnitt ein und führen Sie ihn aus.

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

Sie sollten die Ausgabe wie folgt sehen:

Aufräumen

Um die von Ihnen erstellten Ressourcen zu zerstören, führen Sie den folgenden Befehl und die folgende Antwort aus yes bei Aufforderung:

terraform destroy

Der Vorgang kann etwa 30–35 Minuten dauern.

Zusammenfassung

In diesem Beitrag haben wir gezeigt, wie Sie Terraform zum Bereitstellen von OpenSearch-Ingestion-Pipelines verwenden können. AWS bietet verschiedene RESSOURCEN damit Sie schnell mit dem Aufbau von Pipelines mithilfe von OpenSearch Ingestion beginnen und diese mithilfe von Terraform bereitstellen können. Sie können verschiedene integrierte Funktionen verwenden Pipeline-Integrationen um schnell Daten aufzunehmen Amazon DynamoDB, Amazon Managed Streaming für Apache Kafka (Amazon MSK), Amazon Security Lake, Fluent Bit und viele mehr. Die folgende OpenSearch-Aufnahme Blaupausen ermöglichen Ihnen den Aufbau von Datenpipelines mit minimalen Konfigurationsänderungen und deren einfache Verwaltung mit Terraform. Um mehr zu erfahren, schauen Sie sich die an Terraform-Dokumentation für Amazon OpenSearch Ingestion.


Über die Autoren

Rahul Sharma ist Technical Account Manager bei Amazon Web Services. Er ist begeistert von den Datentechnologien, die dabei helfen, Daten als strategisches Gut zu nutzen, und hat seinen Sitz in New York City, New York.

Farhan Angullia ist Cloud Application Architect bei AWS Professional Services mit Sitz in Singapur. Er konzentriert sich hauptsächlich auf moderne Anwendungen mit Microservice-Softwaremustern und plädiert für die Implementierung robuster CI/CD-Praktiken, um den Softwarebereitstellungslebenszyklus für Kunden zu optimieren. In seiner Freizeit trägt er gerne zum Open-Source-Terraform-Ökosystem bei.

Arjun Nambiar ist Produktmanager bei Amazon OpenSearch Service. Er konzentriert sich auf Aufnahmetechnologien, die die Aufnahme von Daten aus einer Vielzahl von Quellen in großem Maßstab in den Amazon OpenSearch Service ermöglichen. Arjun interessiert sich für groß angelegte verteilte Systeme und Cloud-native Technologien und hat seinen Sitz in Seattle, Washington.

Muthu Pitchaimani ist ein Suchspezialist bei Amazon OpenSearch Service. Er baut umfangreiche Suchanwendungen und -lösungen. Muthu interessiert sich für die Themen Netzwerke und Sicherheit und hat seinen Sitz in Austin, Texas.

spot_img

Neueste Intelligenz

spot_img