@aws-cdk/aws-codedeploy

中文文档
1.204.0发布于 2023/06/20Apache-2.0TypeScriptCommonJS近 30 天下载 7.4万

AWS 的 CDK 构建库: 代码部署

此软件包已被标记为弃用

AWS CDK v1 has reached End-of-Support on 2023-06-01. This package is no longer being updated, and users should migrate to AWS CDK v2. For more information on how to migrate, see https://docs.aws.amazon.com/cdk/v2/guide/migrating-v2.html

中文使用文档
文档目录10 节
  1. EC2/关于前提的应用程序
  2. EC2/现场部署小组
  3. 装入平衡器
  4. 部署配置
  5. Lambda 应用程序
  6. Lambda 部署小组
  7. 创建自定义部署配置
  8. 回滚和警报
  9. 钩子和后钩
  10. 导入现有的部署小组

AWS 代码部署构造库


End-of-Support

AWS CDK v1在2023-06-01上达到了支持结束. 此软件包不再更新,用户应该迁移到 AWS CDK v2.

关于如何移徙的更多信息,请参见: 移动到 AWS CDK v2 指南。 。 。 .


AWS 代码Depplus是一个部署服务,将应用程序部署自动化到 Amazon EC2 实例, 默认实例, 无服务器的 Lambda 函数, 或 亚马逊ECS服务.

CDK目前支持Amazon EC2, on-premise和AWS Lambda应用.

EC2/关于前提的应用程序

创建一个新的代码部署应用程序,用于EC2/promise实例:

const application = new codedeploy.ServerApplication(this, 'CodeDeployApplication', {
  applicationName: 'MyApplication', // optional property
});

要导入已有的应用程序 :

const application = codedeploy.ServerApplication.fromServerApplicationName(
  this,
  'ExistingCodeDeployApplication',
  'MyExistingApplication',
);

EC2/现场部署小组

设立一个新的代号部署小组,部署在EC2/promise实例中:

import * as autoscaling from '@aws-cdk/aws-autoscaling';
import * as cloudwatch from '@aws-cdk/aws-cloudwatch';

declare const application: codedeploy.ServerApplication;
declare const asg: autoscaling.AutoScalingGroup;
declare const alarm: cloudwatch.Alarm;
const deploymentGroup = new codedeploy.ServerDeploymentGroup(this, 'CodeDeployDeploymentGroup', {
  application,
  deploymentGroupName: 'MyDeploymentGroup',
  autoScalingGroups: [asg],
  // adds User Data that installs the CodeDeploy agent on your auto-scaling groups hosts
  // default: true
  installAgent: true,
  // adds EC2 instances matching tags
  ec2InstanceTags: new codedeploy.InstanceTagSet(
    {
      // any instance with tags satisfying
      // key1=v1 or key1=v2 or key2 (any value) or value v3 (any key)
      // will match this group
      'key1': ['v1', 'v2'],
      'key2': [],
      '': ['v3'],
    },
  ),
  // adds on-premise instances matching tags
  onPremiseInstanceTags: new codedeploy.InstanceTagSet(
    // only instances with tags (key1=v1 or key1=v2) AND key2=v3 will match this set
    {
      'key1': ['v1', 'v2'],
    },
    {
      'key2': ['v3'],
    },
  ),
  // CloudWatch alarms
  alarms: [alarm],
  // whether to ignore failure to fetch the status of alarms from CloudWatch
  // default: false
  ignorePollAlarmsFailure: false,
  // auto-rollback configuration
  autoRollback: {
    failedDeployment: true, // default: true
    stoppedDeployment: true, // default: false
    deploymentInAlarm: true, // default: true if you provided any alarms, false otherwise
  },
});

所有属性都是可选的 - 如果你不提供应用程序, 将自动创建.

要导入已有的部署小组:

declare const application: codedeploy.ServerApplication;
const deploymentGroup = codedeploy.ServerDeploymentGroup.fromServerDeploymentGroupAttributes(
  this, 
  'ExistingCodeDeployDeploymentGroup', {
    application,
    deploymentGroupName: 'MyExistingDeploymentGroup',
  },
);

装入平衡器

你们可以 指定负载平衡器 与 loadBalancer 创建部署小组时的属性.

LoadBalancer 是一个抽象的类,带有静态的工厂方法, 允许您从各种来源创建实例.

用经典弹性负载平衡器直接提供:

import * as elb from '@aws-cdk/aws-elasticloadbalancing';

declare const lb: elb.LoadBalancer;
lb.addListener({
  externalPort: 80,
});

const deploymentGroup = new codedeploy.ServerDeploymentGroup(this, 'DeploymentGroup', {
  loadBalancer: codedeploy.LoadBalancer.classic(lb),
});

有应用程序负载平衡器或网络负载平衡器, 您提供了一个目标组作为负载平衡器:

