Русский
Русский
English
Статистика
Реклама

Solution architect

Перевод Развертывание приложения Symfony в AWS Lambda

11.06.2021 18:10:18 | Автор: admin

Сначала давайте разберемся, что такое бессерверная архитектура и когда она нужна.

Бессерверная архитектура позволяет выполнять фрагменты кода без мороки с инфраструктурой: в этом случае управлением веб-сервером, физическим оборудованием и администрированием занимается облачный провайдер, позволяя вам сосредоточиться исключительно на коде.

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

Наш сценарий использования

Предоставить доступ к API, созданному с помощью Symfony, который публикует сообщения в LinkedIn. Процесс разработки будет включать этапы от написания до развертывания кода.

Пишем код

В Symfony 5-й версии появился новый компонент под названием Notifier, который дает возможность отправлять уведомления через разные сервисы (Slack, Twitter, Twilio и др.).

В Symfony нет встроенной поддержки LinkedIn, поэтому несколько месяцев назад я создал поверх Notifier шлюз для публикации контента в этой социальной сети. Исходный код шлюза можно посмотреть по ссылке, его же мы будем использовать и в этой демонстрации.

Приступаем

$ symfony new --full aws-lambda-linkedin-notifier$ cd aws-lambda-linkedin-notifier$ composer require eniams/linkedin-notifier

Включаем шлюз (см. документацию)

<?php// config/bundles.phpreturn [// others bundles,Eniams\Notifier\LinkedIn\LinkedInNotifierBundle::class => ['all' => true]];// .envLINKEDIN_DSN=

Логика публикации контента

<?phpclass PostContentController{    /**     * @Route("/contents", name="post_content", methods="POST")     */    public function __invoke(NotifierInterface $notifier, Request $request)    {        if(null !== $message = (\json_decode($request->getContent(), true)['message'] ?? null)) {            $notifier->send(new Notification($message, ['chat/linkedin']));            return new JsonResponse('message posted with success', 201);        }        throw new BadRequestException('Missing "message" in body');    }}

Логика проста: мы предоставляем доступ к API через маршрут /contents, который принимает запрос POST с сообщением message в его теле.

В 11-й строке мы отправляем публикуемое сообщение в LinkedIn благодаря Symfony и шлюзу это делается очень просто!

Будучи профессиональными разработчиками, покроем этот код автотестами:

<?phpclass PostContentControllerTest extends WebTestCase    /**     * @dataProvider methodProvider     */    public function testANoPostRequestShouldReturnA405(string $method)    {        $client = static::createClient();        $client->request($method, '/contents');        self::assertEquals(405, $client->getResponse()->getStatusCode());    }    public function testAPostRequestWithoutAMessageInBodyShouldReturnA400()    {        $client = static::createClient();        $client->request('POST', '/contents');        self::assertEquals(400, $client->getResponse()->getStatusCode());    }    public function testAPostRequestWithAMessageInBodyShouldReturnA201()    {        $request = new Request([],[],[],[],[],[], json_encode(['message' => 'Hello World']));        $notifier = new class implements NotifierInterface {            public function send(Notification $notification, Recipient ...$recipients): void            {            }        };        $controller = new PostContentController();        $response = $controller->__invoke($notifier, $request);        self::assertEquals(201, $response->getStatusCode());    }    public function methodProvider()    {        return [            ['GET'],            ['PUT'],            ['DELETE'],        ];    }view rawTestPostContentController.php hosted with  by GitHub

Код готов! Пришло время его развернуть

Стоп! Что?! AWS Lambda не поддерживает PHP!

Именно так: AWS Lambda поддерживает не все языки программирования, а только некоторые, в том числе Go, Java, Python, Ruby, NodeJS и .NET.

Теперь надо учить новый язык и переписывать код? Надеюсь, нет!

Ничего переписывать не придется благодаря Матье Напполи (Matthieu Nappoli), создателю Bref.sh, и замечательной команде, помогающей ему поддерживать этот проект с открытым исходным кодом.

