Constructos da camada 1
Os constructos L1 são os blocos de criação do AWS CDK e são facilmente distinguidos de outros constructos pelo prefixo Cfn. Por exemplo, o pacote do Amazon DynamoDB no AWS CDK contém um constructo Table, que é um constructo L2. O constructo L1 correspondente é chamado CfnTable, e representa diretamente uma Table do CloudFormation DynamoDB. É impossível usar o AWS CDK sem acessar essa primeira camada, embora uma aplicação do AWS CDK normalmente nunca use um constructo L1 diretamente. No entanto, na maioria dos casos, os constructos L2 e L3 que os desenvolvedores estão acostumados a usar dependem muito dos constructos L1. Portanto, você pode pensar nos constructos L1 como a ponte entre o CloudFormation e o AWS CDK.
O único propósito do AWS CDK é gerar modelos do CloudFormation usando linguagens de codificação padrão. Depois de executar o comando cdk synth da CLI e gerar os modelos resultantes do CloudFormation, o trabalho do AWS CDK estará concluído. O comando cdk deploy existe apenas por conveniência, mas o que você está fazendo ao executar esse comando acontece inteiramente no CloudFormation. A peça do quebra-cabeça que converte o código do AWS CDK no formato que o CloudFormation entende é o constructo L1.
O ciclo de vida do AWS CDK–CloudFormation para constructos L1
O processo para criar e usar constructos L1 consiste nestas etapas:
-
O processo de criação do AWS CDK converte as especificações do CloudFormation em código programático na forma de constructos L1.
-
Os desenvolvedores escrevem código que faz referência direta ou indireta aos constructos L1 como parte de uma aplicação do AWS CDK.
-
Os desenvolvedores executam o comando cdk synth para converter o código programático novamente no formato ditado pelas especificações (modelos) do CloudFormation.
-
Os desenvolvedores executam o comando cdk deploy para implantar as pilhas do CloudFormation dentro desses modelos nos ambientes da conta da AWS.
Vamos fazer um pequeno exercício. Acesse o repositório de código aberto do AWS CDKpackages, aws-cdk-lib, aws-<servicename>, lib). Neste exemplo, vamos escolher o Amazon S3, mas isso funciona para qualquer serviço. Se você olhar o arquivo index.ts
export * from './s3.generated';
No entanto, você não verá o arquivo s3.generated em nenhum lugar do diretório correspondente. Isso ocorre porque os constructos L1 são gerados automaticamente da especificação de recursos do CloudFormation durante o processo de criação do AWS CDK. Portanto, você verá s3.generated no pacote somente depois de executar o comando de criação do AWS CDK para o pacote.
A especificação do recurso AWS CloudFormation
A especificação do recurso do AWS CloudFormation define a infraestrutura como código (IAC) para a AWS e determina como o código nos modelos do CloudFormation é convertido em recursos em uma conta da AWS. Essa especificação define os recursos da AWS no formato JSONprovider::service::resource. Por exemplo, o nome do tipo de recurso para um bucket do Amazon S3 seria AWS::S3::Bucket, e o nome do tipo de recurso para um ponto de acesso Amazon S3 seria AWS::S3::AccessPoint. Esses tipos de recursos podem ser renderizados em um modelo do CloudFormation usando a sintaxe definida na especificação do recurso do AWS CloudFormation. Quando o processo de criação do AWS CDK é executado, cada tipo de recurso também se torna um constructo L1.
Consequentemente, cada constructo L1 é uma imagem espelhada programática de seu recurso correspondente do CloudFormation. Cada propriedade que você aplicaria em um modelo do CloudFormation está disponível quando você instancia um constructo L1, e cada propriedade necessária do CloudFormation também é exigida como argumento quando você instancia o constructo L1 correspondente. A tabela a seguir compara um bucket do S3, conforme representado em um modelo do CloudFormation, com o mesmo bucket do S3, conforme definido como um constructo L1 do AWS CDK.
Modelo do CloudFormation |
Constructo L1 |
|---|---|
|
|
Como você pode ver, o constructo L1 é a manifestação exata no código do recurso do CloudFormation. Não há atalhos ou simplificações, então a quantidade de texto padronizado que deve ser escrita é praticamente a mesma. No entanto, uma das grandes vantagens de usar o AWS CDK é que ele ajuda a eliminar grande parte da sintaxe padronizada do CloudFormation. Então, como isso acontece? É aí que entra o constructo L2.