SlideShare a Scribd company logo
1 of 48
Download to read offline
Building Infrastructure as
Code with Typescript and
AWS CDK
by Andrea Valentini & Cristian Valeri
Agenda
● DevOps
● Infrastructure as Code
● AWS CDK
● Costrutti
● App & Stack
● Env, Assets & ACL
about me
Perchè DevOps?
Perchè DevOps atto 2
DevOps: Un po’ Dev un po’ Ops?
Definizione Wikipedia: “In informatica DevOps (dalla contrazione
inglese di development, "sviluppo", e operations, qui simile a "messa
in produzione" o "deployment") è un metodo di sviluppo del software
che punta alla comunicazione, collaborazione e integrazione tra
sviluppatori e addetti alle operations della information technology
(IT). DevOps vuole rispondere all'interdipendenza tra sviluppo
software e IT operations, puntando ad aiutare un'organizzazione a
sviluppare in modo più rapido ed efficiente prodotti e servizi
software.”
“DevOps is not a new technology or a product, it's an
approach or culture of software development that seeks
stability and performance at the same time that it speeds
software deliveries to the business”
- Andi Mann - CA Technologies -
DevOps significa:
Essere organizzati, responsabili, coinvolti e
collaborativi.
Avere servizi IT sempre più automatizzati =
risorse più libere da lavori ripetitivi (ma
necessari)
Impiegare meglio il tempo e concentrarsi sulla
progettazione del software e delle
infrastrutture
DevOps or not DevOps?
● Chi si occupa di mantenere il software deve essere considerato un “first class
citizen”
● Considerare sempre un “Developer On Call” che affiancherà chi mantiene
l’applicazione se necessario.
● Attivare processi di Continous Integration e Continous Delivery. Minore
intervento umano significa minore rischio di errore.
● Ridurre le barriere di comunicazione tra team di sviluppo e sistemisti
● Automatizzare quanto piu’ possibile il bug fixing sui sistemi
● Monitorare in maniera efficiente tutte le componenti aziendali per ridurre gli
errori
...evitando che...
Processi a confronto
DevOps = Cambiamento
Comunicazione
Condivisione Obiettivi
Collaborazione
Rispetto e Fiducia
“Mettersi insieme è un inizio, rimanere insieme è un progresso, lavorare insieme un
successo.” - Henry Ford
Thank You
about me
INFRASTRUCTURE AS CODE
Infrastructure as Code
“is the process of managing and provisioning
computer data centers through machine-
readable definition files, rather than physical
hardware configuration or interactive
configuration tools.”
Infrastructure as Code
1. Ottimizzazione dei costi:
elimina la componente manuale del deployment, riducendo il numero di persone necessarie al
completamento dei task .
2. Maggiore velocità di deploy
permette di effettuare velocemente il deployment di macchine identiche ad altre già definite in
precedenza.
3. Riduzione dei rischi
separare la definizione delle best practices e delle caratterisitiche ”fisiche” dalla fase di
deployment riduce i rischi derivanti da errate configurazioni sia per eventuali
malfunzionamenti che per problemi di sicurezza.
4. Controllo di consistenza
permette di controllare e nel caso forzare la compliance della configurazione di una macchina
con uno standard ben definito.
AWS Cloudformation
AWS CDK (Cloud Development Kit)
AWS CDK: Requirements
$ pip3 install awscli --upgrade --user
$ npm install -g typescript@latest
$ npm install -g aws-cdk
$ cdk init sample-app --language
typescript
CDK Construct Library
Composizione
Usare i Costrutti
import s3 = require('@aws-cdk/aws-s3');
// ...
new s3.Bucket(this, 'MyFirstBucket', {
versioned: true,
encryption: s3.BucketEncryption.KMS,
websiteIndexDocument: 'index.html'
});
// ...
Usare i Costrutti
const rawData = new s3.Bucket(this,
'raw-data');
const dataScience = new iam.Group(this,
'data-science');
rawData.grantRead(dataScience);
Usare i Costrutti
const jobsQueue = new sqs.Queue(this, 'jobs');
const createJobLambda = new lambda.Function(this,
'create-job', {
runtime: lambda.Runtime.NODEJS_8_10,
handler: 'index.handler',
code:
lambda.Code.fromAsset('./create-job-lambda-code'),
environment: {
QUEUE_URL: jobsQueue.queueUrl
}
});
Creare Costrutti
export interface NBProps {
prefix?: string;
}
export class NotifyingBucket extends Construct {
constructor(scope: Construct, id: string, props:
NBProps = {}) {
super(scope, id);
const bucket = new s3.Bucket(this, 'bucket');
this.topic = new sns.Topic(this, 'topic');
bucket.addObjectCreatedNotification(topic, { prefix:
props.prefix });
}
}
Creare Costrutti
const queue = new sqs.Queue(this,
'NewImagesQueue');
const images = new NotifyingBucket(this,
'Images');
images.topic.addSubscription(new
sns_sub.QueueSubscription(queue));
App & Stack
App & Stack - Stack
class MyFirstStack extends Stack {
constructor(scope: Construct, id:
string, props: StackProps){
super(scope, id, props);
new s3.Bucket(this, 'MyFirstBucket');
}
}
App & Stack - Stack
class ControlPlane extends Stack {}
class Dataplane extends Stack {}
class Monitoring extends Stack {}
class MyService extends cdk.Construct {
constructor(scope: Construct, id: string, props?: EnvProps)
{
super(scope, id);
new ControlPlane(this, "cp", {});
new Dataplane(this, "data", {});
new Monitoring(this, "mon", {});
}
}
App & Stack - Stack
const app = new cdk.App();
new MyService(app, "beta");
new MyService(app, "prod",
{
prod: true
});
app.synth();
$ cdk ls
betacpDA8372D3
betadataE23DB2BA
betamon632BD457
prodcp187264CE
proddataF7378CE5
prodmon631A1083
App & Stack - Stack
const prod = { account: '123456789012', region:
'us-east-1' };
const stack1 = new StackThatProvidesABucket(app,
'Stack1' , { env: prod });
// stack2 will take a property { bucket: IBucket }
const stack2 = new StackThatExpectsABucket(app,
'Stack2', {
bucket: stack1.bucket,
env: prod
});
App & Stack - Importing External Resources
Bucket.fromName(this, 'Bucket', 'my-bucket-name');
Bucket.fromArn(this, 'Bucket',
'arn:aws:s3:::my-bucket-name');
// Construct a resource by giving more than one
attribute Resource.fromAttributes(this,
'MyResource', {
resourceName: 'booh',
vpc: vpc
});
App & Stack - App
class MyApp extends App {
constructor() {
new MyFirstStack(this, 'hello-cdk');
}
}
new MyApp().synth();
App & Stack - App LifeCycle
Assets
import { Asset } from '@aws-cdk/aws-s3-assets';
// Archived and uploaded to Amazon S3 as a .zip file
const directoryAsset = new Asset(this,
"SampleZippedDirAsset", {
path: path.join(__dirname, "sample-asset-directory")
});
// Uploaded to Amazon S3 as-is
const fileAsset = new Asset(this, 'SampleFileAsset', {
path: path.join(__dirname, 'file-asset.txt')
});
Assets
import {Stack, Construct, StackProps } =
require('@aws-cdk/core');
import lambda = require('@aws-cdk/aws-lambda');
export class HelloAssetStack extends Stack {
constructor(scope: Construct, id: string, props?:StackProps) {
super(scope, id, props);
new lambda.Function(this, 'myLambdaFunction', {
code: lambda.Code.asset(path.join(__dirname, 'handler')),
runtime: lambda.Runtime.NODE,
handler: 'index.handler'
});
}
}
Permessi e ACL
import iam = require('@aws-cdk/aws-iam');
const role = new iam.Role(this, 'Role', {
assumedBy: new iam.ServicePrincipal('ec2.amazonaws.com'),});
const policy = new iam.PolicyStatement({
effect: iam.Effect.DENY,
resources: [bucket.bucketArn, otherRole.roleArn],
actions: ['ec2:SomeAction', 's3:AnotherAction'],
conditions: {StringEquals: {
'ec2:AuthorizedService': 'codebuild.amazonaws.com',
}}});
role.addToPolicy(policy);
ENV
const envEU = { account: '2383838383',
region: 'eu-west-1' };
const envUSA = { account: '8373873873',
region: 'us-west-1' };
new MyFirstStack(this, 'first-stack-us', {
env: envUSA, encryption: false });
new MyFirstStack(this, 'first-stack-eu', {
env: envEU, encryption: true });
ENV
new MyStack(this, 'dev', {
env: {
account:
process.env.CDK_DEFAULT_ACCOUNT
region:
process.env.CDK_DEFAULT_REGION
}});
Info & Resources
● Construct Library API Reference:
https://docs.aws.amazon.com/cdk/api/latest/docs/a
ws-construct-library.html
● CDK Examples:
https://github.com/aws-samples/aws-cdk-examples
Thank You

More Related Content

What's hot

Workshop ASP.NET Core e Angular in produzione con Docker e Kubernetes
Workshop ASP.NET Core e Angular in produzione con Docker e KubernetesWorkshop ASP.NET Core e Angular in produzione con Docker e Kubernetes
Workshop ASP.NET Core e Angular in produzione con Docker e Kubernetesblexin
 
Javascript task automation
Javascript task automationJavascript task automation
Javascript task automationDotNetCampus
 
Introduzione a Service Fabric e Actor Model
Introduzione a Service Fabric e Actor ModelIntroduzione a Service Fabric e Actor Model
Introduzione a Service Fabric e Actor ModelAndrea Tosato
 
kube-green | Davide Bianchi
kube-green | Davide Bianchikube-green | Davide Bianchi
kube-green | Davide BianchiKCDItaly
 
Azure functions deep dive - Giorgio Di Nardo - Codemotion Rome 2017
Azure functions deep dive - Giorgio Di Nardo - Codemotion Rome 2017Azure functions deep dive - Giorgio Di Nardo - Codemotion Rome 2017
Azure functions deep dive - Giorgio Di Nardo - Codemotion Rome 2017Codemotion
 
UI Composition - Prism
UI Composition - PrismUI Composition - Prism
UI Composition - PrismDotNetMarche
 
2015.04.23 Azure Community Bootcamp 2015 Keynote Italy
2015.04.23 Azure Community Bootcamp 2015 Keynote Italy2015.04.23 Azure Community Bootcamp 2015 Keynote Italy
2015.04.23 Azure Community Bootcamp 2015 Keynote ItalyMarco Parenzan
 
.NET Core, ASP.NET Core e Linux per il Mobile
.NET Core, ASP.NET Core e Linux per il Mobile.NET Core, ASP.NET Core e Linux per il Mobile
.NET Core, ASP.NET Core e Linux per il MobilePietro Libro
 
Meetup Azure DevOps
Meetup Azure DevOpsMeetup Azure DevOps
Meetup Azure DevOpsdotnetcode
 
Meetup ASP.NET Core 2 e Docker
Meetup ASP.NET Core 2 e Docker Meetup ASP.NET Core 2 e Docker
Meetup ASP.NET Core 2 e Docker dotnetcode
 
Async: scalabilità e responsiveness senza pari! @ CDays
Async: scalabilità e responsiveness senza pari! @ CDaysAsync: scalabilità e responsiveness senza pari! @ CDays
Async: scalabilità e responsiveness senza pari! @ CDaysMatteo Baglini
 
ASP.NET AND Azure Function
ASP.NET AND Azure FunctionASP.NET AND Azure Function
ASP.NET AND Azure FunctionLuca Congiu
 
[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourci...
[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourci...[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourci...
[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourci...Andrea Balducci
 
Deploy & Run on Azure App Service
Deploy & Run on Azure App ServiceDeploy & Run on Azure App Service
Deploy & Run on Azure App ServiceAndrea Dottor
 
Blazor per uno sviluppatore Web Form
Blazor per uno sviluppatore Web FormBlazor per uno sviluppatore Web Form
Blazor per uno sviluppatore Web FormAndrea Dottor
 
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente Andrea Dottor
 
Del furia signalr-to-the-max
Del furia   signalr-to-the-maxDel furia   signalr-to-the-max
Del furia signalr-to-the-maxDotNetCampus
 
ASP.NET Core - dove siamo arrivati
ASP.NET Core - dove siamo arrivatiASP.NET Core - dove siamo arrivati
ASP.NET Core - dove siamo arrivatiAndrea Dottor
 
Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...
Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...
Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...Codemotion
 
ARCHITETTURA DI UN'APPLICAZIONE SCALABILE
ARCHITETTURA DI UN'APPLICAZIONE SCALABILEARCHITETTURA DI UN'APPLICAZIONE SCALABILE
ARCHITETTURA DI UN'APPLICAZIONE SCALABILEDotNetCampus
 

What's hot (20)

Workshop ASP.NET Core e Angular in produzione con Docker e Kubernetes
Workshop ASP.NET Core e Angular in produzione con Docker e KubernetesWorkshop ASP.NET Core e Angular in produzione con Docker e Kubernetes
Workshop ASP.NET Core e Angular in produzione con Docker e Kubernetes
 
Javascript task automation
Javascript task automationJavascript task automation
Javascript task automation
 
Introduzione a Service Fabric e Actor Model
Introduzione a Service Fabric e Actor ModelIntroduzione a Service Fabric e Actor Model
Introduzione a Service Fabric e Actor Model
 
kube-green | Davide Bianchi
kube-green | Davide Bianchikube-green | Davide Bianchi
kube-green | Davide Bianchi
 
Azure functions deep dive - Giorgio Di Nardo - Codemotion Rome 2017
Azure functions deep dive - Giorgio Di Nardo - Codemotion Rome 2017Azure functions deep dive - Giorgio Di Nardo - Codemotion Rome 2017
Azure functions deep dive - Giorgio Di Nardo - Codemotion Rome 2017
 
UI Composition - Prism
UI Composition - PrismUI Composition - Prism
UI Composition - Prism
 
2015.04.23 Azure Community Bootcamp 2015 Keynote Italy
2015.04.23 Azure Community Bootcamp 2015 Keynote Italy2015.04.23 Azure Community Bootcamp 2015 Keynote Italy
2015.04.23 Azure Community Bootcamp 2015 Keynote Italy
 
.NET Core, ASP.NET Core e Linux per il Mobile
.NET Core, ASP.NET Core e Linux per il Mobile.NET Core, ASP.NET Core e Linux per il Mobile
.NET Core, ASP.NET Core e Linux per il Mobile
 
Meetup Azure DevOps
Meetup Azure DevOpsMeetup Azure DevOps
Meetup Azure DevOps
 
Meetup ASP.NET Core 2 e Docker
Meetup ASP.NET Core 2 e Docker Meetup ASP.NET Core 2 e Docker
Meetup ASP.NET Core 2 e Docker
 
Async: scalabilità e responsiveness senza pari! @ CDays
Async: scalabilità e responsiveness senza pari! @ CDaysAsync: scalabilità e responsiveness senza pari! @ CDays
Async: scalabilità e responsiveness senza pari! @ CDays
 
ASP.NET AND Azure Function
ASP.NET AND Azure FunctionASP.NET AND Azure Function
ASP.NET AND Azure Function
 
[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourci...
[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourci...[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourci...
[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourci...
 
Deploy & Run on Azure App Service
Deploy & Run on Azure App ServiceDeploy & Run on Azure App Service
Deploy & Run on Azure App Service
 
Blazor per uno sviluppatore Web Form
Blazor per uno sviluppatore Web FormBlazor per uno sviluppatore Web Form
Blazor per uno sviluppatore Web Form
 
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
 
Del furia signalr-to-the-max
Del furia   signalr-to-the-maxDel furia   signalr-to-the-max
Del furia signalr-to-the-max
 
ASP.NET Core - dove siamo arrivati
ASP.NET Core - dove siamo arrivatiASP.NET Core - dove siamo arrivati
ASP.NET Core - dove siamo arrivati
 
Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...
Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...
Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...
 
ARCHITETTURA DI UN'APPLICAZIONE SCALABILE
ARCHITETTURA DI UN'APPLICAZIONE SCALABILEARCHITETTURA DI UN'APPLICAZIONE SCALABILE
ARCHITETTURA DI UN'APPLICAZIONE SCALABILE
 

Similar to Building infrastructure as code with typescript and aws cdk

Machine learning models continuous deployment on azure using devops
Machine learning models continuous deployment on azure using devopsMachine learning models continuous deployment on azure using devops
Machine learning models continuous deployment on azure using devopsIgor Antonacci
 
Infrastructure as Code e metodologia DevOps
Infrastructure as Code e metodologia DevOpsInfrastructure as Code e metodologia DevOps
Infrastructure as Code e metodologia DevOpsPietro Ciotola
 
Red Hat OpenShift: l'abilitatore della Cloud Native Enterprise
Red Hat OpenShift: l'abilitatore della Cloud Native EnterpriseRed Hat OpenShift: l'abilitatore della Cloud Native Enterprise
Red Hat OpenShift: l'abilitatore della Cloud Native EnterpriseKiratech
 
Progetto DrFacto (sintesi)
Progetto DrFacto (sintesi)Progetto DrFacto (sintesi)
Progetto DrFacto (sintesi)Herzum Italia
 
05 azure well architected framework
05 azure well architected framework05 azure well architected framework
05 azure well architected frameworkRauno De Pasquale
 
Cloud e innovazione
Cloud e innovazioneCloud e innovazione
Cloud e innovazioneXPeppers
 
Progetto e implementazione di una pipeline di sviluppo software con tecnologi...
Progetto e implementazione di una pipeline di sviluppo software con tecnologi...Progetto e implementazione di una pipeline di sviluppo software con tecnologi...
Progetto e implementazione di una pipeline di sviluppo software con tecnologi...Mattia Milleri
 
Rich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.jsRich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.jsGiorgio Di Nardo
 
Abilitare le organizzazioni e le persone ad adottare con successo il Cloud
Abilitare le organizzazioni e le persone ad adottare con successo il CloudAbilitare le organizzazioni e le persone ad adottare con successo il Cloud
Abilitare le organizzazioni e le persone ad adottare con successo il CloudAmazon Web Services
 
Paper presentazione social media
Paper presentazione social mediaPaper presentazione social media
Paper presentazione social mediaalessioemireni
 
2015.01.09 - Principi del Cloud Computing e migrazione delle applicazioni mod...
2015.01.09 - Principi del Cloud Computing e migrazione delle applicazioni mod...2015.01.09 - Principi del Cloud Computing e migrazione delle applicazioni mod...
2015.01.09 - Principi del Cloud Computing e migrazione delle applicazioni mod...Marco Parenzan
 
2011.06.30 scenari applicativi per il cloud computing
2011.06.30   scenari applicativi per il cloud computing2011.06.30   scenari applicativi per il cloud computing
2011.06.30 scenari applicativi per il cloud computingMarco Parenzan
 
01 azure well architected framework
01 azure well architected framework01 azure well architected framework
01 azure well architected frameworkRauno De Pasquale
 
Smau milano 2012 fabrizio amarilli architettura
Smau milano 2012 fabrizio amarilli architetturaSmau milano 2012 fabrizio amarilli architettura
Smau milano 2012 fabrizio amarilli architetturaSMAU
 
Studio e implementazione di una soluzione per l'automazione di test di sicure...
Studio e implementazione di una soluzione per l'automazione di test di sicure...Studio e implementazione di una soluzione per l'automazione di test di sicure...
Studio e implementazione di una soluzione per l'automazione di test di sicure...Andrea Foppiani
 
Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1
Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1
Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1dotnetcode
 

Similar to Building infrastructure as code with typescript and aws cdk (20)

Machine learning models continuous deployment on azure using devops
Machine learning models continuous deployment on azure using devopsMachine learning models continuous deployment on azure using devops
Machine learning models continuous deployment on azure using devops
 
Infrastructure as Code e metodologia DevOps
Infrastructure as Code e metodologia DevOpsInfrastructure as Code e metodologia DevOps
Infrastructure as Code e metodologia DevOps
 
Red Hat OpenShift: l'abilitatore della Cloud Native Enterprise
Red Hat OpenShift: l'abilitatore della Cloud Native EnterpriseRed Hat OpenShift: l'abilitatore della Cloud Native Enterprise
Red Hat OpenShift: l'abilitatore della Cloud Native Enterprise
 
Progetto DrFacto (sintesi)
Progetto DrFacto (sintesi)Progetto DrFacto (sintesi)
Progetto DrFacto (sintesi)
 
05 azure well architected framework
05 azure well architected framework05 azure well architected framework
05 azure well architected framework
 
Cloud e innovazione
Cloud e innovazioneCloud e innovazione
Cloud e innovazione
 
Progetto e implementazione di una pipeline di sviluppo software con tecnologi...
Progetto e implementazione di una pipeline di sviluppo software con tecnologi...Progetto e implementazione di una pipeline di sviluppo software con tecnologi...
Progetto e implementazione di una pipeline di sviluppo software con tecnologi...
 
Rich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.jsRich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.js
 
Owasp parte1-rel1.1
Owasp parte1-rel1.1Owasp parte1-rel1.1
Owasp parte1-rel1.1
 
Abilitare le organizzazioni e le persone ad adottare con successo il Cloud
Abilitare le organizzazioni e le persone ad adottare con successo il CloudAbilitare le organizzazioni e le persone ad adottare con successo il Cloud
Abilitare le organizzazioni e le persone ad adottare con successo il Cloud
 
Paper presentazione social media
Paper presentazione social mediaPaper presentazione social media
Paper presentazione social media
 
2015.01.09 - Principi del Cloud Computing e migrazione delle applicazioni mod...
2015.01.09 - Principi del Cloud Computing e migrazione delle applicazioni mod...2015.01.09 - Principi del Cloud Computing e migrazione delle applicazioni mod...
2015.01.09 - Principi del Cloud Computing e migrazione delle applicazioni mod...
 
2011.06.30 scenari applicativi per il cloud computing
2011.06.30   scenari applicativi per il cloud computing2011.06.30   scenari applicativi per il cloud computing
2011.06.30 scenari applicativi per il cloud computing
 
Nessus
NessusNessus
Nessus
 
01 azure well architected framework
01 azure well architected framework01 azure well architected framework
01 azure well architected framework
 
Cloud in Action_6 giugno 2014
Cloud in Action_6 giugno 2014Cloud in Action_6 giugno 2014
Cloud in Action_6 giugno 2014
 
Smau milano 2012 fabrizio amarilli architettura
Smau milano 2012 fabrizio amarilli architetturaSmau milano 2012 fabrizio amarilli architettura
Smau milano 2012 fabrizio amarilli architettura
 
Studio e implementazione di una soluzione per l'automazione di test di sicure...
Studio e implementazione di una soluzione per l'automazione di test di sicure...Studio e implementazione di una soluzione per l'automazione di test di sicure...
Studio e implementazione di una soluzione per l'automazione di test di sicure...
 
XPeppers e AWS
XPeppers e AWSXPeppers e AWS
XPeppers e AWS
 
Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1
Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1
Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1
 

Building infrastructure as code with typescript and aws cdk

  • 1. Building Infrastructure as Code with Typescript and AWS CDK by Andrea Valentini & Cristian Valeri
  • 2. Agenda ● DevOps ● Infrastructure as Code ● AWS CDK ● Costrutti ● App & Stack ● Env, Assets & ACL
  • 4.
  • 7. DevOps: Un po’ Dev un po’ Ops? Definizione Wikipedia: “In informatica DevOps (dalla contrazione inglese di development, "sviluppo", e operations, qui simile a "messa in produzione" o "deployment") è un metodo di sviluppo del software che punta alla comunicazione, collaborazione e integrazione tra sviluppatori e addetti alle operations della information technology (IT). DevOps vuole rispondere all'interdipendenza tra sviluppo software e IT operations, puntando ad aiutare un'organizzazione a sviluppare in modo più rapido ed efficiente prodotti e servizi software.”
  • 8. “DevOps is not a new technology or a product, it's an approach or culture of software development that seeks stability and performance at the same time that it speeds software deliveries to the business” - Andi Mann - CA Technologies -
  • 9. DevOps significa: Essere organizzati, responsabili, coinvolti e collaborativi. Avere servizi IT sempre più automatizzati = risorse più libere da lavori ripetitivi (ma necessari) Impiegare meglio il tempo e concentrarsi sulla progettazione del software e delle infrastrutture
  • 10. DevOps or not DevOps? ● Chi si occupa di mantenere il software deve essere considerato un “first class citizen” ● Considerare sempre un “Developer On Call” che affiancherà chi mantiene l’applicazione se necessario. ● Attivare processi di Continous Integration e Continous Delivery. Minore intervento umano significa minore rischio di errore. ● Ridurre le barriere di comunicazione tra team di sviluppo e sistemisti ● Automatizzare quanto piu’ possibile il bug fixing sui sistemi ● Monitorare in maniera efficiente tutte le componenti aziendali per ridurre gli errori
  • 13. DevOps = Cambiamento Comunicazione Condivisione Obiettivi Collaborazione Rispetto e Fiducia “Mettersi insieme è un inizio, rimanere insieme è un progresso, lavorare insieme un successo.” - Henry Ford
  • 17. Infrastructure as Code “is the process of managing and provisioning computer data centers through machine- readable definition files, rather than physical hardware configuration or interactive configuration tools.”
  • 18. Infrastructure as Code 1. Ottimizzazione dei costi: elimina la componente manuale del deployment, riducendo il numero di persone necessarie al completamento dei task . 2. Maggiore velocità di deploy permette di effettuare velocemente il deployment di macchine identiche ad altre già definite in precedenza. 3. Riduzione dei rischi separare la definizione delle best practices e delle caratterisitiche ”fisiche” dalla fase di deployment riduce i rischi derivanti da errate configurazioni sia per eventuali malfunzionamenti che per problemi di sicurezza. 4. Controllo di consistenza permette di controllare e nel caso forzare la compliance della configurazione di una macchina con uno standard ben definito.
  • 19.
  • 21.
  • 22.
  • 23.
  • 24. AWS CDK (Cloud Development Kit)
  • 25. AWS CDK: Requirements $ pip3 install awscli --upgrade --user $ npm install -g typescript@latest $ npm install -g aws-cdk $ cdk init sample-app --language typescript
  • 28. Usare i Costrutti import s3 = require('@aws-cdk/aws-s3'); // ... new s3.Bucket(this, 'MyFirstBucket', { versioned: true, encryption: s3.BucketEncryption.KMS, websiteIndexDocument: 'index.html' }); // ...
  • 29. Usare i Costrutti const rawData = new s3.Bucket(this, 'raw-data'); const dataScience = new iam.Group(this, 'data-science'); rawData.grantRead(dataScience);
  • 30. Usare i Costrutti const jobsQueue = new sqs.Queue(this, 'jobs'); const createJobLambda = new lambda.Function(this, 'create-job', { runtime: lambda.Runtime.NODEJS_8_10, handler: 'index.handler', code: lambda.Code.fromAsset('./create-job-lambda-code'), environment: { QUEUE_URL: jobsQueue.queueUrl } });
  • 31. Creare Costrutti export interface NBProps { prefix?: string; } export class NotifyingBucket extends Construct { constructor(scope: Construct, id: string, props: NBProps = {}) { super(scope, id); const bucket = new s3.Bucket(this, 'bucket'); this.topic = new sns.Topic(this, 'topic'); bucket.addObjectCreatedNotification(topic, { prefix: props.prefix }); } }
  • 32. Creare Costrutti const queue = new sqs.Queue(this, 'NewImagesQueue'); const images = new NotifyingBucket(this, 'Images'); images.topic.addSubscription(new sns_sub.QueueSubscription(queue));
  • 34. App & Stack - Stack class MyFirstStack extends Stack { constructor(scope: Construct, id: string, props: StackProps){ super(scope, id, props); new s3.Bucket(this, 'MyFirstBucket'); } }
  • 35. App & Stack - Stack class ControlPlane extends Stack {} class Dataplane extends Stack {} class Monitoring extends Stack {} class MyService extends cdk.Construct { constructor(scope: Construct, id: string, props?: EnvProps) { super(scope, id); new ControlPlane(this, "cp", {}); new Dataplane(this, "data", {}); new Monitoring(this, "mon", {}); } }
  • 36. App & Stack - Stack const app = new cdk.App(); new MyService(app, "beta"); new MyService(app, "prod", { prod: true }); app.synth(); $ cdk ls betacpDA8372D3 betadataE23DB2BA betamon632BD457 prodcp187264CE proddataF7378CE5 prodmon631A1083
  • 37. App & Stack - Stack const prod = { account: '123456789012', region: 'us-east-1' }; const stack1 = new StackThatProvidesABucket(app, 'Stack1' , { env: prod }); // stack2 will take a property { bucket: IBucket } const stack2 = new StackThatExpectsABucket(app, 'Stack2', { bucket: stack1.bucket, env: prod });
  • 38. App & Stack - Importing External Resources Bucket.fromName(this, 'Bucket', 'my-bucket-name'); Bucket.fromArn(this, 'Bucket', 'arn:aws:s3:::my-bucket-name'); // Construct a resource by giving more than one attribute Resource.fromAttributes(this, 'MyResource', { resourceName: 'booh', vpc: vpc });
  • 39. App & Stack - App class MyApp extends App { constructor() { new MyFirstStack(this, 'hello-cdk'); } } new MyApp().synth();
  • 40. App & Stack - App LifeCycle
  • 41. Assets import { Asset } from '@aws-cdk/aws-s3-assets'; // Archived and uploaded to Amazon S3 as a .zip file const directoryAsset = new Asset(this, "SampleZippedDirAsset", { path: path.join(__dirname, "sample-asset-directory") }); // Uploaded to Amazon S3 as-is const fileAsset = new Asset(this, 'SampleFileAsset', { path: path.join(__dirname, 'file-asset.txt') });
  • 42. Assets import {Stack, Construct, StackProps } = require('@aws-cdk/core'); import lambda = require('@aws-cdk/aws-lambda'); export class HelloAssetStack extends Stack { constructor(scope: Construct, id: string, props?:StackProps) { super(scope, id, props); new lambda.Function(this, 'myLambdaFunction', { code: lambda.Code.asset(path.join(__dirname, 'handler')), runtime: lambda.Runtime.NODE, handler: 'index.handler' }); } }
  • 43. Permessi e ACL import iam = require('@aws-cdk/aws-iam'); const role = new iam.Role(this, 'Role', { assumedBy: new iam.ServicePrincipal('ec2.amazonaws.com'),}); const policy = new iam.PolicyStatement({ effect: iam.Effect.DENY, resources: [bucket.bucketArn, otherRole.roleArn], actions: ['ec2:SomeAction', 's3:AnotherAction'], conditions: {StringEquals: { 'ec2:AuthorizedService': 'codebuild.amazonaws.com', }}}); role.addToPolicy(policy);
  • 44. ENV const envEU = { account: '2383838383', region: 'eu-west-1' }; const envUSA = { account: '8373873873', region: 'us-west-1' }; new MyFirstStack(this, 'first-stack-us', { env: envUSA, encryption: false }); new MyFirstStack(this, 'first-stack-eu', { env: envEU, encryption: true });
  • 45. ENV new MyStack(this, 'dev', { env: { account: process.env.CDK_DEFAULT_ACCOUNT region: process.env.CDK_DEFAULT_REGION }});
  • 46. Info & Resources ● Construct Library API Reference: https://docs.aws.amazon.com/cdk/api/latest/docs/a ws-construct-library.html ● CDK Examples: https://github.com/aws-samples/aws-cdk-examples
  • 47.