CodeBuild ensemble de modèles de provisionnement - AWS Proton

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

CodeBuild ensemble de modèles de provisionnement

Avec le CodeBuild provisionnement, au lieu d'utiliser des modèles IaC pour afficher les fichiers iAc et les exécuter à l'aide d'un moteur de provisionnement iAc, AWS Proton il suffit d'exécuter vos commandes shell. Pour ce faire, AWS Proton créez un AWS CodeBuild projet pour l'environnement, dans le compte d'environnement, et lancez une tâche pour exécuter vos commandes pour chaque création ou mise à jour de AWS Proton ressource. Lorsque vous créez un ensemble de modèles, vous fournissez un manifeste qui spécifie les commandes de provisionnement et de déprovisionnement de l'infrastructure, ainsi que tous les programmes, scripts et autres fichiers dont ces commandes peuvent avoir besoin. Vos commandes peuvent lire les entrées qui AWS Proton fournissent et sont responsables du provisionnement ou du déprovisionnement de l'infrastructure et de la génération de valeurs de sortie.

Le manifeste indique également comment AWS Proton doit être affiché le fichier d'entrée que votre code peut saisir et à partir duquel les valeurs d'entrée doivent être obtenues. Il peut être rendu au format JSON ou HCL. Pour plus d'informations sur les paramètres d'entrée, consultezCodeBuild détails et exemples des paramètres de provisionnement. Pour plus d’informations sur les fichiers manifeste, consultez Résumez les fichiers modèles pour AWS Proton.

Note

Vous pouvez utiliser le CodeBuild provisionnement avec des environnements et des services. Pour le moment, vous ne pouvez pas approvisionner les composants de cette façon.

Exemple : utilisation du AWS CDK with CodeBuild provisioning

À titre d'exemple d'utilisation du CodeBuild provisionnement, vous pouvez inclure du code qui utilise les AWS ressources AWS Cloud Development Kit (AWS CDK) pour provisionner (déployer) et déprovisionner (détruire), ainsi qu'un manifeste qui installe le CDK et exécute votre code CDK.

Les sections suivantes répertorient des exemples de fichiers que vous pouvez inclure dans un ensemble de modèles de CodeBuild provisionnement qui approvisionne un environnement à l'aide du AWS CDK.

Le fichier manifeste suivant spécifie le CodeBuild provisionnement et inclut les commandes nécessaires pour installer et utiliser le AWS CDK, le traitement des fichiers de sortie et les rapports sur les résultats vers AWS Proton.

Exemple 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 }}"

Le fichier de schéma suivant définit les paramètres de l'environnement. Votre AWS CDK code peut faire référence aux valeurs de ces paramètres lors du déploiement.

Exemple schéma/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

Les fichiers suivants constituent un exemple de projet CDK Node.js.

Exemple 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" } }
Exemple 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" ] }
Exemple 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" ] } }
Exemple infrastructure/bin/ .ts ProtonEnvironment
#!/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', {});
Exemple infrastructure/lib/ .ts ProtonEnvironmentStack
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` }); } }

Lorsque vous créez un environnement à l'aide d'un modèle de provisionnement CodeBuild basé, AWS Proton affiche un fichier d'entrée avec les valeurs de paramètres d'entrée que vous avez fournies. Votre code peut faire référence à ces valeurs. Le fichier suivant est un exemple de fichier d'entrée rendu.

Exemple 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" } } }