Spaces:
Running
Running
import { RemovalPolicy } from 'aws-cdk-lib' | |
import * as ecr from 'aws-cdk-lib/aws-ecr' | |
import * as ecrdeploy from 'cdk-ecr-deployment' | |
import * as ecs from 'aws-cdk-lib/aws-ecs' | |
import * as servicediscovery from 'aws-cdk-lib/aws-servicediscovery' | |
import { DockerImageAsset, Platform } from 'aws-cdk-lib/aws-ecr-assets' | |
import * as path from "path"; | |
import { Construct } from 'constructs' | |
interface ECRProps { | |
arch:ecs.CpuArchitecture; | |
} | |
export class EcrRepository extends Construct { | |
readonly ecrBackEndRepository: ecr.Repository | |
constructor(scope: Construct, id: string, props: ECRProps) { | |
super(scope, id) | |
const imagePlatform = props.arch == ecs.CpuArchitecture.ARM64 ? Platform.LINUX_ARM64 : Platform.LINUX_AMD64 | |
const backendPath = path.join(__dirname, "../../../../../", "langflow") | |
const excludeDir = ['node_modules','.git', 'cdk.out'] | |
const LifecycleRule = { | |
tagStatus: ecr.TagStatus.ANY, | |
description: 'Delete more than 30 image', | |
maxImageCount: 30, | |
} | |
// Backend ECR リポジトリ作成 | |
this.ecrBackEndRepository = new ecr.Repository(scope, 'LangflowBackEndRepository', { | |
repositoryName: 'langflow-backend-repository', | |
removalPolicy: RemovalPolicy.RETAIN, | |
imageScanOnPush: true, | |
}) | |
// LifecycleRule作成 | |
this.ecrBackEndRepository.addLifecycleRule(LifecycleRule) | |
// Create Docker Image Asset | |
const dockerBackEndImageAsset = new DockerImageAsset(this, "DockerBackEndImageAsset", { | |
directory: backendPath, | |
file:"cdk.Dockerfile", | |
exclude: excludeDir, | |
platform: imagePlatform, | |
}); | |
// Deploy Docker Image to ECR Repository | |
new ecrdeploy.ECRDeployment(this, "DeployBackEndImage", { | |
src: new ecrdeploy.DockerImageName(dockerBackEndImageAsset.imageUri), | |
dest: new ecrdeploy.DockerImageName(this.ecrBackEndRepository.repositoryUri) | |
}); | |
} | |
} | |