Bref позволяет развертывать PHP-приложения в AWS и запускать их на AWS Lambda.

Конфигурация развертывания

Добавим в kernel.php обработку логов:

<?php    // Kernel.php    public function getLogDir(): string    {        if (getenv('LAMBDA_TASK_ROOT') !== false) {            return '/tmp/log/';        }        return parent::getLogDir();    }    public function getCacheDir()    {        if (getenv('LAMBDA_TASK_ROOT') !== false) {            return '/tmp/cache/'.$this->environment;        }        return parent::getCacheDir();    }

Подготовим фреймворк Serverless (см. документацию):

$ npm install -g serverless$ serverless config credentials --provider aws --key  --secret$ composer require bref/bref

Зададим конфигурацию в файле serverless.yaml:

service: notifier-linkedin-apiprovider:    name: aws    region: eu-west-3    runtime: provided    environment: # env vars        APP_ENV: prod        LINKEDIN_DSN: YOUR_DSNplugins:    - ./vendor/bref/breffunctions:    website:        handler: public/index.php # bootstrap         layers:            - ${bref:layer.php-73-fpm} # https://bref.sh/docs/runtimes/index.html#usage         timeout: 28 # Timeout to stop the compute time        events:            - http: 'POST /contents' # Only POST to /contents are allowedpackage:    exclude:        - 'tests/**'view rawserverless.yaml hosted with  by GitHub

Развертываем!

$ serverless deployServerless: Packaging service...Serverless: Excluding development dependencies...Serverless: Uploading CloudFormation file to S3...Serverless: Uploading artifacts...Serverless: Uploading service notifier-linkedin-api.zip file to S3 (10.05 MB)...Serverless: Validating template...Serverless: Updating Stack...Serverless: Checking Stack update progress.......................Serverless: Stack update finished...Service Informationservice: notifier-linkedin-apistage: devregion: eu-west-3stack: notifier-linkedin-api-devresources: 15api keys:  Noneendpoints:  POST - https://xxx.execute-api.eu-west-3.amazonaws.com/dev/contentsfunctions:  website: notifier-linkedin-api-dev-websitelayers:  NoneServerless: Removing old service artifacts from S3...Serverless: Run the "serverless" command to setup monitoring, troubleshooting and testing.

Теперь наш код развернут в AWS Lambda, а API доступен по адресу https://xxx.execute-api.eu-west-3.amazonaws.com/dev/contents.

Попробуем:


Перевод материала подготовлен в рамках курса "Symfony Framework". Если интересно узнать о курсе больше, приглашаем на день открытых дверей онлайн, где преподаватель расскажет о формате и программе обучения.

Подробнее..

С чего начать, что бы стать архитектором в IT? Введение

22.11.2020 22:13:07 | Автор: admin

Каждый раз рассказывая свой доклад про архитекторов качества я слышу один, самый популярный вопрос: "С чего начать?" - Хороший вопрос! Но прежде чем на него ответить, я предлагаю задаться таким вопросом: "А подходит ли это вам?"

Архитектор - это человек, у которого много, очень много ответственности и очень мало влияния на реализацию архитектурного решения! Вне зависимости от того, какой это архитектор: архитектор решений, архитектор качества или системный архитектор.

Сеньоры, мидлы и даже джуны (разработчики/тестировщики) ежедневно влияют на качество проекта тем, что разрабатывают и тестируют код. Девопсы следят и поддерживают инфраструктуру проекта. Лиды ежедневно влияют на качество проекта, работая с командами. Архитектор же не работает ни с кодом, ни с командами, ни с проектными процессами. Его влияние не такое явное, и ограничено его сферой деятельности по построению архитектуры. Архитектура должна бы проработана, удовлетворять требованиям заказчика как явными, так и неявными, и затем передана в работу команде. После передачи архитектуры в работу заканчивается и влияние архитектора, далее архитектор только корректирует нюансы. Но при этом ответственность за проект и за эффективность проекта все равно остается на архитекторе. Работа архитектора - это как дизайн-проекта дома или квартиры, который заказчики видят красивым при визуализации, но качество его реализации зависит еще и от строителей. Т.е. соответственно, архитектор отвечает за все, практически не имея физической возможности повлиять на качество работы.