import * as elbv2 from '@aws-cdk/aws-elasticloadbalancingv2';

declare const alb: elbv2.ApplicationLoadBalancer;
const listener = alb.addListener('Listener', { port: 80 });
const targetGroup = listener.addTargets('Fleet', { port: 80 });

const deploymentGroup = new codedeploy.ServerDeploymentGroup(this, 'DeploymentGroup', {
  loadBalancer: codedeploy.LoadBalancer.application(targetGroup),
});

部署配置

您也可以在创建部署小组时通过部署配置 :

const deploymentGroup = new codedeploy.ServerDeploymentGroup(this, 'CodeDeployDeploymentGroup', {
  deploymentConfig: codedeploy.ServerDeploymentConfig.ALL_AT_ONCE,
});

默认部署配置为 ServerDeploymentConfig.ONE_AT_A_TIME。 。 。 .

您也可以创建自定义部署配置 :

const deploymentConfig = new codedeploy.ServerDeploymentConfig(this, 'DeploymentConfiguration', {
  deploymentConfigName: 'MyDeploymentConfiguration', // optional property
  // one of these is required, but both cannot be specified at the same time
  minimumHealthyHosts: codedeploy.MinimumHealthyHosts.count(2),
  // minimumHealthyHosts: codedeploy.MinimumHealthyHosts.percentage(75),
});

或导入已有的 :

const deploymentConfig = codedeploy.ServerDeploymentConfig.fromServerDeploymentConfigName(
  this,
  'ExistingDeploymentConfiguration',
  'MyExistingDeploymentConfiguration',
);

Lambda 应用程序

要创建用于 Lambda 函数的新代码部署应用程序:

const application = new codedeploy.LambdaApplication(this, 'CodeDeployApplication', {
  applicationName: 'MyApplication', // optional property
});

要导入已有的应用程序 :

const application = codedeploy.LambdaApplication.fromLambdaApplicationName(
  this,
  'ExistingCodeDeployApplication',
  'MyExistingApplication',
);

Lambda 部署小组

为了实现Lambda函数的流量转移部署,CodeDplus使用Lambda Alitaases,可以平衡您函数的两个不同版本的流量. 在部署前,别名会100%地向生产中使用的版本发送引用. 当您向您的堆栈发布新版本的功能时, CodeDploy将会向新版本发送一小部分流量,监控,并在将100%的流量转移到新版本之前进行验证.

为建立一个新的代号部署部署小组,部署在Lambda职能中:

declare const myApplication: codedeploy.LambdaApplication;
declare const func: lambda.Function;
const version = func.currentVersion;
const version1Alias = new lambda.Alias(this, 'alias', {
  aliasName: 'prod',
  version,
});

const deploymentGroup = new codedeploy.LambdaDeploymentGroup(this, 'BlueGreenDeployment', {
  application: myApplication, // optional property: one will be created for you if not provided
  alias: version1Alias,
  deploymentConfig: codedeploy.LambdaDeploymentConfig.LINEAR_10PERCENT_EVERY_1MINUTE,
});

为了部署这个功能的新版本:

  1. 以最新的更改引用版本 const version = func.currentVersion。 。 。 .
  2. 重新部署堆栈( 这将触发部署) .
  3. 监控代码部署,作为版本之间的流量转移.

创建自定义部署配置

Lambda的代码部署带有内置的换乘配置. 如果你想说明自己的策略, 您可以使用自定义LambdaD部署配置构建, 请精确指定新功能版本的部署速度 .

const config = new codedeploy.CustomLambdaDeploymentConfig(this, 'CustomConfig', {
  type: codedeploy.CustomLambdaDeploymentConfigType.CANARY,
  interval: Duration.minutes(1),
  percentage: 5,
});

declare const application: codedeploy.LambdaApplication;
declare const alias: lambda.Alias;
const deploymentGroup = new codedeploy.LambdaDeploymentGroup(this, 'BlueGreenDeployment', {
  application,
  alias,
  deploymentConfig: config,
});

您可以为您的部署配置指定自定义名称, 但如果您这样做, 您将无法通过 CDK 更新间隔/ 百分比 .

const config = new codedeploy.CustomLambdaDeploymentConfig(this, 'CustomConfig', {
  type: codedeploy.CustomLambdaDeploymentConfigType.CANARY,
  interval: Duration.minutes(1),
  percentage: 5,
  deploymentConfigName: 'MyDeploymentConfig',
});

回滚和警报

如果部署失败 代码部署会退后 当一个或多个提醒处于失败状态时, 您可以选择触发回滚 :

import * as cloudwatch from '@aws-cdk/aws-cloudwatch';

