Zephyrnet Logosu

Amazon OpenSearch Ingestion için Terraform desteğiyle tanışın | Amazon Web Hizmetleri

Tarih:

Bugün Terraform desteğini başlatıyoruz. Amazon Açık Arama Alımı. Terraform, bulut kaynaklarını verimli bir şekilde oluşturmanıza, dağıtmanıza ve yönetmenize yardımcı olan bir kod olarak altyapı (IaC) aracıdır. OpenSearch Ingestion, gerçek zamanlı günlük, ölçüm ve izleme verileri sağlayan, tam olarak yönetilen, sunucusuz bir veri toplayıcıdır. Amazon Açık Arama Hizmeti etki alanları ve Amazon OpenSearch Sunucusuz koleksiyonlar. Bu yazıda, OpenSearch Ingestion işlem hatlarını dağıtmak için Terraform'u nasıl kullanabileceğinizi açıklıyoruz. Örnek olarak, girdi olarak bir HTTP kaynağı kullanıyoruz ve Amazon Açık Arama Hizmeti çıktı olarak etki alanı (Dizin).

Çözüme genel bakış

Bu gönderideki adımlar, Terraform ile genel erişime açık bir OpenSearch Ingestion işlem hattının yanı sıra işlem hattının Amazon OpenSearch'e veri alması için gereken diğer destekleyici kaynakları dağıtır. Biz uyguladık Öğretici: Amazon OpenSearch Ingestion'ı kullanarak verileri bir etki alanına almaTerraform'u kullanarak.

Terraform ile aşağıdaki kaynakları oluşturuyoruz:

Oluşturduğunuz ardışık düzen, giriş olarak bir HTTP kaynağını ve olay gruplarını kaydetmek için bir Amazon OpenSearch havuzunu ortaya çıkarır.

Önkoşullar

Bu yazıdaki adımları takip etmek için aşağıdakilere ihtiyacınız vardır:

  • Etkin bir AWS hesabı.
  • Yerel makinenizde Terraform yüklü. Daha fazla bilgi için bakınız Terraform'u yükleyin.
  • Terraform'u kullanarak AWS kaynaklarını oluşturmak için gerekli IAM izinleri.
  • awscurl ile komut satırı üzerinden HTTPS isteklerini göndermek için AWS Sigv4 kimlik doğrulama. Bu aracın kurulumuna ilişkin talimatlar için bkz. GitHub repo.

Bir dizin oluşturun

Terraform'da altyapı kod adı verilen kodla yönetilir. proje. Bir Terraform projesi aşağıdakiler gibi çeşitli Terraform yapılandırma dosyalarını içerir: main.tf, provider.tf, variables.tf, ve output.df . Sunucu veya makine üzerinde AWS servislerine bağlanmak için kullanabileceğimiz bir dizin oluşturalım. AWS Komut Satırı Arayüzü (AWS CLI):

mkdir osis-pipeline-terraform-example

Dizine geçin.

cd osis-pipeline-terraform-example

Terraform yapılandırmasını oluşturun

AWS kaynaklarını tanımlamak için bir dosya oluşturun.

touch main.tf

Aşağıdaki yapılandırmayı girin main.tf ve dosyanızı kaydedin:

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

Kaynakları oluşturun

Dizini başlat:

terraform init

Hangi kaynakların oluşturulacağını görmek için planı inceleyin:

terraform plan

Yapılandırmayı uygulayın ve yanıtlayın yes planı çalıştırmak için:

terraform apply

İşlemin tamamlanması yaklaşık 7-10 dakika sürebilir.

Boru hattını test edin

Kaynakları oluşturduktan sonra şunu görmelisiniz: ingest_endpoint_url çıktı görüntülenir. Bu değeri kopyalayın ve ortam değişkeninize aktarın:

export OSIS_PIPELINE_ENDPOINT_URL=<Replace with value copied>

Örnek bir günlük gönder awscurl. Kimlik bilgileri için profili uygun AWS profilinizle değiştirin:

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

almalısın 200 OK bir cevap olarak.

Verilerin OpenSearch Ingestion kanalına alındığını ve OpenSearch'e kaydedildiğini doğrulamak için OpenSearch'e gidin ve etki alanı uç noktasını alın. Değiştir <OPENSEARCH ENDPOINT URL> aşağıda verilen pasajda ve çalıştırın.

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

Çıktıyı aşağıdaki gibi görmelisiniz:

Temizlemek

Oluşturduğunuz kaynakları yok etmek için aşağıdaki komutu çalıştırın ve yanıtlayın yes istendiğinde:

terraform destroy

İşlemin tamamlanması yaklaşık 30-35 dakika sürebilir.

Sonuç

Bu yazıda, OpenSearch Ingestion işlem hatlarını dağıtmak için Terraform'u nasıl kullanabileceğinizi gösterdik. AWS çeşitli seçenekler sunar kaynaklar OpenSearch Ingestion'ı kullanarak işlem hatları oluşturmaya hızlı bir şekilde başlamanız ve bunları dağıtmak için Terraform'u kullanmanız için. Çeşitli yerleşikleri kullanabilirsiniz boru hattı entegrasyonları verileri hızlı bir şekilde almak için Amazon DinamoDB, Apache Kafka için Amazon Tarafından Yönetilen Akış (Amazon MSK), Amazon Güvenlik Gölü, Fluent Bit ve çok daha fazlası. Aşağıdaki OpenSearch Beslemesi planları Minimum yapılandırma değişikliğiyle veri işlem hatları oluşturmanıza ve bunları Terraform'u kullanarak kolaylıkla yönetmenize olanak tanır. Daha fazla bilgi edinmek için şuraya göz atın: Terraform belgeleri Amazon OpenSearch Beslemesi için.


Yazarlar Hakkında

Rahul Sharma Amazon Web Services'te Teknik Hesap Yöneticisidir. Verilerin stratejik bir varlık olarak kullanılmasına yardımcı olan veri teknolojileri konusunda tutkuludur ve New York City, New York'ta yerleşiktir.

Farhan Angullia Singapur merkezli AWS Profesyonel Hizmetler'de Bulut Uygulama Mimarıdır. Öncelikle mikro hizmet yazılım modellerine sahip modern uygulamalara odaklanmakta ve müşteriler için yazılım teslim yaşam döngüsünü optimize etmek amacıyla sağlam CI/CD uygulamalarının uygulanmasını savunmaktadır. Boş zamanlarında açık kaynaklı Terraform ekosistemine katkıda bulunmaktan keyif alıyor.

Arjun Nambiar Amazon OpenSearch Hizmeti'nde Ürün Yöneticisidir. Çok çeşitli kaynaklardan Amazon OpenSearch Service'e geniş ölçekte veri alınmasını sağlayan veri alma teknolojilerine odaklanıyor. Arjun, büyük ölçekli dağıtılmış sistemler ve bulut tabanlı teknolojilerle ilgileniyor ve Seattle, Washington'da yaşıyor.

Muthu Pitchaimani Amazon OpenSearch Hizmetinde bir Arama Uzmanıdır. Büyük ölçekli arama uygulamaları ve çözümleri geliştiriyor. Muthu, ağ oluşturma ve güvenlik konularıyla ilgileniyor ve Austin, Teksas merkezli.

spot_img

En Son İstihbarat

spot_img