\n\t\t\t\t \n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n\n\n\nAgregando la Infraestructura con AWS CDK<\/h2>\n\n\n\n 1. Ingresamos a nuestra carpeta infra<\/strong><\/code> y ejecutamos el comando para iniciar un nuevo proyecto cdk<\/strong>.<\/p>\n\n\n\ncd infra\ncdk init app --language=typescript<\/code><\/code><\/pre>\n\n\n\nEste comando inicializa un nuevo proyecto de Amazon CDK utilizando typescript<\/strong>, una vez finalizado nuestro proyecto se ver\u00e1 de la siguiente manera.<\/p>\n\n\n\n <\/figure>\n\n\n\n2. Ingresamos al archivo infra-stack.ts<\/code> que se encuentra dentro de la carpeta lib, para agregar el c\u00f3digo de nuestra infra:<\/p>\n\n\n\nimport * as cdk from 'aws-cdk-lib';\nimport { Construct } from 'constructs';\nimport { Bucket, BlockPublicAccess, BucketEncryption } from 'aws-cdk-lib\/aws-s3';\nimport { OriginAccessIdentity } from 'aws-cdk-lib\/aws-cloudfront';\nimport { Distribution } from 'aws-cdk-lib\/aws-cloudfront';\nimport { ViewerProtocolPolicy, AllowedMethods } from 'aws-cdk-lib\/aws-cloudfront';\nimport * as s3deploy from \"aws-cdk-lib\/aws-s3-deployment\";\n\n\/\/ import * as sqs from 'aws-cdk-lib\/aws-sqs';\n\nexport class InfraEstaticStack extends cdk.Stack {\n constructor(scope: Construct, id: string, props?: cdk.StackProps) {\n super(scope, id, props);\n\n \/\/Definimos la configuraci\u00f3n del bucket S3\n const s3Bucket = new Bucket(this, 'storage',{\n websiteIndexDocument: 'index.html',\n websiteErrorDocument: 'index.html',\n blockPublicAccess: BlockPublicAccess.BLOCK_ACLS,\n encryption: BucketEncryption.S3_MANAGED,\n enforceSSL: false,\n publicReadAccess: true,\n autoDeleteObjects: true,\n removalPolicy: cdk.RemovalPolicy.DESTROY\n });\n \n \/\/Creamos una identidad de origen y se lo asignamos al bucket s3\n const oia = new OriginAccessIdentity(this, 'OIA', {\n comment: \"OIA for Images infra\"\n });\n s3Bucket.grantRead(oia);\n \n \n \/* Definimos la configuraci\u00f3 de nuestro bucket s3 *\/\n const cloudfrontDistrubution = new Distribution( this, 'spo-public-cf_', {\n defaultBehavior: {\n origin: new cdk.aws_cloudfront_origins.S3Origin(s3Bucket), \/\/apuntamos nuestro cloud front a nuestro bucket\n viewerProtocolPolicy: ViewerProtocolPolicy.ALLOW_ALL,\n allowedMethods: AllowedMethods.ALLOW_GET_HEAD_OPTIONS,\n },\n priceClass: cdk.aws_cloudfront.PriceClass.PRICE_CLASS_100,\n \n })\n \n \/\/Iniciamos un despliegue de los archivos que est\u00e1n en la carpeta public a la raiz de nuestro bucket\n new s3deploy.BucketDeployment( this, 'DeployFiles', { \n sources: [ s3deploy.Source.asset('..\/public\/')],\n destinationBucket: s3Bucket,\n })\n \n \/\/Imprimimos la url de nuestra distribuci\u00f3n de cloud front\n new cdk.CfnOutput(this, \"ulr\", {\n value: `${cloudfrontDistrubution.distributionDomainName}`\n })\n }\n}\n<\/code><\/pre>\n\n\n\n3. Ya definida nuestra infraestructura, procederemos a agregar una instancia de nuestra infra dentro del archivo bin\/infra.ts<\/strong>, quedar\u00eda de la siguiente manera.<\/p>\n\n\n\n#!\/usr\/bin\/env node\nimport 'source-map-support\/register';\nimport * as cdk from 'aws-cdk-lib';\nimport { InfraEstaticStack } from '..\/lib\/infra-stack';\n\nconst app = new cdk.App();\nnew InfraEstaticStack(app, 'InfraEstaticStack', {\n env: {\n region: 'us-east-1', \/\/Region en donde se va a desplegar tu proyecto\n account: '' \/\/Tu n\u00famero de cuenta de AWS\n }\n});<\/code><\/pre>\n\n\n\nDesplegando la infraestructura<\/h2>\n\n\n\n 1. Definida nuestra infra, procederemos a realizar un build de nuestro c\u00f3digo.<\/p>\n\n\n\n
npm run build<\/code><\/pre>\n\n\n\n
<\/figure><\/div>\n\n\n2. Ahora ejecutamos el siguiente c\u00f3digo para preparar el despliegue y comprobar errores.<\/p>\n\n\n\n
cdk synth<\/code><\/pre>\n\n\n\nEste comando generar\u00e1 nuestro template de cloud formation y si todo funciona bien, ya podremos lanzar el despliegue.<\/p>\n\n\n\n <\/figure>\n\n\n\n3. Ahora procedemos a lanzar el despliegue.<\/p>\n\n\n\n
cdk deploy<\/code><\/pre>\n\n\n\n <\/figure>\n\n\n\nLa primera vez que lancemos el despliegue nos pedir\u00e1 confirmar la creaci\u00f3n de algunos permisos. Presionamos la tecla Y <\/em><\/strong>seguido de Enter<\/em><\/strong><\/p>\n\n\n\n <\/figure>\n\n\n\nAhora comenzar\u00e1 el despliegue, en la terminal podr\u00e1s visualizar el avance de la creaci\u00f3n de cada uno de los componentes.<\/p>\n\n\n\n <\/figure>\n\n\n\nUna vez que finalic\u00e9 el despliegue, podr\u00e1s ver la url<\/strong> del proyecto y ya podr\u00e1s visualizar el resultado en tu navegador.<\/p>\n\n\n\n <\/figure>\n\n\n\n <\/figure>\n\n\n\nEliminando la infra creada<\/h2>\n\n\n\n Una vez finalizada tu pr\u00e1ctica vamos a eliminar todos los recursos creados, para evitar cargos no deseados en nuestra factura de AWS<\/strong>, la ventaja que tenemos al trabajar con CDK<\/strong> es que con solo ejecutar un comando podremos eliminar todo lo que desplegamos, sin tener que ingresar a la consola.<\/p>\n\n\n\ncdk destroy<\/code><\/pre>\n\n\n\nPresionamos la tecla (y)<\/strong> seguida de Enter<\/strong><\/p>\n\n\n\n <\/figure>\n\n\n\nCDK<\/strong> comenzar\u00e1 el proceso de eliminaci\u00f3n<\/p>\n\n\n\n <\/figure>\n\n\n\nEn cuanto finalic\u00e9 veremos una salida en terminal similar a la siguiente.<\/p>\n\n\n\n <\/figure>\n\n\n\nCon esto hemos limpiado nuestra cuenta de AWS, y ahora ya podemos desplegar sitios web est\u00e1ticos directamente en s3 sin tener que utilizar un servidor.<\/p>\n","protected":false},"excerpt":{"rendered":"
En este post vamos a mostrar de manera pr\u00e1ctica c\u00f3mo desplegar un sitio web con AWS CDK en S3 y CloudFront, en este caso utilizaremos un proyecto en HTML que colocaremos en l\u00ednea utilizando la siguiente infraestructura: Antes de comenzar es importante que ya tengas configuradas tus credenciales y de preferencia el AWS CLI de […]<\/p>\n","protected":false},"author":1,"featured_media":932,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[52,51],"tags":[49,53,54],"yoast_head":"\n
Desplegar un sitio web con AWS CDK en S3 y CloudFront - Gumonet<\/title>\n \n \n \n \n \n \n \n \n \n \n \n \n\t \n\t \n\t \n \n \n \n \n \n\t \n\t \n\t \n