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.
Podemos instalar o cdk com diversas ferramentas, vamos usar o node.
npm install -g aws-cdk
cdk --version
A linguagem do projeto cdk não tem relação com a aplicação na qual ela provisiona os recursos.
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.
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
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;
}
}