Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

The Rise of Mobility

43 views

Published on

La sfida che molti software engineers devono affrontare oggi è di poter lavorare in mobilità, velocemente, ovunque, senza essere vincolati ad un singolo dispositivo, né tanto meno dover rischiare di perdere dati. La chiamiamo sfida in quanto, come software engineers, siamo abitudinari, ci affezioniamo ai nostri ambienti di sviluppo, alle nostre shortcuts e non amiamo dover migrare o allineare progetti. E se solo ci fosse un tasto da premere per teletrasportare il proprio ambiente di sviluppo, le proprie configurazioni e il proprio codice ancora non pronto per essere committato (ops), da un device all'altro?
Grazie alla forte connettività (si spera), all'automazione (mica tanta), e all'indipendenza tra componenti (questo sì), abbiamo pensato di spostare anche l'ambiente di sviluppo al di fuori dei nostri device fisici. In questo talk, presenteremo una soluzione estremamente semplice, completamente gestita, per sviluppare semplici API REST, o un intero stack BigData, ed avere sempre a disposizione tutte le risorse necessarie per portare a termine il lavoro.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

The Rise of Mobility

  1. 1. The Rise of Mobility
  2. 2. Guido Nebiolo Matteo Madeddu
  3. 3. - Il Problema - La Soluzione   - Core   - API - Sviluppi - Q&A
  4. 4. Il Problema
  5. 5. Questo è … {{your_name}}
  6. 6. Matteo viaggia molto
  7. 7. Non è troppo in forma
  8. 8. Non è troppo in forma
  9. 9. E’ sempre nelle curve
  10. 10. Lancia spesso npm i
  11. 11. In pratica, Matteo ha un po’ di guai da risolvere
  12. 12. ?? In pratica, Matteo ha un po’ di guai da risolvere
  13. 13. !!! Idea: portable code environment in cloud!
  14. 14. Idea: portable code environment in cloud!
  15. 15. Idea: portable code environment in cloud!
  16. 16. e IoT Button come laptop !!!
  17. 17. La soluzione
  18. 18. ImplementazioneSoluzione CoreAPIButton
  19. 19. !!!
  20. 20. La soluzione Core
  21. 21. ImplementazioneSoluzione CoreAPIButton
  22. 22. github.com/cdr/code-server Visual Code Studio - Server
  23. 23. Creazione dell’ambiente di sviluppo
  24. 24. MyCodeServerInstance: Type: "AWS::EC2::Instance" Properties: ImageId: String # OS image to run on instance InstanceType: String # CPU, Ram, network, etc KeyName: String # KeyPair name SubnetId: String # Subnet ID UserData: String # Run commands MeteData: String # cfn-init Volumes: # Volume attached - Volume Step 1: Creazione Della Macchina
  25. 25. Step 2: Configurazione dell’Ambiente di Sviluppo
  26. 26.   UserData: # UserData section     !Base64:       !Join: # Steps to run the init session         - ""         - - "#!/bin/bash -xen"           - "/opt/aws/bin/cfn-init -v "           - "         --stack "           - !Ref AWS::StackName           - "         --resource CodeServerPublicInstance"           - "         --configsets end-to-end"           - "         --region "           - !Ref AWS::Region           - "n"   Metadata: # MetaData section     AWS::CloudFormation::Init:       configSets:         end-to-end:           - Install # Steps to install packages           - Setup # Steps to setup development environment           - Service # Steps to run the service      Install:         packages:           yum:             docker: [] # Install base packages             wget: []             gzip: []             git: [] ……
  27. 27. # Steps to setup development environment …… Setup:    # Retrieve of secrets from AWS vault files:      "/etc/pki/CA/private/cert1.pem":        content:          Fn::Join:            - ""            - - ""              - !Ref CertificateParameterName       mode: "000600"        owner: root        group: root       "/etc/pki/CA/private/privkey1.pem":        content:          Fn::Join:            - ""            - - ""              - !Ref PrivateKeyParameterName       mode: "000600"        owner: root        group: root
  28. 28. # Steps to setup development environment …… Setup: …… # Commands to install environment commands: 020-wget:    command: wget https://github.com/cdr/code-server/releases/ download/1.1156-vsc1.33.1/code-server1.1156-vsc1.33.1-linux- x64.tar.gz     cwd: “~"   030-untar-cleanup:     command: tar -xvzf code-server1.1156-vsc1.33.1-linux- x64.tar.gz && cp code-server1.1156-vsc1.33.1-linux-x64/code- server /usr/bin/ && rm -rf code-server1.1156-vsc1.33.1-linux- x64*     cwd: “~"    040-chmod-bin:    command: chmod +x /usr/bin/code-server      cwd: "~" ……
  29. 29. Step 3: Accesso Web
  30. 30. Parametri
  31. 31. - Chiavi SSH - Configurazione Certificati - Password di Accesso - Domini - Volumi
  32. 32. Un volume
  33. 33. Più volumi
  34. 34. workspace:/ project A workspace:/ project B workspace:/ project C Diversi progetti
  35. 35. workspace:/ customer 1 workspace:/ customer 2 workspace:/ customer 3 Diversi clienti
  36. 36. small type:/ dev env medium type:/ test env data type:/ prod env Diversi scopi
  37. 37. small type:/ dev env medium type:/ test env data type:/ prod env Diversi scopi
  38. 38. La soluzione API
  39. 39. ImplementazioneSoluzione CoreAPIButton
  40. 40. ImplementazioneSoluzione CoreAPIButton
  41. 41. ImplementazioneSoluzione CoreAPIButton
  42. 42. API Demo!
  43. 43. Questo è … SAM
  44. 44. …… Resources:    API:      Type: AWS::Serverless::Api      Properties:        StageName: !Ref Stage        Auth:          DefaultAuthorizer: AWS_IAM          InvokeRole: NONE   Microservice:      Type: AWS::Serverless::Function      Properties:        CodeUri: MicroserviceAPI/        Handler: index.handler        Runtime: nodejs10.x ……
  45. 45. Lambda Button
  46. 46. def launch_stack(configuration_item):     stackdata = None     # fingers crossed     try:         # generate a `minimum_password_length` random password if not  # defined in configuration item parameter         configuration_item["app_password"] = "".join(             random.choices(string.ascii_letters + string.digits,  k=minimum_password_length))              if "app_password" not in configuration_item.keys()              else configuration_item["app_password"]         # map configuration item parameters to stack parameters         parameters = list(map(lambda x: {             "ParameterKey": f"{snake_to_camelcase(x)[0].upper()} {snake_to_camelcase(x)[1:]}",             "ParameterValue": configuration_item[x]         }, configuration_item.keys()))         response = microservice_api.create_environment(parameters)         stackdata = response.text     except Exception as e:         logging.error(str(e))     return stackdata
  47. 47. Lambda API
  48. 48. Lambda API github.com/jeremydaly/lambda-api
  49. 49. const api = require('lambda-api')(); const _ = require('lodash') const stackLib = require('./stack') api.post('/environments', async (req, res) => {   // Check if a body is provided   if (req.body === undefined || req.body == “") throw Error("No required stack parameters specified.");   // Isolate required UserId property and throw error if not defined   var userId = _.get(_.find(req.body, (parameter) =>  parameter.ParameterKey == "UserId"), "ParameterValue", undefined);   if (userId === undefined || userId == “") throw Error("No user id specified.");   return await stackLib.createStack(userId, req.body); }) api.delete('/environments/:environment', async (req, res) => {   return await stackLib.deleteStack(req.params.environment); }) api.get('/environments/:environment', async (req, res) => {   result = await stackLib.getStack(req.params.environment);   if (condition) res.error(404, 'Not found’);   else return result; }) module.exports = api
  50. 50. Demo
  51. 51. Sviluppi
  52. 52. Frontend per amministrazione
  53. 53. Chatbot & Multitenancy
  54. 54. github.com/made2591/fullstackconf19 Codice, materiali, slide
  55. 55. Guido Nebiolo Matteo Madeddu
  56. 56. Grazie
  57. 57. Q & A

×