文章目錄
- aws(學習筆記第四十六課) codepipeline-build-deploy
- 學習內容:
- 1. 代碼鏈接及整體架構
- 1.1 代碼鏈接
- 1.2 整體架構
- 1.2.1 初始化階段的`codecommit repo`以及`codebuild project`設定
- 1.2.2 創建`vpc`,`public alb`,`alb listener`以及`fargate service`等
- 1.2.3 創建`source`,`build`以及`deploy`等`stage`以及`deplyment group`,將部署和`alb listener`進行關聯
- 2. 代碼詳細分析
- 2.1 初始化階段代碼,創建`codecommit repo`以及`codebuild project`
- 2.1.1 創建`codecommit repo`
- 2.1.2 創建`Elastic Container Registry (ECR) image repository`
- 2.1.3 創建`fargate task definition`
- 2.1.4 創建`code build project`
- 2.1.5 對`build project`賦予權限,對`imaga repo`能夠`push image`
- 2.1.6 初始化階段使用`lambda`進行`code build project`觸發
- 2.1.7 在初始化階段創建`custom resource`觸發上面`lambda`
- 2.2 創建`vpc`,`public alb`,`alb listener`以及`fargate service`等
- 2.2.1 創建`vpc`
- 2.2.1 創建`target group green`以及`target group blue`
- 2.2.2 創建`application loader balancer`的`security group`以及入站規則
- 2.2.3 創建`application loader balancer`以及`listener`
- 2.2.4 創建`fargate service`
- 2.3 創建`source`,`build`以及`deploy`等`stage`以及`deplyment group`,將部署和`alb listener`進行關聯
- 2.3.1 創建`source stage`
- 2.3.2 創建`build stage`
- 2.3.3 創建`deployment group`
- 2.3.4 創建`deploy stage`,并將`deployment_group`指向上面創建的`deployment group`
- 2.3.5 將`source`,`build`,`deploy`組合成`pipeline`
- 3. 執行`cdk`
- 3.1 執行命令
- 3.2 訪問`endpoint`
- 3.3 修改代碼進行改修和自動部署
- 3.3.1 檢查`codecommit`
- 3.3.2 創建`IAM user`進行代碼`commit`
- 3.3.3 為`IAM user finlay`指定公鑰(public key)
- 3.3.4 設定用戶的`config`文件
- 3.3.5 對代碼進行clone
- 3.3.6 對`codecommit`進行改修,并`push`
- 3.3.7 檢驗修改后的頁面
- 4. cleanup
aws(學習筆記第四十六課) codepipeline-build-deploy
- 使用
codebuild
- 嘗試
codedeploy
學習內容:
- 定義
codebuild
- 使用
codedeploy
1. 代碼鏈接及整體架構
1.1 代碼鏈接
代碼連接(codepipeline-build-deploy)
1.2 整體架構
整體架構分為三個部分:
- 初始化階段,創建
codecommit repo
以及codebuild project
- 創建
vpc
,public alb
,alb listener
以及fargate service
等 - 創建
source
,build
以及deploy
等stage
以及deplyment group
,將部署和alb listener
進行關聯
1.2.1 初始化階段的codecommit repo
以及codebuild project
設定
這里,trigger code build
分為兩個階段:
- 初期階段,通過
custom resource
創建 ==>trigger lambda
執行 ==>trigger code build project
- 平時運用階段,通過
code commit
的push
==>trigger code build project
1.2.2 創建vpc
,public alb
,alb listener
以及fargate service
等
這些組件都是真正運行服務的部分。
- 首先生成一個
Application Loader Balancer
- 對這個
Application Loader Balancer
設定listener
- 之后生成
Target Group Green
和Target Group Blue
這里實現藍綠部署 - 對
Application Loader Balancer Listener
設定default
的target group
,這里設定為Target Group Green
1.2.3 創建source
,build
以及deploy
等stage
以及deplyment group
,將部署和alb listener
進行關聯
- 創建
source stage
,input
為code repo
source stage
將整個code repo
生成source artifact
- 創建
build stage
,input
為source artifact
build stage
對整個source artifact
進行build
,主要是使用buildspec.yaml
build stage
進行完docker build
之后,將生成的docker image
上傳到ecr
build stage
進行完docker build
之后,生成出deploy stage
需要的appspec.yaml && cat taskdef.json
deploy stage
使用appspec.yaml && cat taskdef.json
對整個deployment group
進行部署
2. 代碼詳細分析
2.1 初始化階段代碼,創建codecommit repo
以及codebuild project
2.1.1 創建codecommit repo
# Creates an AWS CodeCommit repositorycode_repo = codecommit.Repository(self, "CodeRepo",repository_name="simple-app-code-repo",# Copies files from app directory to the repo as the initial commitcode=codecommit.Code.from_directory("app", "main"))
2.1.2 創建Elastic Container Registry (ECR) image repository
# Creates an Elastic Container Registry (ECR) image repositoryimage_repo = ecr.Repository(self, "ImageRepo")
2.1.3 創建fargate task definition
# Creates a Task Definition for the ECS Fargate servicefargate_task_def = ecs.FargateTaskDefinition(self, "FargateTaskDef")fargate_task_def.add_container("Container",container_name="web",image=ecs.ContainerImage.from_ecr_repository(image_repo),port_mappings=[{"containerPort": 80}])
這里,創建一個container(docker)
,并將端口映射出80
。
2.1.4 創建code build project
# CodeBuild project that builds the Docker imagebuild_image = codebuild.Project(self, "BuildImage",build_spec=codebuild.BuildSpec.from_source_filename("buildspec.yaml"),source=codebuild.Source.code_commit(repository=code_repo,branch_or_ref="main"),environment=codebuild.BuildEnvironment(privileged=True),environment_variables={"AWS_ACCOUNT_ID": codebuild.BuildEnvironmentVariable(value=os.getenv('CDK_DEFAULT_ACCOUNT') or ""),"REGION": codebuild.BuildEnvironmentVariable(value=os.getenv('CDK_DEFAULT_REGION') or ""),"IMAGE_TAG": codebuild.BuildEnvironmentVariable(value="latest"),"IMAGE_REPO_NAME": codebuild.BuildEnvironmentVariable(value=image_repo.repository_name),"REPOSITORY_URI": codebuild.BuildEnvironmentVariable(value=image_repo.repository_uri),"TASK_DEFINITION_ARN": codebuild.BuildEnvironmentVariable(value=fargate_task_def.task_definition_arn),"TASK_ROLE_ARN": codebuild.BuildEnvironmentVariable(value=fargate_task_def.