AWS:Crear un entorno de Cloud9 con CDK

AWS:Crear un entorno de Cloud9 con CDK

Automatizar la creación y borrado de un entorno de Cloud9 con CDK.

Cloud9 es un servicio de AWS que permite tener un ambiente de desarrollo integrado (IDE) en el cloud de AWS. Se lanzó en noviembre de 2017 (Link), y está en línea con la corriente de IDEs basados en cloud que estamos viendo en el mercado (https://idx.dev/, https://www.gitpod.io/, https://github.com/features/codespaces)

La intención de este articulo es mostrar como levantar y borrar un ambiente de Cloud9 utilizando CDK, esto permitirá la agilidad y automatización de levantar un ambiente cuando lo necesitemos y tener el control del ciclo de vida de ese recurso.

Instalar CDK

Siguiendo los tutoriales de instalación de la herramienta: Link

# Install
npm install -g aws-cdk
# CDK version
cdk --version
# CDK Bootsraping
cdk bootstrap aws://ACCOUNT-NUMBER/REGION

Descargar el repositorio y configurar

En el siguiente repositorio de Github -> link está el código en CDK, a continuación contaré como configurarlo para levantar nuestro ambiente de Cloud9.

//https://github.com/olcortesb/cdk-cloud9/blob/main/lib/cdk-cloud9-stack.ts
import * as cdk from 'aws-cdk-lib';
import * as ec2 from 'aws-cdk-lib/aws-ec2';
import * as cloud9 from 'aws-cdk-lib/aws-cloud9';

export class CdkCloud9Stack extends cdk.Stack {
  constructor(scope: cdk.App , id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // Create a VPC for the Cloud9 environment
    const vpc = new ec2.Vpc(this, 'Cloud9Vpc', {
      maxAzs: 3, // Adjust as needed
    });

    // Create the Cloud9 environment
    new cloud9.CfnEnvironmentEC2(this, 'MyCloud9Environment', {
      instanceType: this.node.getContext('instance_type'), // Adjust as needed
      connectionType: 'CONNECT_SSM',
      name: this.node.getContext("name"),
      ownerArn: this.node.getContext("user_arn"),
      subnetId: vpc.publicSubnets[0].subnetId,
    });
  }
}

Este es el código para crear nuestro ambiente de Cloud9 , lo importante y lo que tenemos que modificar son las tres variables de entorno name, instance_type, user_arn. Estos tres valores como indican los nombres nos permitirán configurar las propiedades del ambiente. Estos valores los encontraremos en el archivo cdk.json

// https://github.com/olcortesb/cdk-cloud9/blob/main/cdk.json
    ...
    "name": "Cloud9Env",
    "user_arn": "arn:aws:iam::ACCOUNT-NUMBER:NAME",
    "instance_type": "t2.micro"
  }
}

name: Nombre del Ambiente de Cloud9

instance_type: Tipo de instancia EC2 donde se ejecutara nuestro entorno de Cloud9

user_arn: La persona dentro de la organización que va a poder acceder a este Cloud9, para obtener este nombre para nuestro usuario, si trabajamos en nuestra cuenta se puede ejecutar el siguiente comando

aws sts get-caller-identity --query 'Arn' --output text

Este comando retornará una salida similar a esta:

"arn:aws:iam::ACCOUNT-NUMBER:NAME"

Que tenemos que remplazar en user_arn y luego de configurar las variables levantamos el ambiente.

Deploy / Destroy el entorno de Cloud9

Con todo configurado a continuación procedemos a hacer deploy

cdk deploy --profile olcortesb

Ahora vamos a la consola de AWS y podemos ver nuestro Cloud9 listo para usar:

Y para destruir el ambiente hacemos destroy desde el mismo repositorio

cdk destroy CdkCloud9Stack

Con esto nos aseguramos de no dejar encendido ninguno de los servicios asociados al Cloud9, recuerda que si no persistimos el volumen perdemos la información al destruir el ambiente.

¡Gracias por leer, quedo a cualquier comentario, Saludos!

Oscar Cortes

Referencias: