CodeBuild Bereitstellungsvorlagen-Bundle - AWS Proton

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

CodeBuild Bereitstellungsvorlagen-Bundle

CodeBuild Anstatt IaC-Vorlagen zum Rendern von IaC-Dateien zu verwenden und diese mit einer IaC-Bereitstellungs-Engine auszuführen, führt AWS Proton einfach Ihre Shell-Befehle aus. Dazu AWS Proton erstellt ein - AWS CodeBuild Projekt für die Umgebung im Umgebungskonto und startet einen Auftrag zum Ausführen Ihrer Befehle für jede AWS Proton Ressourcenerstellung oder -aktualisierung. Wenn Sie ein Vorlagen-Bundle erstellen, stellen Sie ein Manifest bereit, das Befehle zur Infrastrukturbereitstellung und -aufhebung sowie alle Programme, Skripts und anderen Dateien angibt, die diese Befehle möglicherweise benötigen. Ihre Befehle können Eingaben lesen, die AWS Proton bereitstellt, und sind für die Bereitstellung oder Aufhebung der Bereitstellung von Infrastruktur und die Generierung von Ausgabewerten verantwortlich.

Das Manifest gibt auch an, wie die Eingabedatei rendern AWS Proton soll, die Ihr Code eingeben und Eingabewerte abrufen kann. Er kann in JSON oder HCL gerendert werden. Weitere Informationen zu Eingabeparametern finden Sie unter CodeBuild Details und Beispiele für Bereitstellungsparameter. Weitere Informationen zu Manifestdateien finden Sie unter Vorlagendateien für einpacken AWS Proton.

Anmerkung

Sie können die CodeBuild Bereitstellung mit Umgebungen und Services verwenden. Derzeit können Sie Komponenten nicht auf diese Weise bereitstellen.

Beispiel: Verwenden der AWS CDK mit CodeBuild Bereitstellung

Als Beispiel für die Verwendung der CodeBuild Bereitstellung können Sie Code einschließen, der die verwendet, AWS Cloud Development Kit (AWS CDK) um AWS Ressourcen bereitzustellen (bereitzustellen) und die Bereitstellung aufzuheben (zerstören), sowie ein Manifest, das das CDK installiert und Ihren CDK-Code ausführt.

In den folgenden Abschnitten werden Beispieldateien aufgeführt, die Sie in ein CodeBuild Bereitstellungsvorlagenpaket aufnehmen können, das eine Umgebung mithilfe der bereitstellt AWS CDK.

Die folgende Manifestdatei legt die CodeBuild Bereitstellung fest und enthält die Befehle, die für die Installation und Verwendung von AWS CDK, die Verarbeitung von Ausgabedateien und die Rückgabe von Ausgaben an erforderlich sind AWS Proton.

Beispiel Infrastruktur/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 }}"

Die folgende Schemadatei definiert Parameter für die Umgebung. Ihr AWS CDK Code kann während der Bereitstellung auf Werte dieser Parameter verweisen.

Beispiel 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

Die folgenden Dateien sind ein Beispiel für ein Node.js-CDK-Projekt.

Beispiel 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" } }
Beispiel 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" ] }
Beispiel Infrastruktur/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" ] } }
Beispiel Infrastruktur/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', {});
Beispiel 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` }); } }

Wenn Sie eine Umgebung mit einer CodeBuild-basierten Bereitstellungsvorlage erstellen, AWS Proton rendert eine Eingabedatei mit Eingabeparameterwerten, die Sie angegeben haben. Ihr Code kann sich auf diese Werte beziehen. Die folgende Datei ist ein Beispiel für eine gerenderte Eingabedatei.

Beispiel Infrastruktur/proton-inputs.json
{ "environment": { "name": "myenv", "inputs": { "my_sample_input": "10.0.0.0/16", "my_other_sample_input": "11.0.0.0/16" } } }