首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何不在每次部署时都使用TypeScript中的aws-cdk重建DockerImageAsset?

如何不在每次部署时都使用TypeScript中的aws-cdk重建DockerImageAsset?
EN

Stack Overflow用户
提问于 2020-01-24 03:01:14
回答 1查看 1.7K关注 0票数 5

我的应用程序是一个Python API,我将其打包为Docker镜像,并与ECS Fargate (Spot实例)一起使用。下面的代码可以正常工作。

我的问题是,每次我部署它时,它都会重新构建整个镜像-这非常耗时(下载所有依赖项,制作镜像,上传,等等)。我希望它能重复使用aws-cdk上传到ECR的完全相同的图像。

有没有办法(环境变量或其他)让我在不接触应用程序的代码时跳过这一步,而只是对堆栈进行更改?

代码语言:javascript
复制
#!/usr/bin/env node
import * as cdk from "@aws-cdk/core"
import * as ecs from "@aws-cdk/aws-ecs"
import * as ec2 from "@aws-cdk/aws-ec2"
import * as ecrassets from "@aws-cdk/aws-ecr-assets"

// See https://docs.aws.amazon.com/cdk/api/latest/docs/aws-ecs-readme.html
export class Stack extends cdk.Stack {
    constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
        super(scope, id, props)

        /**
         * Repository & Image
         */

        const apiDockerImage = new ecrassets.DockerImageAsset(
            this,
            `my-api-image`,
            {
                directory: `.`,
                exclude: [`cdk.out`, `cdk`, `.git`]
            }
        )

        /**
         * Cluster
         */

        const myCluster = new ecs.Cluster(this, "Cluster", {})

        // Add Spot Capacity to the Cluster
        myCluster.addCapacity(`spot-auto-scaling-group-capacity`, {
            maxCapacity: 2,
            minCapacity: 1,
            instanceType: new ec2.InstanceType(`r5a.large`),
            spotPrice: `0.0400`,
            spotInstanceDraining: true
        })

        // A task Definition describes what a single copy of a task should look like
        const myApiFargateTaskDefinition = new ecs.FargateTaskDefinition(
            this,
            `api-fargate-task-definition`,
            {
                cpu: 2048,
                memoryLimitMiB: 8192,
            }
        )

        // Add image to task def
        myApiFargateTaskDefinition.addContainer(`api-container`, {
            image: ecs.ContainerImage.fromEcrRepository(
                apiDockerImage.repository,
                `latest`
            ),
        })

        // And the service attaching the task def to the cluster
        const myApiService = new ecs.FargateService(
            this,
            `my-api-fargate-service`,
            {
                cluster: myCluster,
                taskDefinition: myApiFargateTaskDefinition,
                desiredCount: 1,
                assignPublicIp: true,
            }
        )
    }
}
EN

回答 1

Stack Overflow用户

发布于 2021-08-12 20:34:28

正确的解决方案是在此部署过程之外构建您的映像,并在ECR中获得对该映像的引用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59885467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档