CodeBuild 佈建範本套件 - AWS Proton

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

CodeBuild 佈建範本套件

CodeBuild 隨著佈建,而不是使用 IaC 範本來呈現 IaC 檔案,並使用 IaC 佈建引擎執行它們, AWS Proton 只需執行您的殼層命令。為此,請在環境帳戶中為環境創 AWS Proton 建一個 AWS CodeBuild 項目,並啟動一項工作以為每次 AWS Proton 資源創建或更新運行命令。當您編寫範本服務包時,您會提供資訊清單,以指定基礎結構佈建和取消佈建命令,以及這些命令可能需要的任何程式、指令碼和其他檔案。您的命令可以讀取 AWS Proton 提供的輸入,並負責佈建或取消佈建基礎結構,以及產生輸出值。

清單還指定了 AWS Proton 如何呈現代碼可以輸入並從中獲取輸入值的輸入文件。它可以被渲染成 JSON 或 HCL。如需輸入參數的更多資訊,請參閱CodeBuild 佈建參數詳細資料和範例。如需資訊清單檔案的相關資訊,請參閱包裝的範本檔案 AWS Proton

注意

您可以將 CodeBuild 佈建與環境和服務搭配使用。目前您無法以這種方式佈建元件。

範例:使用 AWS CDK 與 CodeBuild 佈建

作為使用 CodeBuild 佈建的範例,您可以包含使用佈建 (部署) 和取消佈建 (銷毀) AWS 資源的程式碼,以及安裝 CDK 並執行 CDK 程式碼的資訊清單。 AWS Cloud Development Kit (AWS CDK)

下列各節列出您可以包含在使用佈建環境的 CodeBuild 佈建範本套裝軟體中的範例檔案 AWS CDK。

下列資訊清單檔案會指定 CodeBuild 佈建,並包含安裝和使用輸出 AWS CDK、輸出檔案處理以及回報輸出所需的命令 AWS Proton。

範例 基礎設施/表現。
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 }}"

下列結構描述檔案定義了環境的參數。您的 AWS CDK 程式碼可以在部署期間參考這些參數的值。

範例 模式/方案/亞姆
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

下列檔案是 Node.js CDK 專案的範例。

範例 基礎結構/封裝.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" } }
範例 基礎結構/設定.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" ] }
範例 基礎設施
{ "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" ] } }
範例 基礎設施//.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', {});
範例 基礎設施/庫/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` }); } }

使用 CodeBuild以基礎的佈建範本建立環境時, AWS Proton 會使用您提供的輸入參數值轉譯輸入檔案。您的程式碼可以參考這些值。下面的文件是一個例子渲染的輸入文件。

範例 基礎結構/質子輸入.json
{ "environment": { "name": "myenv", "inputs": { "my_sample_input": "10.0.0.0/16", "my_other_sample_input": "11.0.0.0/16" } } }