Возвращаясь к исходному вопросу, если это вас не смущает и не пугает, то архитектор ваша стезя.

Так с чего же начать?

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

Навык коммуникации

Самый главный навык архитектора - это навык коммуникации! Иначе говоря, этот человек, у который soft скилы становятся hard скилами, т.к. это тот человек, который должен донести виденье заказчика команде и минимально исказить это видение в процессе. Или, если мы говорим об архитекторе качества, то донести до заказчика важность и необходимость хорошего, разностороннего тестирования, а команде, как это тестирование проводить. Это уже не только технический человек, а больше эмпатичный, цель которого сделать всех счастливыми. Для успешной коммуникации есть целый ряд методик, проведение которых и изучают в школе архитекторов. Но развивать этот навык надо с самого начала (рождения желательно), на уровне архитектора - уже поздновато, но при желании можно. Например, при помощи специальных упражнений или игр.

Навык быть лидером

Следующий навык, которым должен обладать архитектор - это навык лидера, причем в нашем случае, это навык неявного лидера, этакие серые кардиналы, которые способны увлечь за собой не только джунов интересной идеей, но и лидов команд, у которых обычно критическое мышление развито хорошо, и к интересным идеям они относятся с опаской. Этот раздел в школе архитекторов не изучают, подразумевается, что на эту роль приходят люди с развитыми лидерскими качествами. Вот пару ресурсов, которые рассказывает о лидерских качествах: развитие лидерских качеств и 12 социальных навыков, которые совершенствуют работу руководителей IT-проектов.

Технические навыки

Технические навыки включают в себя: знание доменной области, знание процессов разработки, тестирования, установки приложений, знание работы с инфраструктурой, архитектурные стили, шаблоны и тактики.

Знание доменной области. Это знания подводных камней и возможностей обойти эти камни в какой-то конкретной области. Например, проблемы в gameDev будут отличаться от проблем при разработки или тестировании e-commerce. Это нарабатывается только опытным путем, и никак иначе. Почитав статьи, можно собрать информацию о типичных проблемах и как другие их решали. Но в реальности у каждого архитектора есть свое кладбище своих неудачных решений, на которых основан его опыт и знания, что можно или нельзя делать в этом домене. Более того, сеньерность архитектора увеличивается с количеством доменных областей, которые он знает.

Знание процессов разработки, тестирования, установки приложений, работы с инфраструктурой. Об этом очень много написано, существует огромное количество видео, тренингов. Тут каждому надо определить самому, какую область ему необходимо подтянуть и в каком количестве. Но хочу напомнить о базе, с которой начинается хорошая разработка и тестирование, которую сейчас несправедливо забывают - Роберт Мартин "Чистый код". Но справедливости ради, прикладываю статью и на альтернативное мнение "О книге Боба Мартина Чистый код"

Архитектурные стили, шаблоны и тактики. В IT как и у строителей существуют свои подходы для решения тех или иных проблем. Эти решения основываются на архитектурных стилях, шаблонах и тактиках.

  • Архитектурный стиль - это способ организации кода, который решает проблемы и предоставляет преимущества архитектурного решения . Например: клиент - сервер архитектура, монолит, микросервисная архитектура.

  • Архитектурный шаблон - это типовое решение для повторяющихся проблем. Говоря об архитектуре могу привести такие примеры: CQRS, шардирование.

  • Архитектурная тактика - это низкоуровневое решение конкретной архитектурной практической задачи.

