# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. SPDX-License-Identifier: MIT-0 import aws_cdk as cdk from constructs import Construct import aws_cdk.aws_ecr as ecr import aws_cdk.aws_iam as iam import aws_cdk.aws_codecommit as codecommit import aws_cdk.aws_codepipeline as codepipeline import aws_cdk.aws_codebuild as codebuild import aws_cdk.aws_codepipeline_actions as codepipeline_actions import os class CdkPipelineDotNetStack(cdk.Stack): def __init__(self, scope: Construct, id: str, vpc, **kwargs) -> None: super().__init__(scope, id, **kwargs) name = "graviton2-aspnet-lab" container_repository = ecr.Repository( scope=self, id=f"{name}-container", repository_name=f"{name}" ) codecommit_repo = codecommit.Repository( scope=self, id=f"{name}-container-git", repository_name=f"{name}", description=f"Application code" ) pipeline = codepipeline.Pipeline( scope=self, id=f"{name}-container--pipeline", pipeline_name=f"{name}" ) source_output = codepipeline.Artifact() docker_output_arm64 = codepipeline.Artifact("ARM64_BuildOutput") buildspec_arm64 = codebuild.BuildSpec.from_source_filename("arm64-dotnet-buildspec.yml") docker_build_arm64 = codebuild.PipelineProject( scope=self, id=f"DockerBuild_ARM64", environment=dict( build_image=codebuild.LinuxBuildImage.AMAZON_LINUX_2_ARM, privileged=True), environment_variables={ 'REPO_ECR': codebuild.BuildEnvironmentVariable( value=container_repository.repository_uri), }, build_spec=buildspec_arm64 ) container_repository.grant_pull_push(docker_build_arm64) docker_build_arm64.add_to_role_policy(iam.PolicyStatement( effect=iam.Effect.ALLOW, actions=["ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage"], resources=[f"arn:{cdk.Stack.of(self).partition}:ecr:{cdk.Stack.of(self).region}:{cdk.Stack.of(self).account}:repository/*"],)) source_action = codepipeline_actions.CodeCommitSourceAction( action_name="CodeCommit_Source", repository=codecommit_repo, output=source_output, branch="master" ) pipeline.add_stage( stage_name="Source", actions=[source_action] ) pipeline.add_stage( stage_name="DockerBuild", actions=[ codepipeline_actions.CodeBuildAction( action_name=f"DockerBuild_ARM64", project=docker_build_arm64, input=source_output, outputs=[docker_output_arm64]) ] ) # Outputs cdk.CfnOutput( scope=self, id="application_repository", value=codecommit_repo.repository_clone_url_http )