Это моя первая #cloudguruchallenge. Я принял задачу, чтобы узнать больше о уластике и питоне. Итак, давайте воспользуемся этим!
Что такое кэширование?
Кэширование – это инструмент для хранения и доступа к данным очень быстро. С кэшированием у вас есть возможность смягчить непредсказуемые нагрузочные нагрузки, масштабные источники данных, снижению затрат на сетевые и способствуют наличию наличия, продолжая служить данным в случае сбоев.
Redis – это кэш и хранилище структуры данных с открытым исходным кодом, и с операционной точки зрения, Redis может быть сложным для развертывания монитора и масштабирования самостоятельно. Приходит, Amazon Elasticache для Redis. Amazon Eleasicache – это управляемая услуга кэширования, совместимая с помощью Redis, так и MeMCached. Он предлагает полностью управляемую платформу, которая позволяет легко развертывать, управлять и масштабировать высокую производительность распределенного кластера хранения данных в памяти.
Какой вызов?
Применение было сделано намеренно медленно, поэтому для улучшения производительности приложений Цель состоит в том, чтобы реализовать кластер Redis, используя упругую упругу Amazon, чтобы кэшировать запросы базы данных в приложении Python. Вы можете найти более подробную информацию о Challenge здесь.
Подход и выводы
Прежде чем я начал вызов, я решил сделать две руки на лаборатории, размещенные на облачном гуру. Один использовал экземпляр PostgreSQL RDS и Redis, а другой – это таблица DynamoDB, используя Memcached Cluster и функции лямбда.
Имея обоими ручными развертываниями, я установил, чтобы развернуть этот полностью использование террафора.
Я на некоторое время учусь и хранил пароли «raphaway» в простом тексте моего REPOS GitHUB, когда мне нужно получить доступ к базе данных. Но я понимаю, что это не лучшая практика в целях безопасности, поэтому я подумал сейчас, было хорошее время, попробуйте управлять секретами в террафоре, поэтому мои пароли не выставлены.
Управляющие секретные переменные
Во-первых, государство террафора должно быть безопасным. Независимо от того, какую технику вы используете для управления своими секретами, если ваша ошибка не зашифрована, секреты все еще будут в конечном итоге в Terraform.tfstate
В простом тексте! Имея это в виду, я установил S3 как мою бэкэнд и зашифровал его. Ключ – путь к тому, где мы хотим хранить файл состояния.
resource "aws_s3_bucket" "terraform_state" { bucket = "terraform-state-acgappperf" versioning { enabled = true } server_side_encryption_configuration { rule { apply_server_side_encryption_by_default { sse_algorithm = "AES256" } } } } terraform { backend "s3" { bucket = "terraform-state-acgappperf" region = "us-east-1" key = "global/s3/terraform.tfstate" encrypt = true } }
Я решил использовать переменные среды. Чтобы использовать эту технику, вы должны объявить переменные для секретов, которые вы хотите пройти, настройка подавляет значения.
variable "db_username" { description = "The username for the DB master user" type = string sensitive = true } variable "db_password" { description = "The password for the DB master user" type = string sensitive = true }
Далее я передаю переменные на ресурсы террафора, которые нуждаются в этих секретах
# Set secrets via environment variables export TF_VAR_username=(the username) export TF_VAR_password=(the password) #When you run Terraform, it'll pick up the secrets automatically terraform apply
Я также создал скрипт оболочки данных пользователей для установки необходимых зависимостей, клонируйте репо и настроить базу данных .ini Я использовал Шаблон \ _file
Функция и Продавец "Файл"
Блок, чтобы пройти через переменные, чтобы настроить Postgres RDS.
data "template_file" "init" { template = file("./user-data.sh.tpl") vars = { DBUSER = var.db_username DBPASS = var.db_password DBNAME = aws_db_instance.acg-db.name DBHOST = aws_db_instance.acg-db.address REDISHOST = aws_elasticache_cluster.acg-redis.cache_nodes[0].address } }
У меня были некоторые проблемы с подключением к базе данных изначально и должны были редактировать мои группы безопасности. Как только это было отсортировано, все было, пришло время проверить время загрузки, которые составляли около 5 секунд.
Настройка приложения для использования Redis
Редактирование кода Python для использования Redis было сложнее, чем я подумал, что это будет. В основном из-за ошибок вдавливания, и я будучи новым в Python. Чтобы помочь, я работал в VS-коде вместо редактора VI из командной строки.
Обновленный код:
def fetch(sql): ttl = 10 # Time to live in seconds try: params = config(section='redis') cache = redis.Redis.from_url(params['url']) result = cache.get(sql) if result: print('Redis result') return result else: # connect to database listed in database.ini conn = connect() cur = conn.cursor() cur.execute(sql) # fetch one row result = cur.fetchone() print('Closing connection to database...') cur.close() conn.close() # cache result cache.setex(sql, ttl, ''.join(result)) return result
Теперь время загрузки составляет миллисекунды
Последние мысли
В целом этот вызов был действительно проблемой, в следующий раз я буду смотреть на разные способы управления секретами и использование модулей, поэтому мне не нужно все писать, но приятно впервые развернуть кластер упругости на террафоре. Я также наслаждался работать с Python. Вы можете найти мой Github Repo здесь Отказ
Оригинал: “https://dev.to/chauntelkellar/improving-application-performance-with-amazon-elasticache-cloudguruchallenge-lnl”