Ответы пользователя по тегу Amazon Web Services
  • Есть ли утилита для просмотра списка файлов в ZIP на S3 бакете?

    @yellowmew
    Cloud infrastructure, monitoring engineer. SRE
    пример:
    https://stackoverflow.com/questions/41789176/how-t...
    Если кратко алгоритм:
    1. выясняем размер размер zip файла
    2. читаем несколько байт из zip файла по известному адресу для того чтобы выяснить расположение и размер листинга файлов в zip файле
    3. читаем несколько байт из zip файла с листингом файлов
    4. создаем свой пустой zip файл вставляя туда полученные байты по нужным адресам.
    функциями работы с zip выдаем список файлов

    P.S. скрипт писал не я, но пару лет назад тоже решал подобную задачу.
    "Спасение" тут - это чтение части файла, которое позволяет S3 и знание формата zip
    В комментариях к ответу на SO написано про ограничения в размере zip в 4Гб - я не сталкивался и задачу по обходу проблемы не решал.
    Ответ написан
  • Какие Best practices по применению private zones в сервисе AWS Route53?

    @yellowmew
    Cloud infrastructure, monitoring engineer. SRE
    1.
    не совсем ясно как организована ваша инфраструктура
    Судя по тому, что у вас есть вариант "назначить публичные IP и рулить публичными ДНС именами" - все располагается в default vpc и это не best practice.
    Рекомендуется размещать инстансы, к которым не нужен доступ из интернета (те, которые хостят ваши сервисы, обслуживающие только ваши другие сервисы в том же VPC) в приватных подсетях VPC.
    Вообще рекомендуется ВСЕ сервисы размещать в приватных подсетях а доступ из интернета к ним организовывать, используя прокси. AWS предоставляет ALB(ELB\NLB в зависимости от ваших потребностей), или же вы можете поднять свой прокси (HAProxy, NGINX или другие) на ec2 инстансе, расположенном в публичной подсети
    2.
    Route53 private zone
    Если ваши сервисы находятся в приватной подсети и вам необходимо работать с ними по DNS именам: можно регистрировать инстансы в Route53 private zone или же поднять свой приватный DNS на любом ПО которое вы умеете(в таком случае необходима перенастройка параметров VPC в котором вы работаете, чтобы все сервисы могли работать с вашим DNS)
    Так же можно использовать service discovery ПО, которое обеспечит разрешение имен DNS (например consul, но это потребует поднятия отдельного сервиса на ec2\ecs для обслуживания service discovery), или использовать service discovery предлагаемый AWS: Cloud Map - он использует route53 private zone для регистрации сервисов и разрешения имен.
    3.
    Сертификаты
    Для сервисов, которые доступны публично - ничего сложного: используйте Certificate Manager для выпуска сертификатов на ALB или же LetsEncrypt если вы используете собственное ПО для прокси
    Для сервисов, находящихся в приватных подсетях и недоступных публично:
    - Можно забить и работать без TLS - сеть приватная, защищать или не защищать общение между сервисами в приватной подсети зависит от уровня вашей паранойи.
    - ACM Private CA про который вы уже знаете
    - В случае использования service discovery ПО можно использовать функционал предлагаемый решениями для service mesh, например consul connect service mesh: ваше приложение общается с прокси консула, а тот, обеспечивая TLS между нодами, направляет трафик приложения на нужный сервис

    P.S. совершенно неясно зачем в тегах микротик
    Ответ написан
  • КАк разрешить просмотр фотографий с s3 amazon?

    @yellowmew
    Cloud infrastructure, monitoring engineer. SRE
    это вопрос скорее по laravel -как в laravel делать так чтобы загруженный объект был доступен публично
    В рамках работы с AWS для доступа к объекту ему необходимо назначить публичный доступ
    Так же можно сгенерировать presigned url для объекта.
    Ответ написан
  • Как заскедьюлить несколько задач (около 20 шт.) используя один контейнер AWS ECS?

    @yellowmew
    Cloud infrastructure, monitoring engineer. SRE
    Наиболее логичным способом в вашем случае выглядит именно container overrides и нет ничего плохого, если вы будете делать создавать клаудвотч таски через cli
    Для облегчения работы в принципе, можно использовать terraform (хотя я понимаю, что, возможно, для вас это сейчас лишняя нагрузка, но, поверьте, пригодится)
    Ответ написан
  • Как диагностировать странные network проблемы на AWS серваках?

    @yellowmew
    Cloud infrastructure, monitoring engineer. SRE
    С практически 99.9% вероятностью AWS тут совершенно ни при чем.
    1. Смотрите сетевой стек на проблемных серверах(хоть отмониторьте его что ли, вы же смотрите в мониторинг?) Например, довольно часто встречающаяся проблема - незакрывающиеся tcp close_wait. Оптимизируйте настройки сети под ваше приложение.
    2. мониторьте само приложение - что меняется в моменты залипаний. Попробуйте какой нибудь APM(NewRelic, Datadog и другие) если приложение позволит.
    Вообще, если бы у вас были данные для анализа - можно было бы что-то предполагать.
    Делайте мониторинг, если он еще не сделан. Смотрите в мониторинг.
    Ответ написан
  • Что выбрать для хостинга сайтов и веб-приложений с бекендом на AWS?

    @yellowmew
    Cloud infrastructure, monitoring engineer. SRE
    Я бы переформулировал Иван Шумов: Если у тебя нет опыта настройки именно AWS сервисов - лучше за AWS не браться. Если ты конечно не готов потратить время на изучение.
    Лучше всего взять хетцнер или другую VPS где для вас всю инфраструктуру настроит хостер
    AWS этого делать за вас просто не будет и любой косяк в настройке обойдется вам в дополнительные траты
    AWS берет деньги за каждый чих. Часта ситуация когда вследствие неверной настройки ваши деньги вылетают в трубу. Поэтому бытует мнение что AWS - дорого.
    Ответ написан
  • Как маленькому веб-проекту спасаться от DDoS?

    @yellowmew
    Cloud infrastructure, monitoring engineer. SRE
    Трафик у вас nginx принимает - настройте rate limiting . Для этого все равно надо будет провести анализ - какие лимиты на какие урлы для вас ок.
    Кроме этого можно настроить рейт лимитинг для одного src ip. nginx так-то штука мощная в плане возможностей и настроек защиты.

    Если вам не хочется разбираться с nginx - подключите сайт в cloudfront, в него встроены необходимые сервисы защиты, как и написал Иван Шумов . Впрочем, их тоже надо понять как правильно настроить.
    Ответ написан
  • Архитектура/стек для telegram - бота, где не прав? Aws. +Метрики. Логи?

    @yellowmew
    Cloud infrastructure, monitoring engineer. SRE
    Плюсану к Иван Шумов, с небольшими добавками.
    Если пет проект - телеграм бот с описанной вами архитектурой, то не стоит городить еще один пет-проект "прометеус мониторинг" рядом. Клаудвотч для вас предоставит достаточный уровень логирования\мониторинга для бота, причем в дальнейшем его можно расширять так же сервисами AWS
    Крутить prometheus рядом, конечно, можно, но, как и упоминал Иван, это приведет к удорожанию проекта: вам необходимо будет забирать метрики исполнения функций из CloudWatch (что довольно таки дорого) и\или слать метрики\логи из лямбд напрямую в ваш прометей, что увеличит стоимость выполнения лямбды
    Я бы возложил хранение метрик и логов на cloudwatch, и решал проблемы мониторинга-логирования когда они возникнут (если вы действительно что-то не сможете клаудвотчем сделать)
    Ответ написан
  • Зависит ли формат файла 'состояния' терраформ (state) от версии aws provider?

    @yellowmew
    Cloud infrastructure, monitoring engineer. SRE
    формат tfstate формирует терраформ, а не провайдер.
    Провайдер предоставляет вполне себе определенные записи, которые затем терраформ хранит в стейте.
    Кроме того,. апгрейд внутри одной мажорной версии 2.57 -> 2.59 вообще как правило не содержит ломающих изменений, вот если бы вы из 1.3 на 2.59 апгрейдились - действительно стоило бы беспокоиться.
    Если есть сомнения - изучайте
    https://registry.terraform.io/providers/hashicorp/...
    https://registry.terraform.io/providers/hashicorp/...
    Ответ написан
  • Изменение ip адреса в EC2?

    @yellowmew
    Cloud infrastructure, monitoring engineer. SRE
    Что есть "статический публичный адрес"? При каждом создании EC2 вы получаете новый публичный адрес. Хотите менять выходной адрес вручную - велкам, Elastic IP к вашим услугам, однако, возможно, потребуется перенастройка вашего vpn решения и клиента который к нему подключается (поскольку неизвестно что за решение и как вы его настраивали).
    И, кстати говоря, в текущей формулировке никакой проблемы с aws у вас нет, ваша проблема в том что ваш трафик блокируют. Хотите решать проблему с aws - опишите проблему с aws
    Смена облака на другое, скорее всего, если и поможет, то случайно - диапазоны крупных игроков известны и могут так же как и AWS быть внесены в списки
    Ответ написан
  • Как добавить удаленное хранение файла?

    @yellowmew
    Cloud infrastructure, monitoring engineer. SRE
    ключ - это имя объекта в s3 бакете, контент которого соответствует файлу terraform.tfstate лежащему сейчас локально.
    Если у вас простой код (как на скриншоте) - можете спокойно называть ключ "terraform.tfstate"
    Если вы в одном бакете храните ключи разных частей одной инфраструктуры - сделайте логическое разделение "ec2/terraform.tfstate", "vpc/terraform.tfstate"
    вообще можете назвать хоть "123" - это просто название ключа, где терраформ будет искать стейт в будущем. Единственное ограничение - имя ключа должно соответствовать правилам именования объектов в S3
    Ответ написан
  • Как получить значения $_SERVER['HTTPS'] и $_SERVER['SERVER_PORT'] на nginx?

    @yellowmew
    Cloud infrastructure, monitoring engineer. SRE
    Предположу, что ваша схема работы сейчас примерно такая:
    AWS *LB (предполагаю ALB если ваши коллеги не любят ELB настолько что еще не прееехали) принимает трафик, терминирует https и в расшифрованном виде отправляет на NGINX. Так же может принимать HTTP
    контейнер NGINX служит для внутренней балансировки трафика или, возможно, хостит приложения. Он всегда слушает HTTP
    В общем случае контейнеру и приложению не надо знать как пришел трафик внутри сети - все заботы о HTTPS берет ALB и дальше приложение должно работать вне зависимости от того на какой порт снаружи пришло и зашифрован ли был трафик.
    Отсюда возникает логичный вопрос: зачем вашему приложению понадобилось знать по какому протоколу приходит трафик? Но это ваша проблема.
    Конкретно вам нужно с NGINX или обрабатывать или редиректить дальше на приложение(если NGINX используется как внутренний LB) заголовки X-Forwarded-Proto и X-Forwarded-Port
    https://docs.aws.amazon.com/elasticloadbalancing/l...
    Вот тут подтверждают что эти же заголовки создаются и для ALB
    Как это сделать на NGINX - вторая часть вопроса.
    Ответ написан
  • Почему может тормозить загрузка статичных файлов на сайте для некоторых клиентов из РФ?

    @yellowmew
    Cloud infrastructure, monitoring engineer. SRE
    Не забывайте про сетевую машрутизацию(неоптимальные маршруты) и ограниченную пропускную способность в условиях усиленного использования каналов интернета на самоизоляции.
    Маршрутизация.
    Вы используете статическую точку входа в AWS которая приземляется в конкретной физической точке сети. И которая, кстати, находится точно не в России.
    Проблема наблюдается у конкретных клиентов -> с наибольшей вероятностью маршрут от клиента до вашего сервера является проблемой
    Возможные решения
    1.CDN (и да, и AWS и CloudFlare уже достаточно давно рекомендует динамику тоже через CDN гнать, гайдов куча) - трафик будет отдаваться от ближайшей точки доступной клиенту (опять же в зависимости от настроек маршрутизации конкретного провайдера до сервиса CDN - все равно могут возникать проблемы)
    2.AWS Global Accelerator - по сути примерно то же самое для вас. Трафик смаршрутизируется в ближайшую точку присутствия GA к клиенту и пойдет кратчайшим путём внутри AWS к вашему серверу. Но точек входа еще в августе в РФ не было. Сейчас не знаю.
    3.Поднять точку входа на территории РФ и заниматься передачей трафика на ваш сервис в AWS в туннеле (такое решение например у нас на проекте дало наибольшее ускорение, ни GA ни CloudFront не сравнимы, поскольку там мы вообще никак не контролируем маршруты трафика в сторону серверов AWS)

    Вам из вышеописанного может помочь или CDN с точками присутствия в РФ или своя точка присутствия в на серверах РФ в случае если трафик от клиентов идет по неоптимальному маршруту.

    Перегруженные сети
    Если же проблема в перегруженных сетях (наиболее вероятная сейчас причина) - то вам ничего не поможет.
    Ответ написан
  • Не могу подключиться по SSH к AWS. Что я делаю не так?

    @yellowmew
    Cloud infrastructure, monitoring engineer. SRE
    Давайте уточним что понятно из вашего вопроса:
    1. Вы пытаетесь подключиться к windows (поскольку при подключении к Linux нет этапа "расшировка пароля")
    2. Вы пытаетесь подключиться по SSH (или все же RDP?)
    3. Вам не удается расшифровать пароль инстанса "на лету", поскольку у вас зашифрован ключ

    Попробуйте следующее:
    1. ваш приватный ключ putty сконвертировать в Openssh без пароля
    2. удостовериться, что получившийся файл (открывается любым текстовым редактором) удовлетворяет условиям
    Private key must begin with "-----BEGIN RSA PRIVATE KEY-----" and end with "-----END RSA PRIVATE KEY-----""
    То есть
    • есть эти фразы
    • отсутствует слово encrypted

    3. При расшифровке выберите этот файл.
    Ответ написан
  • Можно ли сделать Load Balancing in AWS если инстанс имеет только private IP?

    @yellowmew
    Cloud infrastructure, monitoring engineer. SRE
    Вообще с точки зрения безопасности крайне рекомендуется разделять сети, и держать приложения и их данные в подсетях к которым нет прямого доступа из интернета
    Например(тоже относительно рандомная картинка) SrHTd.png
    поэтому я бы дополнил ответ Иван Шумов так :
    При использовании AWS ELB,ALB или любого другого балансировщика внешней нагрузки (Haproxy,Nginx,etc..) лучше всего ваш VPC организовать так, чтобы все балансируемые сервера находились в приватных подсетях, а в публичной находился только балансировщик, NAT и VPN\Bastion
    В базовом случае(использование default VPC) можно ограничить прямой доступ к серверам, как и посоветовал Иван Шумов
    Ответ написан
  • Как установить сайт на ubuntu сервер на amazon ec2?

    @yellowmew
    Cloud infrastructure, monitoring engineer. SRE
    ткну пальцем в небо:
    когда вы запускали (руками) инстанс - просто прокликали все next next next и по умолчанию добавилось правило launch-wizard-...... в которое есть правило для ssh(и оно работает, иначе как бы вы поставили nginx)
    sg которую вы демонстрируете - это default security group. То что она default - не означает что она ассоциирована с вашим инстансом. добавьте эту sg к вашему инстансу. Это раз
    Два: то что вы открыли порт в security group не означает что он открыт на самом сервере. проверьте правила внутреннего файрвола
    И вообще, сначала завалидируйте, что curl с localhost на самом инстансе отдает вам контент вашего сайта на том порту который вы ожидаете - может быть там приложение и не работает вовсе а вы чего то ждете
    Ответ написан
  • Сколько может стоить альтернатива обычному хостингу на AWS?

    @yellowmew
    Cloud infrastructure, monitoring engineer. SRE
    Присоединюсь к Иван Шумов
    Даже если у вас есть потребность в переезде на AWS - вы все равно не сможете предугадать ваши траты, только очень и очень примерно. Жизнь в AWS - это когда каждый месяц смотрим на биллинг и "вот до сентября у нас не было столько межрегионального трафика, что ж мы в продукте такое взвели то.. на 2к баксов лишних"
    Ответ написан
  • Как уменьшить риски потери инфраструктуры при использовании Terraform?

    @yellowmew
    Cloud infrastructure, monitoring engineer. SRE
    Потерять можно все при любом действии и любым продуктом.
    Терраформ просто позволяет сделать это .. красиво и очень удобно, если вы хреново его спланировали.
    Правило 1: используйте автоприменение только в тех местах где не жалко или где вы железобетонно уверены(и берете риски на себя)
    Правило 2: валидируйте план. Хотя бы глазами
    Вообще, есть у некоторых людей практика делать план в файл, валидировать его какой то внешней логикой, и при успешной валидации применять план из файла, не просчитывая его заново (он делается при каждом апплае) с автоподтверждением. Мне не нравится, да и терраформ честно предупреждает что на момент реального применения ситуация может отличаться и менять придется совсем другие элементы.
    Правило 3: разноси элементы по логическим слоям, чтобы уменьшить зону поражения при гибельном апплае. Например настройки сети а одной папке со своим стейтом, запуск приложения - в другой. И связывайте через ремоут стейт. Главное соблюдать меру, чтобы каждую, скажем , security group в aws не создавать в отдельных слоях.
    Правило 4: используйте модули, если применение логической группы ресурсов используется более одного раза. Тут тоже не стоит плодить модули на каждый ресурс и подходить разумно.
    Правило 5: тестируйте изменения! (Используя одни и те же модули для стейжа и прода). Логично предположить что если вы снесли стейж то и прод снесется.
    Правило 6: используйте vcs для работы с кодом терраформ (для того чтобы откатывать код для восстановления убитого стейжа например)
    Правило 7: используйте lifecycle политики Prevent destroy на ресурсах, чтобы запрещать из убиение
    Помидор 7.1: используйте ignore changes там где это нужно
    Правило 8: используйте правильный инструмент для того что вы хотите сделать. Терраформ умеет много чего, но конфигурейшн менеджер он не заменит, хотя по функциям они чуть да пересекаются.

    В принципе, если продолжать я могу до штук 20 дойти полезных советов, но на 90% мои правила, по сути - используйте для работы с кодом терраформ те же правила что и для работы с любым другим кодом - снимете 70% проблем. Остальные будут связаны с особенностью работы терраформ и радиусом кривизны рук автора терраформ кода.

    P.S. пишу на ходу в метро, орфографию и пунктуацию правит т9. Спрашивайте, вдруг заметите какой нибудь термин, который я писать не собирался :D
    Ответ написан
  • Возможна ли обработка изображений на AWS S3?

    @yellowmew
    Cloud infrastructure, monitoring engineer. SRE
    Функционала такого в S3, конечно же, нет.
    S3 = Simple Storage Service. Основное предназначение - это хранение.
    Cloudinary предоставляет вам хранение+манипуляции+еще что-то как сервис.
    В S3 такое, как вам уже посоветовал Андрей, можно доделать самому, с помощью соответствующих сервисов.
    Насколько много нужно танцевать - зависит от количества и качества вашего(или вашей команды) опыта в программировании.
    Ответ написан