Advertisement
am_dot_com

CN 2022-03-30

Mar 30th, 2022 (edited)
36
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.65 KB | None | 0 0
  1. from flask import Flask
  2.  
  3. #este objeto representa a Web App Flask
  4. amFlask = Flask(__name__)
  5.  
  6. @amFlask.route("/") #decor, decoration (há alternativa)
  7. def handlerRoot():
  8. return("<h1>Hello from the root!</h1>")
  9.  
  10. @amFlask.route("/batatas") #decor, decoration
  11. def handlerBatatas():
  12. return("<mark>Batatas Fritas</mark>")
  13.  
  14. @amFlask.route("/hello/<pName>") #decor, decoration (há alternativa)
  15. def handlerHello(pName:str):
  16. return("<h1>Hello %s </h1>"%pName)
  17.  
  18. *******
  19.  
  20. requirements.txt
  21.  
  22. pylint
  23. pytest
  24. flask
  25. black
  26. gunicorn
  27.  
  28. ******
  29.  
  30. app.yaml
  31.  
  32. runtime: python38
  33. entrypoint: gunicorn -w 2 my_code:amFlask
  34.  
  35. ******
  36. https://pastebin.com/Vy9JvrSn
  37.  
  38. Bom dia!
  39.  
  40. CC CN
  41. 2022-03-30
  42.  
  43. IaaS
  44. ..
  45. PaaS
  46. PaaS para publicação de Web Apps
  47. Flask
  48. AWS e GCP
  49. GCP = "App Engine"
  50. AWS = "Elastic Beanstalk" "EB"
  51.  
  52. Intro to the Flask framework
  53.  
  54. GCP@IaaS "GCS" - máquina virtual + dev env
  55. flask run #127.0.0.1:5000
  56.  
  57. 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
  58. download "gcloud sdk cli"
  59. download "aws cli" => os comandos começam por aws
  60.  
  61. momento da publicação
  62. o nosso código
  63. a Web App
  64. A Flask Web App
  65. terá q funcionar nalgum ambiente (App Engine, Elastic Beanstalk,...)
  66.  
  67. Duas possibilidades:
  68. - 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.
  69. Tipicamente NÃO se terá acesso ao sistema de ficheiros.
  70. Então, como fazer storage?
  71. Criando objetos "não hierárquicos" (flat-structured), chamados "Buckets", que são contentores de "storage", portanto de outros objetos de arquivo.
  72. bucket = {o1, o2}
  73. bucket1 = {"code.py", "test_code.py", "templates/t1.html", "templates/t2.html"}
  74.  
  75.  
  76. $fw = fopen("f1.txt", "w")
  77. fw = open(file="f1.txt", "a")
  78.  
  79. Alternativa aos buckets: BDs
  80. BDR (MySQL)
  81. "NoSQL"
  82.  
  83. Uma abordagem alternativa à publicação (pode implicar um tempo de deployment +elevado)
  84. apenas nome comercial: "Elastic Beanstalk" "EB"
  85.  
  86. criar um "environment" para cada "web app"
  87. O environment será um contentor nalgum "runtime"
  88. Os runtimes possíveis dependem do provider e correspondem a um dos elementos de abstração em PaaS.
  89. AWS + GCP
  90.  
  91. ***
  92.  
  93. A publicação consiste no upload dos documentos que componham a web app e pode implicar a criação de outros elementos cloud:
  94. - storage (bucket)
  95. - compute (contentor)
  96. - endereço (domain name)
  97. - load balancer (distribuidor de tráfego)
  98. - utilizador...
  99.  
  100. pay-as-you-go
  101.  
  102. "serverless"
  103.  
  104. "trustless"
  105.  
  106. "Cloud9"
  107. "EB"
  108.  
  109. último aspeto:
  110. todos os providers têm instrumentos para minimizar tráfego e consumo de storage durante o ato da publicação.
  111.  
  112. 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".
  113.  
  114. Exemplos:
  115. em AWS, o que não é para publicar, pode ser descrito em .ebignore
  116. em GCP, chama-se ".gcloudignore"
  117.  
  118. Em ambos os casos os requisitos podem ser descritos em "requirements.txt"
  119.  
  120. *SE* quisermos mimetizar os requisitos do ambiente em que se fez dev, podemos fazer o seguinte:
  121.  
  122. python3 -m pip install requisito
  123. python3 -m pip freeeze > requirements.txt
  124.  
  125. nomeDeModuloRequisitado==1.0
  126. nomeDeModuloRequisitado2==12.0.3
  127.  
  128. gcloud projects list
  129. gcloud config set project <prj-id>
  130. gcloud config set project ERRADO
  131. gcloud app deploy
  132.  
  133. https://testprj220322.nw.r.appspot.com/
  134.  
  135. noip.com
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement