Logo Zephyrnet

Giới thiệu hỗ trợ Terraform cho Amazon OpenSearch Ingestion | Dịch vụ web của Amazon

Ngày:

Hôm nay, chúng tôi sẽ ra mắt hỗ trợ Terraform cho Nhập liệu Amazon OpenSearch. Terraform là công cụ cơ sở hạ tầng dưới dạng mã (IaC) giúp bạn xây dựng, triển khai và quản lý tài nguyên đám mây một cách hiệu quả. OpenSearch Ingestion là một công cụ thu thập dữ liệu không có máy chủ, được quản lý hoàn toàn, cung cấp dữ liệu nhật ký, số liệu và theo dõi theo thời gian thực cho Dịch vụ Tìm kiếm Mở của Amazon tên miền và Amazon OpenSearch Serverless các bộ sưu tập. Trong bài đăng này, chúng tôi giải thích cách bạn có thể sử dụng Terraform để triển khai quy trình Nhập liệu OpenSearch. Ví dụ: chúng tôi sử dụng nguồn HTTP làm đầu vào và Dịch vụ Tìm kiếm Mở của Amazon tên miền (Chỉ mục) làm đầu ra.

Tổng quan về giải pháp

Các bước trong bài đăng này sẽ triển khai quy trình Nhập liệu OpenSearch có thể truy cập công khai bằng Terraform, cùng với các tài nguyên hỗ trợ khác cần thiết để quy trình nhập dữ liệu vào Amazon OpenSearch. Chúng tôi đã triển khai các Hướng dẫn: Nhập dữ liệu vào miền bằng cách sử dụng Amazon OpenSearch Ingestion, sử dụng Terraform.

Chúng tôi tạo các tài nguyên sau với Terraform:

Quy trình mà bạn tạo sẽ hiển thị nguồn HTTP làm đầu vào và phần chìm của Amazon OpenSearch để lưu hàng loạt sự kiện.

Điều kiện tiên quyết

Để làm theo các bước trong bài đăng này, bạn cần có những điều sau:

  • Một tài khoản AWS đang hoạt động.
  • Terraform được cài đặt trên máy cục bộ của bạn. Để biết thêm thông tin, xem Cài đặt địa hình.
  • Các quyền IAM cần thiết cần có để tạo tài nguyên AWS bằng Terraform.
  • awscurl để gửi yêu cầu HTTPS thông qua dòng lệnh với AWS Sigv4 xác thực. Để biết hướng dẫn cài đặt công cụ này, hãy xem Repo GitHub.

Tạo một thư mục

Trong Terraform, cơ sở hạ tầng được quản lý dưới dạng mã, được gọi là dự án. Dự án Terraform chứa nhiều tệp cấu hình Terraform khác nhau, chẳng hạn như main.tf, provider.tf, variables.tfoutput.df . Hãy tạo một thư mục trên máy chủ hoặc máy mà chúng ta có thể sử dụng để kết nối với các dịch vụ AWS bằng cách sử dụng Giao diện dòng lệnh AWS (AWS CLI):

mkdir osis-pipeline-terraform-example

Thay đổi thư mục.

cd osis-pipeline-terraform-example

Tạo cấu hình Terraform

Tạo một tệp để xác định tài nguyên AWS.

touch main.tf

Nhập cấu hình sau vào main.tf và lưu tập tin của bạn:

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

Tạo tài nguyên

Khởi tạo thư mục:

terraform init

Xem lại kế hoạch để xem những nguồn lực nào sẽ được tạo ra:

terraform plan

Áp dụng cấu hình và trả lời yes để thực hiện kế hoạch:

terraform apply

Quá trình này có thể mất khoảng 7–10 phút để hoàn thành.

Kiểm tra đường ống

Sau khi tạo tài nguyên, bạn sẽ thấy ingest_endpoint_url đầu ra được hiển thị. Sao chép giá trị này và xuất nó trong biến môi trường của bạn:

export OSIS_PIPELINE_ENDPOINT_URL=<Replace with value copied>

Gửi nhật ký mẫu với awscurl. Thay thế hồ sơ bằng hồ sơ AWS thích hợp của bạn để lấy thông tin xác thực:

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

Bạn sẽ nhận được một 200 OK như một phản ứng.

Để xác minh rằng dữ liệu đã được nhập vào quy trình Nhập OpenSearch và được lưu trong OpenSearch, hãy điều hướng đến OpenSearch và lấy điểm cuối miền của nó. Thay thế cái <OPENSEARCH ENDPOINT URL> trong đoạn trích dưới đây và chạy nó.

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

Bạn sẽ thấy đầu ra như dưới đây:

Làm sạch

Để hủy tài nguyên bạn đã tạo, hãy chạy lệnh sau và trả lời yes khi được nhắc:

terraform destroy

Quá trình này có thể mất khoảng 30–35 phút để hoàn thành.

Kết luận

Trong bài đăng này, chúng tôi đã trình bày cách bạn có thể sử dụng Terraform để triển khai quy trình Nhập liệu OpenSearch. AWS cung cấp nhiều loại tài nguyên để bạn nhanh chóng bắt đầu xây dựng quy trình bằng cách sử dụng OpenSearch Ingestion và sử dụng Terraform để triển khai chúng. Bạn có thể sử dụng nhiều tính năng tích hợp khác nhau tích hợp đường ống để nhanh chóng nhập dữ liệu từ Máy phát điện Amazon, Truyền trực tuyến được quản lý của Amazon cho Apache Kafka (Amazon MSK), Hồ bảo mật Amazon, Fluent Bit, và nhiều hơn nữa. Quá trình nhập OpenSearch sau đây bản thiết kế cho phép bạn xây dựng đường dẫn dữ liệu với những thay đổi cấu hình tối thiểu và quản lý chúng một cách dễ dàng bằng Terraform. Để tìm hiểu thêm, hãy xem Tài liệu địa hình cho việc nhập vào Amazon OpenSearch.


Về các tác giả

La Mã là Giám đốc tài khoản kỹ thuật tại Amazon Web Services. Anh ấy đam mê các công nghệ dữ liệu giúp tận dụng dữ liệu như một tài sản chiến lược và có trụ sở tại thành phố New York, New York.

Farhan Angullia là Kiến trúc sư ứng dụng đám mây tại AWS Professional Services, có trụ sở tại Singapore. Ông chủ yếu tập trung vào các ứng dụng hiện đại với các mẫu phần mềm microservice và ủng hộ việc triển khai các phương pháp CI/CD mạnh mẽ để tối ưu hóa vòng đời phân phối phần mềm cho khách hàng. Anh ấy thích đóng góp cho hệ sinh thái Terraform nguồn mở trong thời gian rảnh rỗi.

Arjun Nambiar là Giám đốc sản phẩm của Amazon OpenSearch Service. Ông tập trung vào các công nghệ nhập cho phép nhập dữ liệu từ nhiều nguồn khác nhau vào Dịch vụ tìm kiếm mở của Amazon trên quy mô lớn. Arjun quan tâm đến các hệ thống phân tán quy mô lớn và công nghệ dựa trên nền tảng đám mây và có trụ sở tại Seattle, Washington.

Muthu Pitchaimani là Chuyên gia tìm kiếm với Dịch vụ tìm kiếm mở của Amazon. Anh xây dựng các giải pháp và ứng dụng tìm kiếm quy mô lớn. Muthu quan tâm đến các chủ đề về mạng và bảo mật, và có trụ sở tại Austin, Texas.

tại chỗ_img

Tin tức mới nhất

tại chỗ_img