Включить потоковую передачу в сервис Amazon Elasticsearch через aws cli - PullRequest
1 голос
/ 23 сентября 2019

Я бы хотел включить сервис Stream to Amazon Elasticsearch от Cloudwatch до Elasticsearch.

enter image description here

Я знаком с тем, как сделать это вручнуюЯ ищу способ добиться этого с помощью команд aws cli.

при условии, что Elasticsearch уже настроен, есть ли способ автоматизировать процесс?

Ответы [ 2 ]

1 голос
/ 28 сентября 2019

Большое спасибо @Adiii, который указал мне правильное направление. Найдите ниже сквозное решение для этой проблемы.

Решение Включите следующие части:

  1. create-lambda-role
  2. предоставление-разрешений-лямбда-ролям
  3. создание-лямбда
  4. предоставление-облачных наблюдений-разрешение-выполнять-лямбда
  5. add-subscription-to-cloudwatch-log-group

Я предполагаю, что лямбда-функция уже упакована и доступна.Вы можете найти лямбда-функцию здесь .

Ручные шаги здесь .

1.create-lambda-role

Сначала нам нужно создать роль, которую использует лямбда-функция, затем мы прикрепим соответствующие политики к этой роли.

    cat > lambda-policy.json << EOF
{
  "Version": "2012-10-17",
  "Statement": {
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
  }
} 
EOF

    aws iam create-role \
    --role-name ${ROLE_NAME} \
    --assume-role-policy-document file://lambda-policy.json \
    --profile ${PROFILE} \
    >/dev/null

2.grant-permissions-to-lambda-role

Прикрепите соответствующие политики к лямбда-роли.

 cat > lambda-to-es-via-vpc-policy.json << EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1569580358341",
      "Action": "es:*",
      "Effect": "Allow",
      "Resource": "arn:aws:es:${AWS_REGION}:${AWS_ACCOUNT_ID}:domain/${ES_DOMAIN}/*"
    },
    {
      "Sid": "Stmt1569580707924",
      "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents",
                "ec2:CreateNetworkInterface",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DeleteNetworkInterface"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}
EOF

    aws iam put-role-policy \
    --role-name ${ROLE_NAME} \
    --policy-name lambda-to-es-via-vpc-policy \
    --policy-document file://lambda-to-es-via-vpc-policy.json \
    --profile ${PROFILE} \
    >/dev/null

3.create-lambda

aws lambda create-function \
    --function-name ${LAMBDA_NAME} \
    --runtime nodejs8.10 \
    --role arn:aws:iam::${AWS_ACCOUNT_ID}:role/${ROLE_NAME} \
    --handler ${LAMBDA_NAME}.handler \
    --zip-file fileb://${LAMBDA_NAME}.zip \
    --timeout 30 \
    --vpc-config SubnetIds=${SUBNET_IDS},SecurityGroupIds=${SECURITY_GROUP_IDS} \
    --profile ${PROFILE} \
    >/dev/null

4.grant-cloudwatch-разрешение-to-execute-lambda

Предоставляет службе AWS или другой учетной записи разрешение на использование функции.

aws lambda add-permission \
--function-name "${LAMBDA_NAME}" \
--statement-id "${LAMBDA_NAME}" \
--principal "logs.${AWS_REGION}.amazonaws.com" \
--action "lambda:InvokeFunction" \
--source-arn "arn:aws:logs:${AWS_REGION}:${AWS_ACCOUNT_ID}:log-group:/aws/eks/${EKS_CLUSTER}/cluster:*" \
--source-account ${AWS_ACCOUNT_ID} \
--profile ${PROFILE} \
>/dev/null

5.add-subscription-to-cloudwatch-log-group

Создает или обновляет фильтр подписки и связывает его с указанной группой журналов.Фильтры подписки позволяют подписаться на поток событий журнала в реальном времени и доставлять их в определенное место назначения.

  aws logs put-subscription-filter \
   --log-group-name  "/aws/eks/${EKS_CLUSTER}/cluster" \
   --filter-name "Common Log Format" \
   --filter-pattern "[host, ident, authuser, date, request, status, bytes]" \
   --destination-arn  arn:aws:lambda:${AWS_REGION}:${AWS_ACCOUNT_ID}:function:${LAMBDA_NAME} \
   --profile ${PROFILE} \
   >/dev/null
1 голос
/ 24 сентября 2019

За сценой Поток к сервису Amazon Elasticsearch создает новую лямбду, а затем проталкивает журнал в Lambda, затем ELK.

destination arn

AmazonИмя ресурса (ARN) потока Kinesis, потока Kinesis Data Firehose или лямбда-функции, которую вы хотите использовать в качестве места назначения фида подписки.

Итак, вот способ перехода к лямбда-AWS иLambda автоматически отправит эти потоки в ELK.

aws logs put-subscription-filter --log-group-name log_group_name --filter-pattern "" --filter-name filter_name_demo   --destination-arn arn:aws:lambda:us-west-2:***********:function:your_lambda_name

AmazonCloudWatch-logs-Subscription

...