

Aviso de fim do suporte: em 7 de outubro de 2026, AWS encerrará o suporte para AWS Proton. Depois de 7 de outubro de 2026, você não poderá mais acessar o AWS Proton console ou os AWS Proton recursos. Sua infraestrutura implantada permanecerá intacta. Para obter mais informações, consulte o Guia [AWS Proton de descontinuação e migração de serviços](https://docs.aws.amazon.com/proton/latest/userguide/proton-end-of-support.html).

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á.

# CodeBuild pacote de modelos de provisionamento
<a name="ag-infrastructure-tmp-files-codebuild"></a>

Com o CodeBuild provisionamento, em vez de usar modelos de IaC para renderizar arquivos de IaC e executá-los usando um mecanismo de provisionamento de IaC, basta executar seus comandos de shell. AWS Proton Para fazer isso, AWS Proton cria um AWS CodeBuild projeto para o ambiente, na conta do ambiente, e inicia um trabalho para executar seus comandos para cada criação ou atualização de AWS Proton recursos. Ao criar um pacote de modelos, você fornece um manifesto que especifica os comandos de provisionamento e desprovisionamento da infraestrutura e quaisquer programas, scripts e outros arquivos que esses comandos possam precisar. Seus comandos podem ler as entradas que o AWS Proton fornece e são responsáveis por provisionar ou desprovisionar a infraestrutura e gerar valores de saída.

O manifesto também especifica como AWS Proton renderizar o arquivo de entrada que seu código pode inserir e do qual obter valores de entrada. Ele pode ser renderizado em JSON ou HCL. Para obter mais informações sobre os parâmetros de entrada, consulte [CodeBuild detalhes e exemplos de parâmetros de provisionamento](parameters-codebuild.md). Para obter mais informações sobre arquivos manifesto, consulte [Encapsular arquivos de modelo para AWS Proton](ag-wrap-up.md).

**nota**  
Você pode usar o CodeBuild provisionamento com ambientes e serviços. No momento, você não pode provisionar componentes dessa forma.

## Exemplo: usando o AWS CDK com CodeBuild provisionamento
<a name="ag-infrastructure-tmp-files-codebuild.example"></a>

Como exemplo do uso do CodeBuild provisionamento, você pode incluir um código que usa os AWS recursos AWS Cloud Development Kit (AWS CDK) para *provisionar (implantar*) e desprovisionar (*destruir*) e um manifesto que instala o CDK e executa seu código CDK.

As seções a seguir listam exemplos de arquivos que você pode incluir em um pacote de modelos CodeBuild de provisionamento que provisiona um ambiente usando o. AWS CDK

### Manifesto
<a name="ag-infrastructure-tmp-files-codebuild.example.manifest"></a>

O arquivo de manifesto a seguir especifica o CodeBuild provisionamento e inclui os comandos necessários para instalar e usar o arquivo de saída AWS CDK, processar o arquivo e reportar as saídas para. AWS Proton

**Example infrastructure/manifest.yaml**  

```
infrastructure:
  templates:
    - rendering_engine: codebuild
      settings:
        image: aws/codebuild/amazonlinux2-x86_64-standard:4.0
        runtimes:
          nodejs: 16
        provision:
          - npm install
          - npm run build
          - npm run cdk bootstrap
          - npm run cdk deploy -- --require-approval never --outputs-file proton-outputs.json
          - jq 'to_entries | map_values(.value) | add | to_entries | map({key:.key, valueString:.value})' < proton-outputs.json > outputs.json
          - aws proton notify-resource-deployment-status-change --resource-arn $RESOURCE_ARN --status IN_PROGRESS --outputs file://./outputs.json
        deprovision:
          - npm install
          - npm run build
          - npm run cdk destroy
        project_properties:
          VpcConfig:
            VpcId: "{{ environment.inputs.codebuild_vpc_id }}"
            Subnets: "{{ environment.inputs.codebuild_subnets }}"
            SecurityGroupIds: "{{ environment.inputs.codebuild_security_groups }}"
```

### Esquema
<a name="ag-infrastructure-tmp-files-codebuild.example.schema"></a>

O arquivo de esquema a seguir define parâmetros para o ambiente. Seu AWS CDK código pode se referir aos valores desses parâmetros durante a implantação.

**Example schema/schema.yaml**  

```
schema:
  format:
    openapi: "3.0.0"
  environment_input_type: "MyEnvironmentInputType"
  types:
    MyEnvironmentInputType:
      type: object
      description: "Input properties for my environment"
      properties:
        my_sample_input:
          type: string
          description: "This is a sample input"
          default: "hello world"
        my_other_sample_input:
          type: string
          description: "Another sample input"
      required:
        - my_other_sample_input
```

### AWS CDK arquivos
<a name="ag-infrastructure-tmp-files-codebuild.example.cdkcode"></a>

Os arquivos a seguir são um exemplo de um projeto CDK do Node.js.

**Example infrastructure/package.json**  

```
{
  "name": "ProtonEnvironment",
  "version": "0.1.0",
  "bin": {
    "ProtonEnvironmente": "bin/ProtonEnvironment.js"
  },
  "scripts": {
    "build": "tsc",
    "watch": "tsc -w",
    "test": "jest",
    "cdk": "cdk"
  },
  "devDependencies": {
    "@types/jest": "^28.1.7",
    "@types/node": "18.7.6",
    "jest": "^28.1.3",
    "ts-jest": "^28.0.8",
    "aws-cdk": "2.37.1",
    "ts-node": "^10.9.1",
    "typescript": "~4.7.4"
  },
  "dependencies": {
    "aws-cdk-lib": "2.37.1",
    "constructs": "^10.1.77",
    "source-map-support": "^0.5.21"
  }
}
```

**Example infrastructure/tsconfig.json**  

```
{
  "compilerOptions": {
    "target": "ES2018",
    "module": "commonjs",
    "lib": [
      "es2018"
    ],
    "declaration": true,
    "strict": true,
    "noImplicitAny": true,
    "strictNullChecks": true,
    "noImplicitThis": true,
    "alwaysStrict": true,
    "noUnusedLocals": false,
    "noUnusedParameters": false,
    "noImplicitReturns": true,
    "noFallthroughCasesInSwitch": false,
    "inlineSourceMap": true,
    "inlineSources": true,
    "experimentalDecorators": true,
    "strictPropertyInitialization": false,
    "resolveJsonModule": true,
    "esModuleInterop": true,
    "typeRoots": [
      "./node_modules/@types"
    ]
  },
  "exclude": [
    "node_modules",
    "cdk.out"
  ]
}
```

**Example infrastructure/cdk.json**  

```
{
  "app": "npx ts-node --prefer-ts-exts bin/ProtonEnvironment.ts",
  "outputsFile": "proton-outputs.json",
  "watch": {
    "include": [
      "**"
    ],
    "exclude": [
      "README.md",
      "cdk*.json",
      "**/*.d.ts",
      "**/*.js",
      "tsconfig.json",
      "package*.json",
      "yarn.lock",
      "node_modules",
      "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:target-partitions": [
      "aws",
      "aws-cn"
    ]
  }
}
```

**Example infrastructure/bin/ProtonEnvironment.ts**  

```
#!/usr/bin/env node
import 'source-map-support/register';
import * as cdk from 'aws-cdk-lib';
import { ProtonEnvironmentStack } from '../lib/ProtonEnvironmentStack';

const app = new cdk.App();
new ProtonEnvironmentStack(app, 'ProtonEnvironmentStack', {});
```

**Example infrastructure/lib/ProtonEnvironmentStack.ts**  

```
import { Stack, StackProps } from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as cdk from 'aws-cdk-lib';
import * as ssm from 'aws-cdk-lib/aws-ssm';
import input from '../proton-inputs.json';

export class ProtonEnvironmentStack extends Stack {
  constructor(scope: Construct, id: string, props?: StackProps) {
    super(scope, id, { ...props, stackName: process.env.STACK_NAME });

    const ssmParam = new ssm.StringParameter(this, "ssmParam", {
      stringValue: input.environment.inputs.my_sample_input,
      parameterName: `${process.env.STACK_NAME}-Param`,
      tier: ssm.ParameterTier.STANDARD
    })

    new cdk.CfnOutput(this, 'ssmParamOutput', {
      value: ssmParam.parameterName,
      description: 'The name of the ssm parameter',
      exportName: `${process.env.STACK_NAME}-Param`
    });
  }
}
```

### Arquivo de entrada renderizado
<a name="ag-infrastructure-tmp-files-codebuild.example.manifest"></a>

Quando você cria um ambiente usando um modelo de provisionamento CodeBuild baseado, AWS Proton renderiza um arquivo de entrada com os [valores dos parâmetros de entrada](https://docs.aws.amazon.com/proton/latest/userguide/parameters.html) fornecidos por você. Seu código pode se referir a esses valores. O arquivo a seguir é um exemplo de um arquivo de entrada renderizado.

**Example infrastructure/proton-inputs.json**  

```
{
  "environment": {
    "name": "myenv",
    "inputs": {
      "my_sample_input": "10.0.0.0/16",
      "my_other_sample_input": "11.0.0.0/16"
    }
  }
}
```