제퍼넷 로고

Amazon OpenSearch 수집을 위한 Terraform 지원 소개 | 아마존 웹 서비스

시간

오늘 우리는 다음에 대한 Terraform 지원을 시작합니다. Amazon OpenSearch 수집. Terraform은 클라우드 리소스를 효율적으로 구축, 배포 및 관리하는 데 도움이 되는 IaC(Infrastructure as Code) 도구입니다. OpenSearch Ingestion은 실시간 로그, 지표 및 추적 데이터를 제공하는 완전 관리형 서버리스 데이터 수집기입니다. 아마존 오픈서치 서비스 도메인 및 Amazon OpenSearch 서버리스 컬렉션. 이 게시물에서는 Terraform을 사용하여 OpenSearch 수집 파이프라인을 배포하는 방법을 설명합니다. 예를 들어 HTTP 소스를 입력으로 사용하고 아마존 오픈서치 서비스 도메인(인덱스)을 출력으로 사용합니다.

솔루션 개요

이 게시물의 단계에서는 파이프라인이 Amazon OpenSearch에 데이터를 수집하는 데 필요한 기타 지원 리소스와 함께 Terraform을 사용하여 공개적으로 액세스 가능한 OpenSearch 수집 파이프라인을 배포합니다. 우리는 자습서: Amazon OpenSearch 수집을 사용하여 도메인에 데이터 수집, Terraform을 사용합니다.

Terraform을 사용하여 다음 리소스를 만듭니다.

생성한 파이프라인은 HTTP 소스를 입력으로 노출하고 Amazon OpenSearch 싱크를 노출하여 이벤트 배치를 저장합니다.

사전 조건

이 게시물의 단계를 수행하려면 다음이 필요합니다.

  • 활성 AWS 계정.
  • 로컬 머신에 Terraform이 설치되어 있습니다. 자세한 내용은 다음을 참조하세요. Terraform 설치.
  • Terraform을 사용하여 AWS 리소스를 생성하는 데 필요한 IAM 권한.
  • 명령줄을 통해 HTTPS 요청을 보내는 awscurl AWS Sigv4 입증. 이 도구 설치에 대한 지침은 다음을 참조하세요. GitHub 레포.

디렉토리 생성

Terraform에서 인프라는 코드로 관리됩니다. 프로젝트. Terraform 프로젝트에는 다음과 같은 다양한 Terraform 구성 파일이 포함되어 있습니다. main.tf, provider.tf, variables.tfoutput.df . 다음을 사용하여 AWS 서비스에 연결하는 데 사용할 수 있는 디렉터리를 서버나 시스템에 생성해 보겠습니다. AWS 명령 줄 인터페이스 (AWS CLI):

mkdir osis-pipeline-terraform-example

디렉토리로 변경합니다.

cd osis-pipeline-terraform-example

Terraform 구성 만들기

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 수집 파이프라인에서 수집되어 OpenSearch에 저장되었는지 확인하려면 OpenSearch로 이동하여 해당 도메인 엔드포인트를 가져옵니다. 교체 <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분 정도 걸릴 수 있습니다.

결론

이 게시물에서는 Terraform을 사용하여 OpenSearch 수집 파이프라인을 배포하는 방법을 보여주었습니다. AWS는 다양한 자원 OpenSearch Ingestion을 사용하여 파이프라인 구축을 빠르게 시작하고 Terraform을 사용하여 배포할 수 있습니다. 다양한 내장 기능을 사용할 수 있습니다. 파이프라인 통합 데이터를 빠르게 수집하기 위해 아마존 DynamoDB, Apache Kafka 용 Amazon Managed Streaming (아마존 MSK), 아마존 보안 호수, Fluent Bit 등이 있습니다. 다음 OpenSearch 수집 청사진 최소한의 구성 변경으로 데이터 파이프라인을 구축하고 Terraform을 사용하여 쉽게 관리할 수 있습니다. 자세한 내용은 다음을 확인하세요. Terraform 문서 Amazon OpenSearch 수집용.


저자에 관하여

라훌 샤르마 Amazon Web Services의 기술 계정 관리자입니다. 그는 데이터를 전략적 자산으로 활용하는 데 도움이 되는 데이터 기술에 열정을 갖고 있으며 뉴욕주 뉴욕에 거주하고 있습니다.

파르한 앙굴리아 싱가포르에 본사를 둔 AWS Professional Services의 클라우드 애플리케이션 아키텍트입니다. 그는 주로 마이크로서비스 소프트웨어 패턴을 갖춘 최신 애플리케이션에 중점을 두고 있으며, 고객을 위한 소프트웨어 제공 수명주기를 최적화하기 위해 강력한 CI/CD 방식을 구현하는 것을 옹호하고 있습니다. 그는 여가 시간에 오픈 소스 Terraform 생태계에 기여하는 것을 즐깁니다.

아르준 남비아르 Amazon OpenSearch Service의 제품 관리자입니다. 그는 다양한 소스의 데이터를 Amazon OpenSearch Service에 대규모로 수집할 수 있는 수집 기술에 중점을 두고 있습니다. Arjun은 대규모 분산 시스템과 클라우드 기반 기술에 관심이 있으며 워싱턴 주 시애틀에 기반을 두고 있습니다.

무투 피차이마니 Amazon OpenSearch Service의 검색 전문가입니다. 그는 대규모 검색 애플리케이션 및 솔루션을 구축합니다. Muthu는 네트워킹 및 보안 주제에 관심이 있으며 텍사스 오스틴에 기반을 두고 있습니다.

spot_img

최신 인텔리전스

spot_img