Skip to content

Instantly share code, notes, and snippets.

@renatoapcosta
Last active June 3, 2022 01:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save renatoapcosta/70837aa9f1b582f90c4157b494b1e052 to your computer and use it in GitHub Desktop.
Save renatoapcosta/70837aa9f1b582f90c4157b494b1e052 to your computer and use it in GitHub Desktop.
AWS CDK

AWS CDK

Um framework que permite a modelagem e a criação de recursos na AWS, através de criação de stacks para agrupar recursos relacionados entre si.

Instalação

Podemos instalar o cdk com diversas ferramentas, vamos usar o node.

npm install -g aws-cdk

cdk --version

Criando um projeto cdk

A linguagem do projeto cdk não tem relação com a aplicação na qual ela provisiona os recursos.

Java

cdk init app --language java

Assim ele criará um projeto java com maven onde podemos criar as stack na aws.

mvn package

Antes de executar um deploy devemos executar o comando:

cdk bootstrap

Esse comando só deve ser executado uma vez, na mesma região e conta da AWS.

Comandos CDK

cdk list lista quais stack o projeto possui

cdk diff mostra a diferença do projeto atual e a aws

cdk deploy <stack> executa a stack na aws

cdk deploy --require-approval <stack> executa a stack na aws e não pede confirmação

cdk destroy Vpc Cluster destroy todos os recursos da stack

cdk destroy --force <stacks> destroy e não pede confirmação

Projeto Java CDK

projeto

src/
  main/java
  test/java
cdk.json
pom.xml

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
         xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.myorg</groupId>
    <artifactId>one-short-aws-cdk</artifactId>
    <version>0.1</version>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <cdk.version>2.26.0</cdk.version>
        <sdk.version>2.17.191</sdk.version>
        <constructs.version>[10.0.0,11.0.0)</constructs.version>
        <junit.version>5.7.1</junit.version>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>3.0.0</version>
                <configuration>
                    <mainClass>com.myorg.OneShortAwsCdkApp</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <!-- AWS Cloud Development Kit -->
        <dependency>
            <groupId>software.amazon.awscdk</groupId>
            <artifactId>aws-cdk-lib</artifactId>
            <version>${cdk.version}</version>
        </dependency>

        <dependency>
            <groupId>software.constructs</groupId>
            <artifactId>constructs</artifactId>
            <version>${constructs.version}</version>
        </dependency>

        <dependency>
          <groupId>org.junit.jupiter</groupId>
          <artifactId>junit-jupiter</artifactId>
          <version>${junit.version}</version>
          <scope>test</scope>
        </dependency>
    </dependencies>
</project>

cdk.json

{
  "app": "mvn -e -q compile exec:java",
  "watch": {
    "include": [
      "**"
    ],
    "exclude": [
      "README.md",
      "cdk*.json",
      "target",
      "pom.xml",
      "src/test"
    ]
  },
  "context": {
    "@aws-cdk/aws-apigateway:usagePlanKeyOrderInsensitiveId": true,
    "@aws-cdk/core:stackRelativeExports": true,
    "@aws-cdk/aws-rds:lowercaseDbIdentifier": true,
    "@aws-cdk/aws-lambda:recognizeVersionProps": true,
    "@aws-cdk/aws-cloudfront:defaultSecurityPolicyTLSv1.2_2021": true,
    "@aws-cdk-containers/ecs-service-extensions:enableDefaultLogDriver": true,
    "@aws-cdk/aws-ec2:uniqueImdsv2TemplateName": true,
    "@aws-cdk/core:checkSecretUsage": true,
    "@aws-cdk/aws-iam:minimizePolicies": true,
    "@aws-cdk/core:target-partitions": [
      "aws",
      "aws-cn"
    ]
  }
}

class main

package com.myorg;

import software.amazon.awscdk.App;

public class OneShortAwsCdkApp {
  public static void main(final String[] args) {
    App app = new App();

    VpcStack vpcStack = new VpcStack(app, "Vpc");

    ClusterStack clusterStack = new ClusterStack(app, "Cluster", vpcStack.getVpc());
    clusterStack.addDependency(vpcStack);

    app.synth();
  }
}

classe stack

import software.amazon.awscdk.Stack;
import software.amazon.awscdk.StackProps;
import software.amazon.awscdk.services.ec2.Vpc;
import software.constructs.Construct;


public class VpcStack extends Stack {

    private final Vpc vpc;
    public VpcStack(final Construct scope, final String id) {
        this(scope, id, null);
    }

    public VpcStack(final Construct scope, final String id, final StackProps props) {
        super(scope, id, props);

        vpc = Vpc.Builder.create(this, "Vpc01")
            .maxAzs(2)
            //.natGateways(0)
            .build();
    }

    public Vpc getVpc() {
        return vpc;
    }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment