AWS CDK Init容器依赖于Fargate模式



我试图使用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服务之前运行一个init容器,但我不太确定如何。我知道在laws - etc结构中有一个ContainerDependency,但我认为我不能在这里应用它。

ECS容器可以有依赖关系。在CDK中,您可以使用它的addContainerDependencies方法向ContainerDefinition构造添加依赖项。

当您使用L3ecs_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条件创建依赖项。此条件验证依赖容器在允许其他容器启动之前运行到完成(并以0退出):

serviceContainer.addContainerDependencies({
container: initContainer,
condition: ecs.ContainerDependencyCondition.SUCCESS,
});

最新更新