Основной уклон архитектурных школ - это именно изучение стилей, шаблонов и тактик. Оставлю тут книгу, в которой хорошим и простым английским описаны практики архитекторов - Software Architecture in Practice (можно найти бесплатно в pdf формате). В следующих статьях я буду разбирать подробно эти практики.

Навык доверять

И самый последний навык архитекторов, который я хочу сегодня упомянуть - это навык доверять. Становясь архитектором надо четко осознавать то, что от некоторых привычных активностей и привычного контроля необходимо отказаться. Т.е. ответственность за код теперь лежит на плечах разработчиков, ответственность за тестирование - на тестировщиках, а командами управляют лиды команды. Архитекторы обычно - это бывшие лиды, вышедшие из сеньеров, и они знают как писать код, как делать ревью кода, как распределять задачи "лучше всех". Но на этом уровне необходимо команде доверить делать свою работу! Этот навык тоже развивается и начать можно с соответствующей литературы. Доверие в командах: зачем это нужно и как построить, Доверие в бизнесе

Заключение

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

В дальнейшем цикле статей все понятия, описанные выше, будут специализированы и раскрыты именно с точки зрения работы архитектора:

  • с кем архитекторы общаются и какие тактики общения и для чего при этом применяют,

  • разобраны архитектурные стили, шаблоны и тактики на примерах,

  • и так же прольется свет на такую загадочную деятельность как preSale,

  • и многое другое!

Подробнее..

С чего начать, чтобы стать архитектором в IT? Введение

23.11.2020 00:11:51 | Автор: admin

Каждый раз рассказывая свой доклад про архитекторов качества я слышу один, самый популярный вопрос: "С чего начать?" - Хороший вопрос! Но прежде чем на него ответить, я предлагаю задаться таким вопросом: "А подходит ли это вам?"

Архитектор - это человек, у которого много, очень много ответственности и очень мало влияния на реализацию архитектурного решения! Вне зависимости от того, какой это архитектор: архитектор решений, архитектор качества или системный архитектор.

Сеньоры, мидлы и даже джуны (разработчики/тестировщики) ежедневно влияют на качество проекта тем, что разрабатывают и тестируют код. Девопсы следят и поддерживают инфраструктуру проекта. Лиды ежедневно влияют на качество проекта, работая с командами. Архитектор же не работает ни с кодом, ни с командами, ни с проектными процессами. Его влияние не такое явное, и ограничено его сферой деятельности по построению архитектуры. Архитектура должна быть проработана, удовлетворять требованиям заказчика как явным, так и неявным, и затем передана в работу команде. После передачи архитектуры в работу заканчивается и влияние архитектора, далее архитектор только корректирует нюансы. Но при этом ответственность за проект и за эффективность проекта все равно остается на архитекторе. Работа архитектора - это как дизайн-проекта дома или квартиры, который заказчики видят красивым при визуализации, но качество его реализации зависит еще и от строителей. Т.е. соответственно, архитектор отвечает за все, практически не имея физической возможности повлиять на качество работы.

Возвращаясь к исходному вопросу, если это вас не смущает и не пугает, то архитектор ваша стезя.

Так с чего же начать?

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

Навык коммуникации

Самый главный навык архитектора - это навык коммуникации! Иначе говоря, этот человек, у который soft скилы становятся hard скилами, т.к. это тот человек, который должен донести виденье заказчика команде и минимально исказить это видение в процессе. Или, если мы говорим об архитекторе качества, то донести до заказчика важность и необходимость хорошего, разностороннего тестирования, а команде, как это тестирование проводить. Это уже не только технический человек, а больше эмпатичный, цель которого сделать всех счастливыми. Для успешной коммуникации есть целый ряд методик, проведение которых и изучают в школе архитекторов. Но развивать этот навык надо с самого начала (рождения желательно), на уровне архитектора - уже поздновато, но при желании можно. Например, при помощи специальных упражнений или игр.

Навык быть лидером

