CodeBuild bundel templat penyediaan - AWS Proton

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

CodeBuild bundel templat penyediaan

Dengan CodeBuild penyediaan, alih-alih menggunakan templat IAc untuk merender file IAc dan menjalankannya menggunakan mesin penyediaan IAC, cukup jalankan perintah shell Anda. AWS Proton Untuk melakukan itu, AWS Proton buat AWS CodeBuild proyek untuk lingkungan, di akun lingkungan, dan mulai pekerjaan untuk menjalankan perintah Anda untuk setiap pembuatan atau pembaruan AWS Proton sumber daya. Saat Anda membuat bundel templat, Anda menyediakan manifes yang menentukan perintah penyediaan dan penonjolan infrastruktur, serta program, skrip, dan file lain yang mungkin diperlukan oleh perintah ini. Perintah Anda dapat membaca input yang AWS Proton menyediakan, dan bertanggung jawab untuk penyediaan atau deprovisioning infrastruktur dan menghasilkan nilai output.

Manifes juga menentukan bagaimana AWS Proton seharusnya merender file input yang kode Anda dapat input dan mendapatkan nilai masukan dari. Itu dapat dirender ke JSON atau HCL. Untuk informasi selengkapnya tentang parameter input, lihatCodeBuild rincian parameter penyediaan dan contoh. Untuk informasi selengkapnya tentang file manifes, lihatBungkus file template untuk AWS Proton.

catatan

Anda dapat menggunakan CodeBuild penyediaan dengan lingkungan dan layanan. Saat ini Anda tidak dapat menyediakan komponen dengan cara ini.

Contoh: menggunakan AWS CDK with CodeBuild provisioning

Sebagai contoh untuk menggunakan CodeBuild provisioning, Anda dapat menyertakan kode yang menggunakan AWS sumber daya AWS Cloud Development Kit (AWS CDK) to provisioning (deploy) dan deprovision (destroy), serta manifes yang menginstal CDK dan menjalankan kode CDK Anda.

Bagian berikut mencantumkan file contoh yang dapat Anda sertakan dalam bundel templat CodeBuild penyediaan yang menyediakan lingkungan menggunakan. AWS CDK

File manifes berikut CodeBuild menentukan penyediaan, dan menyertakan perintah yang diperlukan untuk menginstal dan menggunakan, pemrosesan file keluaran AWS CDK, dan pelaporan output kembali ke. AWS Proton

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

File skema berikut mendefinisikan parameter untuk lingkungan. AWS CDK Kode Anda dapat merujuk ke nilai parameter ini selama penerapan.

contoh 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

File-file berikut adalah contoh untuk proyek CDK Node.js.

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

Saat Anda membuat lingkungan menggunakan templat penyediaan CodeBuild berbasis, AWS Proton merender file input dengan nilai parameter masukan yang Anda berikan. Kode Anda dapat merujuk ke nilai-nilai ini. File berikut adalah contoh untuk file input yang diberikan.

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