Рубрики
Без рубрики

Пошаговое руководство по созданию аналитического приложения с AWS Redshift с помощью AWS Lambda и S3

Разгрузить входящие данные внутри S3 в Redshift с помощью Lambda. Tagged с AWS, Python, Programming, Tuperial.

AWS Redshift – это сервис хранилища данных, где вы можете запускать аналитику и принимать решения для интеллектуальных продуктов. Redshift может легко масштабироваться на петабайтах данных с пылающей быстрой скоростью запроса.

Его двигатель запроса оснащен PostgreSQL, что означает, что драйверы PostgreSQL для каждого языка будут работать очень хорошо для подключения к кластеру RedShift. Вы можете запросить данные в Redshift, как и запросить данные в Postgres.

Почему бы не использовать обычное решение RDBMS для запуска анализа данных?

  • Регулярные базы данных предназначены для целей OLTP, то есть они хороши для транзакций по базе данных. Стандартное приложение много записывает и читает в базу данных, и именно здесь сияет обычное решение OLTP.

  • Для аналитического приложения мы подаем данные в базу данных один раз, а затем много раз читаем его, где решения OLTP не идеально подходят. Решение OLAP, как Redshift, идеально подходит и дает отличную производительность.

  • Решения OLAP хранят данные в хранилище на основе столбцов для быстрого сканирования таблицы.

  • Amazon Redshift, большой запрос Google и снежинка являются некоторыми примерами базы данных OLAP.

Как мы можем заполнить базу данных Redshift

Есть несколько способов, которыми мы можем разгрузить данные от S3 в Redshift. Давайте рассмотрим их в деталях.

#1 клей AWS

Мы можем передать работу по разгрузке данных с S3 на Redshift, используя еще одну службу AWS “AWS -клей”. Как следует из названия, оно будет работать как клей между двумя службами, динамически создавая схему из загруженного файла внутри S3.

AWS Glue, который может запустить Crawler на загруженном файле внутри S3 и, соответственно, создает для нас схему для базы данных Redshift.

#2 AWS Lambda

Другой вариант – взять этот вопрос в нашу руку: P и создать таблицы вручную внутри Redshift, запустите AWS Lambda из операции загрузки S3 и позвольте Lambda копировать данные от JSON в Redshift.

Я экспериментировал с обоими вариантами, и я предпочитаю последний, потому что я не хочу зависимости от другого сервиса AWS (AWS -клея), когда я могу вручную создавать схему, которая не меняется слишком часто. Кроме того, это оптимизированный вариант с точки зрения затрат.

Давайте начнем.

1) Создайте кластер Redshift с помощью консоли AWS.

В первую очередь нам нужно создать кластер красного смещения из консоли AWS. Вы можете выбрать «бесплатную пробную версию», что более чем достаточно для целей POC. Бесплатное испытание дает 1 узел «DB2-Large» с 160 ГБ хранилища. Создание кластера довольно быстро и не требует индивидуальной конфигурации. Вы можете выбрать настройки по умолчанию и предоставить свое главное имя пользователя и пароль, чтобы ваш кластер был готов через несколько минут.

2) Создайте новую таблицу в Redshift.

Использование редактора запросов подключится к базе данных, используя учетные данные, которые вы предоставили при создании кластера Redshift. После того, как вы подключитесь к базе данных, вы можете использовать редактор запросов для запуска обычных команд SQL. Чтобы создать новую таблицу Просто беги

Create table public.

Это создаст новую таблицу с данным именем таблицы в базе данных, на которой вы находитесь в категории публичных схемы. Редактор Query Left Pane позволит вам выбрать базу данных, категория схемы.

Если вы предпочитаете видеоурок, у меня есть видео на YT вышеупомянутых шагов. Вы можете найти это здесь.

3) Создать функцию лямбды

Функция Lambda будет довольно простой и простой. Мы просто собираемся передать местоположение файла внутри S3, подключиться к Redshift и разгрузить в него файл.

import json
import psycopg2
import boto3

def lambda_handler():
    key = "file.json"
    loc = "'s3://mybucket-awdeshcodes/%s'" % (key)
    output = unload_to_redshift(loc)
    print("output: ", output)
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

def unload_to_redshift(loc):
    con = psycopg2.connect(dbname='snippets',host='',port='5439', user='', password='****')
    cur = con.cursor()
    # Begin your transaction
    cur.execute("begin;")
    cur.execute(
        "COPY public. FROM" + loc + "CREDENTIALS 'aws_iam_role=arn:aws:iam::1234567:role/lamda-s3-rd-full-access' json 'auto';")
    # Commit your transaction
    cur.execute("commit;")
    # Commit your transaction
    cur.execute("commit;")