declare const alias: lambda.Alias;
const alarm = new cloudwatch.Alarm(this, 'Errors', {
  comparisonOperator: cloudwatch.ComparisonOperator.GREATER_THAN_THRESHOLD,
  threshold: 1,
  evaluationPeriods: 1,
  metric: alias.metricErrors(),
});
const deploymentGroup = new codedeploy.LambdaDeploymentGroup(this, 'BlueGreenDeployment', {
  alias,
  deploymentConfig: codedeploy.LambdaDeploymentConfig.LINEAR_10PERCENT_EVERY_1MINUTE,
  alarms: [
    // pass some alarms when constructing the deployment group
    alarm,
  ],
});

// or add alarms to an existing group
declare const blueGreenAlias: lambda.Alias;
deploymentGroup.addAlarm(new cloudwatch.Alarm(this, 'BlueGreenErrors', {
  comparisonOperator: cloudwatch.ComparisonOperator.GREATER_THAN_THRESHOLD,
  threshold: 1,
  evaluationPeriods: 1,
  metric: blueGreenAlias.metricErrors(),
}));

钩子和后钩

CodeDeplocation允许您在交通转会实际开始前(PreTraffic Hook)和完成后(后Traffic Hook)运行任意的Lambda函数. 使用任意一钩,您有机会运行逻辑来决定部署是否必须成功或失败. 例如,用PreTraffic钩子,你可以对新创建的Lambda版本进行集成测试(但不服务流量). 有了后Traffic钩,你可以运行端到端验证检查.

declare const warmUpUserCache: lambda.Function;
declare const endToEndValidation: lambda.Function;
declare const alias: lambda.Alias;

// pass a hook whe creating the deployment group
const deploymentGroup = new codedeploy.LambdaDeploymentGroup(this, 'BlueGreenDeployment', {
  alias: alias,
  deploymentConfig: codedeploy.LambdaDeploymentConfig.LINEAR_10PERCENT_EVERY_1MINUTE,
  preHook: warmUpUserCache,
});

// or configure one on an existing deployment group
deploymentGroup.addPostHook(endToEndValidation);

导入现有的部署小组

要导入已有的部署小组:

declare const application: codedeploy.LambdaApplication;
const deploymentGroup = codedeploy.LambdaDeploymentGroup.fromLambdaDeploymentGroupAttributes(this, 'ExistingCodeDeployDeploymentGroup', {
  application,
  deploymentGroupName: 'MyExistingDeploymentGroup',
});

版本与发布记录

@aws-cdk/aws-codedeploy 共发布 288 个版本,首次发布于 2018/07/31;过去 12 个月发布了 0 个版本。

版本发布日期距今
1.204.0latest2023/06/203 年前
1.203.02023/06/013 年前
1.202.02023/05/223 年前
1.201.02023/05/113 年前
1.200.02023/04/273 年前
1.199.02023/04/213 年前

关于 @aws-cdk/aws-codedeploy 的常见问题

@aws-cdk/aws-codedeploy 是什么?

AWS 的 CDK 构建库: 代码部署注意:该包已被作者标记为弃用——AWS CDK v1 has reached End-of-Support on 2023-06-01. This package is no longer being updated, and users should migrate to AWS CDK v2. For more information on how to migrate, see https://docs.aws.amazon.com/cdk/v2/guide/migrating-v2.html

如何安装 @aws-cdk/aws-codedeploy?

在项目目录运行 npm install @aws-cdk/aws-codedeploy,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:@aws-cdk/aws-autoscaling(1.204.0)、@aws-cdk/aws-cloudwatch(1.204.0)、@aws-cdk/aws-ec2(1.204.0)、@aws-cdk/aws-elasticloadbalancing(1.204.0)、@aws-cdk/aws-elasticloadbalancingv2(1.204.0)、@aws-cdk/aws-iam(1.204.0)、@aws-cdk/aws-lambda(1.204.0)、@aws-cdk/aws-s3(1.204.0)、@aws-cdk/core(1.204.0)、@aws-cdk/custom-resources(1.204.0)、constructs(^3.3.69)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@aws-cdk/aws-codedeploy 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@aws-cdk/aws-codedeploy 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@aws-cdk/aws-codedeploy 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >= 14.15.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@aws-cdk/aws-codedeploy 可以商用吗?

@aws-cdk/aws-codedeploy 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@aws-cdk/aws-codedeploy 的下载量有多少?

根据 npm 官方下载统计,@aws-cdk/aws-codedeploy 在 2026/10/07 – 2026/11/05 这 30 天内被下载 74,422 次,日均约 2,481 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@aws-cdk/aws-codedeploy 还在维护吗?

最新版本 1.204.0 发布于 2023/06/20(3 年前);至今共发布 288 个版本,其中过去 12 个月发布了 0 个;首次发布于 2018/07/31。作者已将其标记为弃用,新项目建议寻找替代方案。