Este é o Guia do Desenvolvedor AWS CDK v2. O CDK v1 antigo entrou em manutenção em 1º de junho de 2022 e encerrou o suporte em 1º de junho de 2023.
As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Você pode criar um AWS Cloud Development Kit (AWS CDK) aplicativo contendo várias pilhas. Quando você implanta o AWS CDK aplicativo, cada pilha se torna seu próprio AWS CloudFormation modelo. Você também pode sintetizar e implantar cada pilha individualmente usando o AWS CDK CLI comando cdk deploy
.
Neste exemplo, abordamos o seguinte:
-
Como estender a classe
Stack
para aceitar novas propriedades ou argumentos. -
Como usar propriedades para determinar quais recursos a pilha contém e suas configurações.
-
Como instanciar várias pilhas dessa classe.
O exemplo neste tópico usa uma propriedade booleana chamada encryptBucket
(Python: encrypt_bucket
). Ela indica se um bucket do Amazon S3 deve ser criptografado. Nesse caso, a pilha permite a criptografia usando uma chave gerenciada por AWS Key Management Service (AWS KMS). A aplicação cria duas instâncias dessa pilha, uma com criptografia e outra sem.
Pré-requisitos
Este exemplo pressupõe que todas as etapas iniciais tenham sido concluídas.
Criar um projeto de CDK
Primeiro, criamos um projeto CDK usando o CDK CLI:
mkdir multistack cd multistack cdk init --language=typescript
Adicionar um parâmetro opcional
O argumento props
do construtor da Stack
preenche o StackProps
da interface. Neste exemplo, queremos que a pilha aceite uma propriedade adicional para nos dizer se o bucket do Amazon S3 deve ser criptografado. Para fazer isso, criamos uma interface ou classe que inclui a propriedade. Isso permite que o compilador garanta que a propriedade tenha um valor booleano e habilite o preenchimento automático para ela em seu IDE.
Abrimos nosso arquivo de pilha em nosso IDE ou editor e adicionamos a nova interface, classe ou argumento. As novas linhas são destacadas em negrito:
Arquivo: lib/multistack-stack.ts
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
interface MultiStackProps extends cdk.StackProps {
encryptBucket?: boolean;
}
export class MultistackStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: MultiStackProps) {
super(scope, id, props);
// The code that defines our stack goes here
}
}
A nova propriedade é opcional. Se encryptBucket
(Python: encrypt_bucket
) não estiver presente, seu valor é undefined
, ou o equivalente local. O bucket não será criptografado por padrão.
Definir a classe da pilha
Em seguida, definimos nossa classe de pilha, usando nossa nova propriedade. O novo código está destacado em negrito:
Arquivo: lib/multistack-stack.ts
import * as cdk from 'aws-cdk-lib';
import { Construct } from constructs;
import * as s3 from 'aws-cdk-lib/aws-s3';
interface MultistackProps extends cdk.StackProps {
encryptBucket?: boolean;
}
export class MultistackStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: MultistackProps) {
super(scope, id, props);
// Add a Boolean property "encryptBucket" to the stack constructor.
// If true, creates an encrypted bucket. Otherwise, the bucket is unencrypted.
// Encrypted bucket uses KMS-managed keys (SSE-KMS).
if (props && props.encryptBucket) {
new s3.Bucket(this, "MyGroovyBucket", {
encryption: s3.BucketEncryption.KMS_MANAGED,
removalPolicy: cdk.RemovalPolicy.DESTROY
});
} else {
new s3.Bucket(this, "MyGroovyBucket", {
removalPolicy: cdk.RemovalPolicy.DESTROY});
}
}
}
Criar instâncias de duas pilhas
Em nosso arquivo de aplicação, adicionamos o código para instanciar duas pilhas separadas. Excluímos a definição de MultistackStack
existente e definimos nossas duas pilhas. O novo código é destacado em negrito:
Arquivo: bin/multistack.ts
#!/usr/bin/env node
import 'source-map-support/register';
import * as cdk from 'aws-cdk-lib';
import { MultistackStack } from '../lib/multistack-stack';
const app = new cdk.App();
new MultistackStack(app, "MyWestCdkStack", {
env: {region: "us-west-1"},
encryptBucket: false
});
new MultistackStack(app, "MyEastCdkStack", {
env: {region: "us-east-1"},
encryptBucket: true
});
app.synth();
Esse código usa a nova propriedade encryptBucket
(Python: encrypt_bucket
) na classe MultistackStack
para instanciar o seguinte:
-
Uma pilha com um bucket criptografado do Amazon S3 na
us-east-1
AWS região. -
Uma pilha com um bucket Amazon S3 não criptografado na região.
us-west-1
AWS
Sintetizar e implantar a pilha
Em seguida, podemos implantar pilhas a partir da aplicação. Primeiro, sintetizamos um AWS CloudFormation modelo para. MyEastCdkStack
Essa é a pilha de us-east-1
com o bucket criptografado do Amazon S3.
$
cdk synth MyEastCdkStack
Para implantar essa pilha em nosso AWS ambiente, podemos emitir um dos seguintes comandos. O primeiro comando usa nosso AWS perfil padrão para obter as credenciais para implantar a pilha. O segundo usa um perfil que especificamos. PoisPROFILE_NAME
, podemos substituir o nome de um AWS CLI perfil que contém as credenciais apropriadas para implantação no. us-east-1
Região da AWS
$
cdk deploy MyEastCdkStack
$
cdk deploy MyEastCdkStack --profile=
PROFILE_NAME
Limpeza
Para evitar cobranças pelos recursos que implantamos, destruímos a pilha usando o seguinte comando:
cdk destroy MyEastCdkStack
A operação de destruição falhará se houver algo armazenado no bucket da pilha. Não deveria haver, já que criamos apenas o bucket. Se colocarmos algo no bucket, devemos excluir o conteúdo do bucket antes de destruir a pilha. Podemos usar o AWS Management Console ou o AWS CLI para excluir o conteúdo do bucket.