AWS CDK Init 容器依赖与 Fargate 模式
AWS CDK Init Container dependency with Fargate Pattern
我正在尝试使用 CDK 来定义一个 ApplicationLoadBalancedFargateService
,如下所示:
const cluster = new ecs.Cluster(this, 'Cluster', { vpc });
const loadBalancedService = new ecs_patterns.ApplicationLoadBalancedFargateService(this, "FargateService", {
cluster,
taskImageOptions: {
image: ecs.ContainerImage.fromRegistry("public.ecr.aws/XXXXXXXX/my-node-app:latest"),
environment: {
DATABASE_HOST: rdsCluster.attrEndpointAddress,
DATABASE_NAME: databaseName,
DATABASE_USERNAME: databaseCredentialsSecret.secretValueFromJson('username').toString(),
DATABASE_PASSWORD: databaseCredentialsSecret.secretValueFromJson('password').toString(),
}
},
});
我之前已经在应用程序中创建了一个 RDS 集群。在启动此 Fargate 服务之前,我想 运行 一个初始化容器,但我不太确定如何。我知道 aws-ecs 构造中有一个 ContainerDependency
,但我认为我不能在这里应用它。
ECS 容器 can have dependencies. In the CDK, you can add a dependency to a ContainerDefinition
construct using its addContainerDependencies 方法。
当您使用 L3 ecs_patterns.ApplicationLoadBalancedFargateService
构造时,您的第一步是通过任务定义的 defaultContainer 属性 获取对基础服务 ContainerDefinition
的引用:
const serviceContainer: : ecs.ContainerDefinition | undefined = loadBalancedService.taskDefinition.defaultContainer;
if (!serviceContainer) throw new Error('LB Service default container must be defined!');
然后将init
容器添加到任务定义中:
const initContainer = loadBalancedService.taskDefinition.addContainer('init', {
image: ecs.ContainerImage.fromRegistry('init/my-image'),
essential: false,
});
最后,创建具有 SUCCESS
条件的依赖项。 condition 在允许其他容器启动之前验证依赖容器运行完成(并以 0 退出):
serviceContainer.addContainerDependencies({
container: initContainer,
condition: ecs.ContainerDependencyCondition.SUCCESS,
});
我正在尝试使用 CDK 来定义一个 ApplicationLoadBalancedFargateService
,如下所示:
const cluster = new ecs.Cluster(this, 'Cluster', { vpc });
const loadBalancedService = new ecs_patterns.ApplicationLoadBalancedFargateService(this, "FargateService", {
cluster,
taskImageOptions: {
image: ecs.ContainerImage.fromRegistry("public.ecr.aws/XXXXXXXX/my-node-app:latest"),
environment: {
DATABASE_HOST: rdsCluster.attrEndpointAddress,
DATABASE_NAME: databaseName,
DATABASE_USERNAME: databaseCredentialsSecret.secretValueFromJson('username').toString(),
DATABASE_PASSWORD: databaseCredentialsSecret.secretValueFromJson('password').toString(),
}
},
});
我之前已经在应用程序中创建了一个 RDS 集群。在启动此 Fargate 服务之前,我想 运行 一个初始化容器,但我不太确定如何。我知道 aws-ecs 构造中有一个 ContainerDependency
,但我认为我不能在这里应用它。
ECS 容器 can have dependencies. In the CDK, you can add a dependency to a ContainerDefinition
construct using its addContainerDependencies 方法。
当您使用 L3 ecs_patterns.ApplicationLoadBalancedFargateService
构造时,您的第一步是通过任务定义的 defaultContainer 属性 获取对基础服务 ContainerDefinition
的引用:
const serviceContainer: : ecs.ContainerDefinition | undefined = loadBalancedService.taskDefinition.defaultContainer;
if (!serviceContainer) throw new Error('LB Service default container must be defined!');
然后将init
容器添加到任务定义中:
const initContainer = loadBalancedService.taskDefinition.addContainer('init', {
image: ecs.ContainerImage.fromRegistry('init/my-image'),
essential: false,
});
最后,创建具有 SUCCESS
条件的依赖项。 condition 在允许其他容器启动之前验证依赖容器运行完成(并以 0 退出):
serviceContainer.addContainerDependencies({
container: initContainer,
condition: ecs.ContainerDependencyCondition.SUCCESS,
});