使用 AWS 管道和 CDK 将应用程序从 github 部署到 Fargate
Deploy the app from github to fargate using AWS pipelines and CDK
我正在尝试使用 AWS CDK 设置从 github 到 AWS Fargate 应用程序的 CI/CD。
我试过使用“CDK 管道”:
https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.pipelines-readme.html
而且我还尝试了另一个(代码管道?):
https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_codepipeline-readme.html
不知何故,这两个都没有我需要的功能。
我添加了一个带有构建操作的步骤:
https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_codepipeline_actions.CodeBuildAction.html
它运行良好并生成了一个工件。这是代码:
const buildArtifact = new Artifact();
pipeline.addStage({
stageName: "Build",
actions: [
new CodeBuildAction({
project: new PipelineProject(this, "Build", {
projectName: "Build",
buildSpec: BuildSpec.fromSourceFilename("./docker-compose.yml"),
}),
input: sources,
outputs: [buildArtifact],
}),
],
});
但随后我开始将构建结果部署到 Fargate,例如:
https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ecs.FargateTaskDefinition.html
const fargateTaskDefinition = new ecs.FargateTaskDefinition(this, 'TaskDef', {
memoryLimitMiB: 512,
cpu: 256,
});
const container = fargateTaskDefinition.addContainer("WebContainer", {
image: ecs.ContainerImage.from...??
});
而且,事实证明,绝对没有办法从工件创建这个容器镜像:
https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ecs.ContainerImage.html
可悲的是,这一切都是徒劳的。
如何创建一个真正有效的管道并将 C# 项目部署到 Fargate 服务?
这不像我在尝试实现一些复杂的东西——只是为了部署我的 C# 应用程序。所以,我一定是做错了什么。
你基本上已经掌握了所有的部分。由于 addContainer
函数的 image
属性需要类型 ContainerImage,我们可以看到几个用于定义该图像的选项(AssetImage
和 EcrImage
似乎是最相关的.)
如果你想走 ECR 镜像路线,你可以修改你添加的构建步骤以将构建的容器推送到 ECR,然后使用 EcrImage
提供任务定义(this 文章有一个有用的 buildspec.yml 可以解决)。
或者,您可以使用 AssetImage
,将其指向存储库中的正确位置,并让 CDK 处理构建。请注意,在此用例中,AssetImage 没有接收 pre-built 工件,而是生成工件本身。这显然需要您的 Dockerfile 和 C# 代码与您的 CDK 代码位于同一存储库中。
我正在尝试使用 AWS CDK 设置从 github 到 AWS Fargate 应用程序的 CI/CD。 我试过使用“CDK 管道”: https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.pipelines-readme.html
而且我还尝试了另一个(代码管道?): https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_codepipeline-readme.html
不知何故,这两个都没有我需要的功能。
我添加了一个带有构建操作的步骤: https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_codepipeline_actions.CodeBuildAction.html
它运行良好并生成了一个工件。这是代码:
const buildArtifact = new Artifact();
pipeline.addStage({
stageName: "Build",
actions: [
new CodeBuildAction({
project: new PipelineProject(this, "Build", {
projectName: "Build",
buildSpec: BuildSpec.fromSourceFilename("./docker-compose.yml"),
}),
input: sources,
outputs: [buildArtifact],
}),
],
});
但随后我开始将构建结果部署到 Fargate,例如: https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ecs.FargateTaskDefinition.html
const fargateTaskDefinition = new ecs.FargateTaskDefinition(this, 'TaskDef', {
memoryLimitMiB: 512,
cpu: 256,
});
const container = fargateTaskDefinition.addContainer("WebContainer", {
image: ecs.ContainerImage.from...??
});
而且,事实证明,绝对没有办法从工件创建这个容器镜像: https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ecs.ContainerImage.html
可悲的是,这一切都是徒劳的。
如何创建一个真正有效的管道并将 C# 项目部署到 Fargate 服务? 这不像我在尝试实现一些复杂的东西——只是为了部署我的 C# 应用程序。所以,我一定是做错了什么。
你基本上已经掌握了所有的部分。由于 addContainer
函数的 image
属性需要类型 ContainerImage,我们可以看到几个用于定义该图像的选项(AssetImage
和 EcrImage
似乎是最相关的.)
如果你想走 ECR 镜像路线,你可以修改你添加的构建步骤以将构建的容器推送到 ECR,然后使用 EcrImage
提供任务定义(this 文章有一个有用的 buildspec.yml 可以解决)。
或者,您可以使用 AssetImage
,将其指向存储库中的正确位置,并让 CDK 处理构建。请注意,在此用例中,AssetImage 没有接收 pre-built 工件,而是生成工件本身。这显然需要您的 Dockerfile 和 C# 代码与您的 CDK 代码位于同一存储库中。