Image for post
Image for post

If you either need to quickly deploy small API or just decided to migrate your codebase to leverage advantages of AWS Lambda, you can use a powerful combo of Flask and Serverless framework. In fact, any WSGI application such as Django or so.

There are of course other solutions how to do that, either packing and uploading your app by yourself or using Zappa. The process gets a bit more tricky when you realize some dependencies are not compatible (because of Linux on lambda) and you to handle that too. …


I have heard many rumours about hosting a website or platform on AWS. Many saying things like ‘AWS is not as efficient as ‘old-school’ hosting and/or a vertically scaled server somewhere in your server room…’ I’m not going to argue this point because it would be akin to arguing with MAGA voters. So, let’s ignore these haters and take a direct look at why AWS saves you money and offers more power, performance, scalability, reliability etc. than anything you could put together yourself — it’s the reason why everybody is moving to AWS.

To understand why this is the case, let’s take a direct look at some examples using our platform, AUTOPROP. …


At AUTOPROP, we’re always looking for ways to streamline our development processes. Our team is in beautiful central Europe — Budweis, Czech Republic, but our customers are in the far West of Vancouver, Canada. And, because we heavily leverage AWS, our production and staging servers are in Portland, Oregon. Distance = latency, and for years now we’ve just dealt with it.

Image for post
Image for post

Last week, I was chatting with a good friend of mine about this, and he suggested we try — queue the buzz word — ‘backendless’ development in Angular. He felt we could save a lot of time and headache waiting for our far-away servers. …


Last week, I tweeted that we gave up using SQS for our Celery workers because we determined that SQS is one of the worst options you have. And, I promised a blog post in comments, so here we are :)

Before we began testing SQS, this was our stack at AUTOPROP: We ran completely on AWS (except for a few services, such as user management). In the front we had two Webservers behind ELB, shooting new tasks to a bunch of workers — all managed by Celery. As a queue, we are used Redis (We were using RabbitMQ, but we had issues with Celery’s chords). Usually, we have 2 workers running all the time, and, in the daytime, we spin-up spot instances to increase power. In our case, we treat tasks a bit differently because our users expect to results ASAP. Most tasks are done in less than a second. Some of them could run up to 3–4 mins. As you would expect, it all depends on the actual task itself (some rendering, or geo query into our MongoDB replica). …


Pro lokální vývoj používáme HTTPS a Chrome od 58+ (vydáno 19-04-2017) začal vyhazovat problém s certifikátem (NET::ERR_CERT_COMMON_NAME_INVALID)

Image for post
Image for post

Problém je, že commonName pro identikaci nestačí a vyžaduje i subjectAltName a vygenerovat certifikát, který toto splňuje, mi chvilku trvalo. Tady návod, pokud by se někomu hodilo, případně jako future reference.

Pozn.: existuje workaround, kdy se povolí fallback na commonName, ale ten prý ve verzi 65 přestane fungovat.

  1. vygenerování privátního klíče (pokud ho ještě nemáte)
$ openssl req -nodes -new -x509 -keyout local.dev.key

2. config (openssl.cnf — je jedno, kde bude uložen)

[ req ]
default_bits = 2048
prompt = no
default_md = sha256
req_extensions = req_ext
distinguished_name =…


Včera jsme nasazovali novější verzi verzi Ubuntu (AWS ami-a9d276c9) která ale bohužel nemá Python 2 který je pro Ansible potřeba. Řešením je zakázat získávání faktů a v případě že chybí ho nainstalovat.

gather_facts: no
tasks:
# ensure python 2 is installed - required for Ansible
- name: install python 2
raw: test -e /usr/bin/python || (apt -y update && apt install -y python-minimal)
become: True


Image for post
Image for post

S3 - Simple Storage Service je na první pohled jedna z nejjednodušších služeb od AWS, ovšem věděli jste, kolik toho nabízí? Co vše se dá vykouzlit?

Je jednou z prvních služeb Amazonu. Jak je řečeno v názvu, je to jednoduché cloudové úložiště, ale umí toho mnohem víc, než by člověk čekal. Pojďme se na to podívat.

Trošku teorie, nebo spíš tedy co S3 má a nabízí, ale v rychlosti :)

Jak říká sám Amazon “Secure, durable, highly-scalable cloud storage — tedy bezpečné, spolehlivé, škálovatelné a také neomezené. Je to objektové(1) úložiště, které nám umožňuje ukládat soubory(2), v zásadě key-value store, kdy každý objekt může mít až 5 TB za cenu přibližně 8 haléřů za GB na měsíc (+ něco málo ze requesty). Soubory jsou uloženy v Bucketech(3) s univerzálním namespacem(4). read-after-write consistency pro nové objekty, ale už jen eventual consistency pro změny a mazání (5). 99.999999999% durability a 99.99% availability. AWS ekosystém (používání IAM). REST style HTTP (+ SOAP) interface. …


Nějak nám za poslední dobu narostla práce a nebyl čas moc publikovat, tak jsem si říkal, že něco zkusím sesmolit. O Ansiblu určitě ještě vyjde pokračování (mimochodem, mluvil jsem o něm na Wordpress weekendu — wpweekend.cz :))

Teď tedy k tématu. S klukama už přes rok a půl děláme na jednom zahraničním startupu, což je vlastně taková automatizační platforma, kompletně v Pythonu a běžící v AWS. Tak jsem si řekl, že zkusím dát trošku dohromady co a jak používáme a jaké máme zkušenosti.

S AWS jedeme od začátku a zkusili jsme hodně jejich služeb, i když hodně jsme jich po čase přestali používat a nahradili vlastními. Základ nám tvoří banda EC2 instancí (= VPSka), které dokážeme v řádu sekund vytvořit skrze jeden dobře mířený playbook. …


Jak jsem slíbil na konci minulého dílu, dneska se podíváme trošku blíž na to, jak udělat deployment lepší. Přidáme si deploy z gitu a nasadíme instalaci závislostí.

Jako příklad dnes budeme deployovat nette-quickstart. Ještě než se pustíme do úpravy našeho playbooku, tak si uděláme úpravu v inventáři. Předáme si instalační cestu parametrem.

[webservers]
webserver1 ansible_connection=local install_dir=/tmp/nette_app

Jak můžete vidět, místo adresy mám nastaveno ansible_connection=local, což znamená, že se vše provádí přímo na localhostu (je to jednodušší pro testování). Navíc jsem nastavil, že pro webserver1 bude install_dir /tmp/nette_app, což pak můžu odlišit pro další, které bych přidal. …


Dneska bych rád napsal něco o deploymentu, orchestraci, automatizaci a <dosaď co tě zrovna napadne>.

Ansible ve firmě nějakou dobu používáme a díky týmu lidí okolo jsem měl možnost vidět jaké můžou být opravdové benefity a jak to může ušetřit hodně času a starostí. Po přechodu z klasického FTP deploye se i přes řadu nástrojů, které tomu pomáhají, stane z nasazení nové verze aplikace s Ansiblem snad čirá radost. Dost ale superlativ a podíváme se blíž jak v tom něco udělat.

Disclaimer: Ansible funguje jen na Linuxu a MacOS a je potřeba SSH na cílovou mašinu. …

About

Michal Haták

#Python #AWS #Angular #Autoprop

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store