in src/main.ts [12:92]
constructor(scope: cdk.Construct, id: string) {
super(scope, id);
const vpc = getOrCreateVpc(this);
const cluster = new eks.Cluster(this, 'Cluster', {
vpc,
version: eks.KubernetesVersion.V1_20,
defaultCapacity: 2,
});
const stackName = cdk.Stack.of(this).stackName;
const ecrRepo = new ecr.Repository(this, 'EcrRepo');
const repository = new codecommit.Repository(this, 'CodeCommitRepo', {
repositoryName: `${stackName}-repo`,
});
const project = new codebuild.Project(this, 'MyProject', {
projectName: `${stackName}`,
source: codebuild.Source.codeCommit({ repository }),
environment: {
buildImage: codebuild.LinuxBuildImage.fromAsset(this, 'CustomImage', {
directory: path.join(__dirname, '../dockerAssets.d'),
}),
privileged: true,
},
environmentVariables: {
CLUSTER_NAME: {
value: `${cluster.clusterName}`,
},
ECR_REPO_URI: {
value: `${ecrRepo.repositoryUri}`,
},
},
buildSpec: codebuild.BuildSpec.fromObject({
version: '0.2',
phases: {
pre_build: {
commands: [
'env',
'export TAG=${CODEBUILD_RESOLVED_SOURCE_VERSION}',
'export AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output=text)',
'/usr/local/bin/entrypoint.sh',
'echo Logging in to Amazon ECR',
'aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com',
],
},
build: {
commands: [
'cd flask-docker-app',
'docker build -t $ECR_REPO_URI:$TAG .',
'docker push $ECR_REPO_URI:$TAG',
],
},
post_build: {
commands: [
'kubectl get no',
'kubectl set image deployment flask-deployment flask=$ECR_REPO_URI:$TAG',
],
},
},
}),
});
repository.onCommit('OnCommit', {
target: new targets.CodeBuildProject(project),
});
ecrRepo.grantPullPush(project.role!);
cluster.awsAuth.addMastersRole(project.role!);
project.addToRolePolicy(new iam.PolicyStatement({
actions: ['eks:DescribeCluster'],
resources: [`${cluster.clusterArn}`],
}));
new cdk.CfnOutput(this, 'CodeCommitRepoName', { value: `${repository.repositoryName}` });
new cdk.CfnOutput(this, 'CodeCommitRepoArn', { value: `${repository.repositoryArn}` });
new cdk.CfnOutput(this, 'CodeCommitCloneUrlSsh', { value: `${repository.repositoryCloneUrlSsh}` });
new cdk.CfnOutput(this, 'CodeCommitCloneUrlHttp', { value: `${repository.repositoryCloneUrlHttp}` });
}