Следующий навык, которым должен обладать архитектор - это навык лидера, причем в нашем случае, это навык неявного лидера, этакие серые кардиналы, которые способны увлечь за собой не только джунов интересной идеей, но и лидов команд, у которых обычно критическое мышление развито хорошо, и к интересным идеям они относятся с опаской. Этот раздел в школе архитекторов не изучают, подразумевается, что на эту роль приходят люди с развитыми лидерскими качествами. Вот пару ресурсов, которые рассказывает о лидерских качествах: развитие лидерских качеств и 12 социальных навыков, которые совершенствуют работу руководителей IT-проектов.

Технические навыки

Технические навыки включают в себя: знание доменной области, знание процессов разработки, тестирования, установки приложений, знание работы с инфраструктурой, архитектурные стили, шаблоны и тактики.

Знание доменной области. Это знания подводных камней и возможностей обойти эти камни в какой-то конкретной области. Например, проблемы в gameDev будут отличаться от проблем при разработке или тестировании e-commerce. Это нарабатывается только опытным путем, и никак иначе. Почитав статьи, можно собрать информацию о типичных проблемах и как другие их решали. Но в реальности у каждого архитектора есть свое кладбище своих неудачных решений, на которых основан его опыт и знания, что можно или нельзя делать в этом домене. Более того, сеньерность архитектора увеличивается с количеством доменных областей, которые он знает.

Знание процессов разработки, тестирования, установки приложений, работы с инфраструктурой. Об этом очень много написано, существует огромное количество видео, тренингов. Тут каждому надо определить самому, какую область ему необходимо подтянуть и в каком количестве. Но хочу напомнить о базе, с которой начинается хорошая разработка и тестирование, которую сейчас несправедливо забывают - Роберт Мартин "Чистый код". Но справедливости ради, прикладываю статью и на альтернативное мнение "О книге Боба Мартина Чистый код"

Архитектурные стили, шаблоны и тактики. В IT как и у строителей существуют свои подходы для решения тех или иных проблем. Эти решения основываются на архитектурных стилях, шаблонах и тактиках.

  • Архитектурный стиль - это способ организации кода, который решает проблемы и предоставляет преимущества архитектурного решения . Например: клиент - сервер архитектура, монолит, микросервисная архитектура.

  • Архитектурный шаблон - это типовое решение для повторяющихся проблем. Говоря об архитектуре могу привести такие примеры: CQRS, шардирование.

  • Архитектурная тактика - это низкоуровневое решение конкретной архитектурной практической задачи.

Основной уклон архитектурных школ - это именно изучение стилей, шаблонов и тактик. Оставлю тут книгу, в которой хорошим и простым английским описаны практики архитекторов - Software Architecture in Practice (можно найти бесплатно в pdf формате). В следующих статьях я буду разбирать подробно эти практики.

Навык доверять

И самый последний навык архитекторов, который я хочу сегодня упомянуть - это навык доверять. Становясь архитектором надо четко осознавать то, что от некоторых привычных активностей и привычного контроля необходимо отказаться. Т.е. ответственность за код теперь лежит на плечах разработчиков, ответственность за тестирование - на тестировщиках, а командами управляют лиды команды. Архитекторы обычно - это бывшие лиды, вышедшие из сеньеров, и они знают как писать код, как делать ревью кода, как распределять задачи "лучше всех". Но на этом уровне необходимо команде доверить делать свою работу! Этот навык тоже развивается и начать можно с соответствующей литературы. Доверие в командах: зачем это нужно и как построить, Доверие в бизнесе

Заключение

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

В дальнейшем цикле статей все понятия, описанные выше, будут специализированы и раскрыты именно с точки зрения работы архитектора:

  • с кем архитекторы общаются и какие тактики общения и для чего при этом применяют,

  • разобраны архитектурные стили, шаблоны и тактики на примерах,

  • и так же прольется свет на такую загадочную деятельность как preSale,

  • и многое другое!

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru