Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from flask import Flask
- #este objeto representa a Web App Flask
- amFlask = Flask(__name__)
- @amFlask.route("/") #decor, decoration (há alternativa)
- def handlerRoot():
- return("<h1>Hello from the root!</h1>")
- @amFlask.route("/batatas") #decor, decoration
- def handlerBatatas():
- return("<mark>Batatas Fritas</mark>")
- @amFlask.route("/hello/<pName>") #decor, decoration (há alternativa)
- def handlerHello(pName:str):
- return("<h1>Hello %s </h1>"%pName)
- *******
- requirements.txt
- pylint
- pytest
- flask
- black
- gunicorn
- ******
- app.yaml
- runtime: python38
- entrypoint: gunicorn -w 2 my_code:amFlask
- ******
- https://pastebin.com/Vy9JvrSn
- Bom dia!
- CC CN
- 2022-03-30
- IaaS
- ..
- PaaS
- PaaS para publicação de Web Apps
- Flask
- AWS e GCP
- GCP = "App Engine"
- AWS = "Elastic Beanstalk" "EB"
- Intro to the Flask framework
- GCP@IaaS "GCS" - máquina virtual + dev env
- flask run #127.0.0.1:5000
- PaaS = por exemplo, quando se utiliza o editor, e o terminal e as ferramentas específicas para se fazerem chamadas => os comandos que começam por gcloud, ou aws
- download "gcloud sdk cli"
- download "aws cli" => os comandos começam por aws
- momento da publicação
- o nosso código
- a Web App
- A Flask Web App
- terá q funcionar nalgum ambiente (App Engine, Elastic Beanstalk,...)
- Duas possibilidades:
- - o espaço de publicação pode ser partilhado por todos os utilizadores da plataforma (workflows consistentes), há restrições "apertadas" relativamente ao ato da publicação e também quanto ao que o código pode fazer.
- Tipicamente NÃO se terá acesso ao sistema de ficheiros.
- Então, como fazer storage?
- Criando objetos "não hierárquicos" (flat-structured), chamados "Buckets", que são contentores de "storage", portanto de outros objetos de arquivo.
- bucket = {o1, o2}
- bucket1 = {"code.py", "test_code.py", "templates/t1.html", "templates/t2.html"}
- $fw = fopen("f1.txt", "w")
- fw = open(file="f1.txt", "a")
- Alternativa aos buckets: BDs
- BDR (MySQL)
- "NoSQL"
- Uma abordagem alternativa à publicação (pode implicar um tempo de deployment +elevado)
- apenas nome comercial: "Elastic Beanstalk" "EB"
- criar um "environment" para cada "web app"
- O environment será um contentor nalgum "runtime"
- Os runtimes possíveis dependem do provider e correspondem a um dos elementos de abstração em PaaS.
- AWS + GCP
- ***
- A publicação consiste no upload dos documentos que componham a web app e pode implicar a criação de outros elementos cloud:
- - storage (bucket)
- - compute (contentor)
- - endereço (domain name)
- - load balancer (distribuidor de tráfego)
- - utilizador...
- pay-as-you-go
- "serverless"
- "trustless"
- "Cloud9"
- "EB"
- último aspeto:
- todos os providers têm instrumentos para minimizar tráfego e consumo de storage durante o ato da publicação.
- Tipicamente, na forma de um ficheiro "ignore" que descreve ficheiros que NÃO pretendemos fazer upload para a plataforma, por não serem necessários. Por outro lado, há que comunicar à plataforma os requisitos da nossa app, e isso faz-se por ficheiro de "requirements".
- Exemplos:
- em AWS, o que não é para publicar, pode ser descrito em .ebignore
- em GCP, chama-se ".gcloudignore"
- Em ambos os casos os requisitos podem ser descritos em "requirements.txt"
- *SE* quisermos mimetizar os requisitos do ambiente em que se fez dev, podemos fazer o seguinte:
- python3 -m pip install requisito
- python3 -m pip freeeze > requirements.txt
- nomeDeModuloRequisitado==1.0
- nomeDeModuloRequisitado2==12.0.3
- gcloud projects list
- gcloud config set project <prj-id>
- gcloud config set project ERRADO
- gcloud app deploy
- https://testprj220322.nw.r.appspot.com/
- noip.com
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement