Infraestrutura CDK
O AWS CDK é um framework para definir infraestrutura em nuvem através de código e provisioná-la utilizando AWS CloudFormation.
O gerador de infraestrutura TypeScript cria uma aplicação AWS CDK escrita em TypeScript. A aplicação gerada inclui práticas recomendadas de segurança através de verificações com CFN Guard.
Gerar um Projeto de Infraestrutura
Seção intitulada “Gerar um Projeto de Infraestrutura”Você pode gerar um novo projeto de infraestrutura de duas formas:
- Instale o Nx Console VSCode Plugin se ainda não o fez
- Abra o console Nx no VSCode
- Clique em
Generate (UI)
na seção "Common Nx Commands" - Procure por
@aws/nx-plugin - ts#infra
- Preencha os parâmetros obrigatórios
- Clique em
Generate
pnpm nx g @aws/nx-plugin:ts#infra
yarn nx g @aws/nx-plugin:ts#infra
npx nx g @aws/nx-plugin:ts#infra
bunx nx g @aws/nx-plugin:ts#infra
Você também pode realizar uma execução simulada para ver quais arquivos seriam alterados
pnpm nx g @aws/nx-plugin:ts#infra --dry-run
yarn nx g @aws/nx-plugin:ts#infra --dry-run
npx nx g @aws/nx-plugin:ts#infra --dry-run
bunx nx g @aws/nx-plugin:ts#infra --dry-run
Parâmetro | Tipo | Padrão | Descrição |
---|---|---|---|
name Obrigatório | string | - | The name of the application. |
ruleSet | string | aws_prototyping | Rule set to validate your AWS resources with. |
directory | string | packages | The directory of the new application. |
Saída do Gerador
Seção intitulada “Saída do Gerador”O gerador criará a seguinte estrutura de projeto no diretório <directory>/<name>
:
Directorysrc
- main.ts Ponto de entrada da aplicação que instancia estágios do CDK para implantação
Directorystages Definições de estágios do CDK
- application-stage.ts Define uma coleção de stacks para implantação em um estágio
Directorystacks Definições de stacks do CDK
- application-stack.ts Stack principal da aplicação
- cdk.json Configuração do CDK
- project.json Configuração do projeto e targets de build
Implementando sua Infraestrutura CDK
Seção intitulada “Implementando sua Infraestrutura CDK”Você pode começar a escrever sua infraestrutura CDK dentro de src/stacks/application-stack.ts
, por exemplo:
import { Stack, StackProps } from 'aws-cdk-lib';import { Bucket } from 'aws-cdk-lib/aws-s3'import { Construct } from 'constructs';
export class ApplicationStack extends Stack { constructor(scope: Construct, id: string, props?: StackProps) { super(scope, id, props);
// Declare sua infraestrutura aqui new Bucket(this, 'MyBucket'); }}
Estágios e Stacks
Seção intitulada “Estágios e Stacks”Você notará que o arquivo principal src/main.ts
instancia um Stage do CDK chamado <namespace>-sandbox
. Este estágio é destinado para seus próprios testes e desenvolvimento.
new ApplicationStage(app, 'project-sandbox', { env: { account: process.env.CDK_DEFAULT_ACCOUNT, region: process.env.CDK_DEFAULT_REGION, },});
Você pode adicionar mais estágios, por exemplo, pode definir estágios beta
e prod
que implantam em ambientes separados:
new ApplicationStage(app, 'project-beta', { env: { account: '123456789012', // conta beta region: 'us-west-2', },});new ApplicationStage(app, 'project-prod', { env: { account: '098765432109', // conta prod region: 'us-west-2', },});
Um Stage define uma coleção de stacks que devem ser implantadas juntas para compor sua aplicação. Você pode instanciar quantas stacks quiser dentro de um estágio, por exemplo:
import { Stage, StageProps } from 'aws-cdk-lib';import { Construct } from 'constructs';import { BackendStack } from '../stacks/backend-stack.js';import { FrontendStack } from '../stacks/frontend-stack.js';
/** * Define uma coleção de CDK Stacks que compõem sua aplicação */export class ApplicationStage extends Stage { constructor(scope: Construct, id: string, props?: StageProps) { super(scope, id, props);
new BackendStack(this, 'Backend', { crossRegionReferences: true, })
new FrontendStack(this, 'Frontend', { crossRegionReferences: true, }); }}
Infraestrutura de API
Seção intitulada “Infraestrutura de API”Se você usou os geradores tRPC API ou FastAPI para criar APIs, notará que já tem alguns constructs disponíveis em packages/common/constructs
para implantá-los.
Se, por exemplo, você criou uma API tRPC chamada my-api
, pode simplesmente importar e instanciar o construct para adicionar toda a infraestrutura necessária:
import * as cdk from 'aws-cdk-lib';import { Construct } from 'constructs';import { MyApi } from ':my-scope/common-constructs';
export class ApplicationStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props);
// Adicione a infraestrutura para sua API new MyApi(this, 'MyApi', { integrations: MyApi.defaultIntegrations(this).build(), }); }}
Infraestrutura de Website
Seção intitulada “Infraestrutura de Website”Se você usou o gerador CloudScape website, notará que já tem um construct em packages/common/constructs
para implantá-lo. Por exemplo:
import * as cdk from 'aws-cdk-lib';import { Construct } from 'constructs';import { MyWebsite } from ':my-scope/common-constructs';
export class ApplicationStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props);
// Adicione a infraestrutura para seu website new MyWebsite(this, 'MyWebsite'); }}
É importante garantir que o website seja declarado após quaisquer constructs de API para que a Configuração de Runtime do website inclua todas as configurações da API.
Sintetizando sua Infraestrutura
Seção intitulada “Sintetizando sua Infraestrutura”Como parte do seu target build
, além de executar os targets padrão de compilação, lint e testes, seu projeto de infraestrutura é sintetizado para CloudFormation. Isso também pode ser executado separadamente através do target synth
:
pnpm nx run <my-infra>:synth
yarn nx run <my-infra>:synth
npx nx run <my-infra>:synth
bunx nx run <my-infra>:synth
Você encontrará sua montagem de nuvem sintetizada na pasta raiz dist
, em dist/packages/<my-infra-project>/cdk.out
.
Bootstrapping da Sua Conta AWS
Seção intitulada “Bootstrapping da Sua Conta AWS”Se você está implantando uma aplicação CDK em uma conta AWS pela primeira vez, será necessário fazer o bootstrap primeiro.
Primeiro, certifique-se de ter configurado credenciais para sua conta AWS.
Em seguida, você pode usar o comando cdk bootstrap
:
npx cdk bootstrap aws://<account-id>/<region>
Para mais detalhes, consulte a documentação do CDK.
Implantando na AWS
Seção intitulada “Implantando na AWS”Após um build, você pode implantar sua infraestrutura na AWS usando o target deploy
.
Primeiro, certifique-se de ter configurado credenciais para sua conta AWS.
Em seguida, execute o target de deploy:
pnpm nx run <my-infra>:deploy <my-infra>-sandbox/*
yarn nx run <my-infra>:deploy <my-infra>-sandbox/*
npx nx run <my-infra>:deploy <my-infra>-sandbox/*
bunx nx run <my-infra>:deploy <my-infra>-sandbox/*
Implantando na AWS em um Pipeline CI/CD
Seção intitulada “Implantando na AWS em um Pipeline CI/CD”Use o target deploy-ci
se estiver implantando na AWS como parte de um pipeline CI/CD.
pnpm nx run <my-infra>:deploy-ci my-stage/*
yarn nx run <my-infra>:deploy-ci my-stage/*
npx nx run <my-infra>:deploy-ci my-stage/*
bunx nx run <my-infra>:deploy-ci my-stage/*
Este target difere ligeiramente do target deploy
normal por garantir que a montagem de nuvem pré-sintetizada seja implantada, em vez de sintetizar durante a execução. Isso ajuda a evitar problemas potenciais de não-determinismo devido a alterações em versões de pacotes, garantindo que cada estágio do pipeline implante usando a mesma montagem de nuvem.
Removendo Infraestrutura AWS
Seção intitulada “Removendo Infraestrutura AWS”Use o target destroy
para remover seus recursos:
pnpm nx run <my-infra>:destroy <my-infra>-sandbox/*
yarn nx run <my-infra>:destroy <my-infra>-sandbox/*
npx nx run <my-infra>:destroy <my-infra>-sandbox/*
bunx nx run <my-infra>:destroy <my-infra>-sandbox/*
Mais Informações
Seção intitulada “Mais Informações”Para mais informações sobre o CDK, consulte o Guia do Desenvolvedor CDK e a Referência da API.