Я использую драйвер Pycopg2 Python для подключения к кластеру Redshift от Lambda. Линия соединения наиболее важна.

psycopg2.connect(dbname='snippets',host='',port='5439', user='', password='****')

dbname : Имя базы данных RedShift, используемой при создании кластера и где существует наша таблица. хозяин : Endpoint Redshift. Вы можете найти это, нажав на ссылку кластера.

Когда вы скопируете всю конечную точку из консоли, она придумает имя базы данных и порт в конце, обязательно удалите их, поскольку мы собираемся использовать имя порта и базы данных в отдельном параме.

Пользователь : Это главное имя пользователя для кластера Redshift. Пароль: пароль используется для главного имени пользователя.

Другая важная команда в приведенном выше фрагменте – это команда копирования, которая собирается скопировать файл с S3 до RS. Давайте посмотрим на это.

COPY public. FROM" + loc + "CREDENTIALS 'aws_iam_role=arn:aws:iam::1234567:role/lamda-s3-rd-full-access' json 'auto';")

table_name : Используйте имя таблицы, которую вы создали на предыдущем шаге внутри кластера Redshift.

CREDENTIALS 'aws_iam_role=arn:aws:iam::1234567:role/lamda-s3-rd-full-access

Используйте команду как есть. Да, вы должны написать «учетные данные», за которыми следует пробелы и Арн роли IAM.

Это приводит нас к той роли IAM, которую мы еще не обсуждали.

4) Создать роль IAM.

Зайдите в IAM Service и создайте новую роль с доступом к S3 и Service Service. На данный момент я дал эту роль полноценную службу, но я считаю, что некоторые действия, такие как написание S3, удаление может быть отозвано.

Теперь во второй вкладке «Доверенные отношения» нажмите «Редактировать» и добавьте ниже политику.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "redshift.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

Делая это, мы позволяем этой новой роли принять меры в кластере Redshift. Действие в нашем сценарии – это операция копирования внутри таблицы.

Теперь мы должны связать эту новую роль с кластером Redshift. Так что переключитесь на вкладку Credshift Cluster и откройте вкладку «Свойства» внутри кластера.

Теперь, если мы немного прокручиваем вниз внутри свойств, мы увидим «разрешение кластера», где мы должны нажать на «управление ролями IAM» и добавить ARN недавно добавленной роли IAM с приведенного выше шага. Нажмите «Связь» и дайте кластеру пару минут, чтобы внести эффект изменений.

На этом этапе мы связали новую роль IAM с кластером Redshift, и мы также можем использовать ту же роль IAM в нашей функции Lambda.

Итак, давайте вернемся к шагу № 3, где мы его оставили, и скопируем роль ARN IAM, как ниже.

Учетные данные AWS_IAM_ROLE =

На этом этапе мы можем загрузить файл JSON в S3 с тремя полями

{
     "id":1,
    "title":"AWS Redshift",
    "description": "description"
}

Операция загрузки запустит лямбду, которая будет запускать Копия Прикажите скопировать поля внутри JSON в таблицу Redshift.

Откройте редактор запросов RedShift и запустите команду SELECT, вы должны увидеть, как там заполняются новые записи.

Подключитесь к кластеру извне VPC

Если вы хотите использовать клиент SQL вместо консоли Redshift AWS, чтобы запросить данные, вы можете использовать SQL Workbench.

Скачать sqlworkbench из этого места

https://www.sql-workbench.eu/download-archive.html

После загрузки, распаковать это, и это будет sqlworkbench.exe * и ” SQL Workbench.sh **, который можно использовать для запуска Workbench на платформах Windows и Unix. Убедитесь, что кластер Redshift доступен извне VPC, вы можете включить его из настройки свойств-> сети.

Из файла -> подключение Windows Вы можете создать новое соединение. Ниже приведен скриншот моей конфигурации подключения к SQL Workbench с Redshift.

Рекомендации

https://docs.aws.amazon.com/redshift/latest/dg/copy-usage_notes-copy-from-json.html

Ищете видео, чтобы узнать о Redshift? У меня есть один на моем канале YT Введение в Redshift

Я ежедневно публикую о программировании. Ты можешь найти меня 👇

YouTube | Twitter | Instagram

Давай научимся вместе 💪💪

Счастливого кодирования 💻

Оригинал: “https://dev.to/s_awdesh/step-by-step-guide-to-create-an-analytics-application-with-aws-redshift-using-aws-lambda-and-s3-3i82”