CodeCommit
Là Git Repository, có các chức năng gần giống với Github
- Có thể sử dụng https/ssh để pull/push
- Có thể tích hợp với Jenkins, CodeBuild và các tool CI khác
- Mã hoá bằng KMS phía server
- Không giới hạn size trong repo
- Tất cả các event có thể được trigger qua EventBridge neal-realtime
Authentication
- Git credentials (https)
- SSH keys (ssh)
- AWS access key (https)
- Có thể sử dụng Cross-Account, tạo role rồi dùng STS
Notification rule
- Nhiều rule hơn so với trigger, nhưng chung chung, ví dụ như không chỉ định được branch, tag
- Target có thể là AWS Chatbot hoặc SNS
- Có thể disable
Approval Rule
- Chỉ định số user / tổng số user phải approve trước khi Pull Request được đánh dấu là được Approve
- Chỉ định bằng IAM User, Federated User, IAM Role, IAM Group
- Có thể dùng template để tự động apply rule cho PR, ví dụ như define rule cho các PR tới target branch khác nhau
Trigger
- Chi tiết hơn so với notification, chỉ định được event như tạo, push, xoá branch, hoặc TẤT CẢ EVENT cũng được
- Target có thể là SNS hoặc Lambda
Một số chức năng khác
- Cross-Region Replication: giảm latency, backup, sử dụng EventBridge để trigger ECS Task / CodeBuild… để thực hiện
- Branch Security: Sử dụng IAM Policy, attach vào user/group, hiện tại chưa support Resource Policy cho CodeCommit
CodeBuild
- buildspec.yml
- Output log S3 hoặc Cloudwatch Logs
- Tích hợp cùng EventBridge, Cloudwatch Metric, Alarm
- Cache có thể lưu trên S3
- Có thể cài CodeBuild Agent (cần cài Docker) để troubleshooting chi tiết hơn
- Có thể build trong VPC, nhưng mặc định thì không
- Trigger qua EventBridge/Webhook
buildspec.yml
- env: Chỉ định các env khi build, có thể dùng giá trị trực tiếp hoặc Parameter Store hoặc Secret Manager
- phase: các command để run
- install: cài các dependency, có thể list các command cần run hoặc dùng runtime-versions để chỉ định
- pre_build: chuẩn bị build
- build: các command build
- post_build: các command sau khi build, như zip file…
- artifacts: nội dung sẽ up lên S3 (Có thể encrypt)
- cache
Test Report
- Tỉ lệ Success/Failure, Test case
- Unit Test, configuration test, functional test
- Tạo test case sử dụng framework mà hỗ trợ tạo report file
- JUnit XML, NUnit XML, NUnit3 XML
- Cucumber JSON, TestNG XML, Visual Studio TRX
- Thêm vào buildspect.yml
Environment Variables
- Mặc định: AWS_DEFAULT_REGION, CODEBUILD_BUILD_ARN, CODEBUILD_BUILD_ID, CODEBUILD_BUILD_IMAGE…
- Static: Chỉ định khi call API start build
- Dynamic: SSM hoặc Secret Manager
Build Badge
- Là image hiển thị status của lần build cuối cùng
- Có thể access public
- Support CodeCommit, Github, BitBucket
- Có thể hiển thị status build của 1 branch


CodeDeploy
- appspec.yml
- Có thể deploy trên local nhờ CodeDeploy Agent
- Có thể deploy trong VPC
- Tích hợp SNS cho các event
- Cần cài CodeDeploy Agent trên target
- EC2: Cần quyền S3 để download file
- Lambda: Chuyển đổi % traffic giữa các alias, có thể hoạt động cùng SAM, Linear + Canary
- ECS: Linear + Canary + AllAtOnce
- Nhiều deployment speed
- AllAtOnce
- HalfAtATime
- OneAtATime
- Custom %
- Khi sử dụng với ASG có thể chọn in-place hoặc Blue/Green
- Phải sử dụng cùng ELB
- Có thể chọn thời gian giữ EC2 instance cũ
- Có thể rollback về version trước nếu deploy lỗi
- Khởi tạo deployment mới với version cũ mà hoạt động ổn định
- Có thể dùng CloudWatch Alarm để trigger auto rollback
ReDeploy + Rollback
- Rollback bản chất deploy lại version cũ gần nhất mà hoạt động được
- Rollback tự động khi fail hoặc CloudWatch Alarm hoặc thủ công
- Có thể disable rollback
- InvalidSignatureException: Thời gian giữa EC2 và CodeDeploy không khớp, set lại là được
Một số nguyên nhân gây ra lỗi
- CodeDeploy Agent chưa được cài
- Service Role / IAM Instance Profile thiếu quyền
- Đang sử dụng proxy, cần set :proxy_uri:
- Ngày giờ không khớp giữa Agent và CodeDeploy
- ELB healthcheck config sai, dẫn đến Hook AllowTraffic lỗi, cần check lại
Khi ASG có event Scale-Out, instance mới sẽ được deploy version cũ. Sau khi deploy hoàn thành tất cả, CodeDeploy sẽ thực hiện replace toàn bộ instance này bằng version mới
EC2 Deploy
In-Place
- Sử dụng Tag hoặc ASG
- CodeDeploy tự động deploy trên EC2 mới mà được run bởi ASG
- Có thể sử dụng các Hook để run các Script trên EC2
- Sử dụng các env variable của CodeDeploy nếu cần

Blue/Green:
- Cũng sử dụng Tag (Manual) hoặc ASG (Automatic)
- Phải sử dụng Load Balancer
- Instance Termination
- BlueInstanceTerminationOption: Xoá ver cũ sau khi deploy xong
- Action Terminate: Chỉ định khoảng thời gian từ 1h-2d để xoá ver cũ
- Action Keep Alive: Vẫn run instance nhưng xoá khỏi target group và deployment group

ECS Deploy
- Task Definition Revision mới và Container Image phải được tạo trước khi deploy
- Chỉ hỗ trợ Blue/Green và ECS Service phải connect với Load Balancer
- appspec.yml phải được lưu trong S3, chứa thông tin Task Definition và Load Balancer nếu cần
- Có thể chỉ định số giây để ELB test version mới hơn trước khi traffic được chuyển đổi hoàn toàn traffic sang
- Linear
- Canary
- AllAtOnce

Lambda
- Chỉ định version mới trong appspec.yml, được lưu trong S3
- CodeDeploy sẽ tự đông update Alias của function trỏ về version mới, tự động thay đổi traffic tới Lambda Function
- Linear
- Canary
- AllAtOnce
- Blue/Green

CodePipeline
- Trigger có thể là Event/Webhook/Polling
- Source stage: S3, CodeCommit, Github, ECR…
- Build: CodeBuild, Jenkins
- Test: CodeBuild, Device Farm
- Invoke (Optional): Lambda hoặc Step Funtion, sử dụng khi cần Call API bên ngoài, hoặc thao tác với resource khác như insert db, vì mặc định không có cách nào trực tiếp Call API từ trong Pipepline
- Deploy stage: CloudFormation, CodeDeploy, ECS, Elastic Beanstalk, AWS Service Catalog, S3
- Sử dụng CloudWatch Event (EventBridge) để tạo event khi pipeline fail/cancel
Stage: Hiểu đơn giản là bước, mỗi bước sẽ gồm 1 số action hoặc Group Action. Có thể thêm approval cho mỗi bước (để thực hiện bước tiếp theo hay không).
Arttifact: các file hoặc các thay đổi mà sẽ sử dụng trong các stage trong pipeline, mỗi pipeline stage có thể tạo artifact, và được lưu trong S3 để sử dụng trong stage tiếp theo
Transition: Quá trình xử lý từ stage này sang stage khác trong pipeline.
Có thể tích hợp Manual Approval: gửi Notification bằng SNS tới IAM User, User cần có quyền GetPipepline* và PutApprovalResult để thực hiện
CodePipeline + CloudFormation
Có thể sử dụng Stage Build trong Pipeline để build toàn bộ resource trong template CloudFormation để test, sau đó sử dụng thêm 1 Stage để xoá các resource đã dựng.
Trường hợp sử dụng CloudFormation để Deploy
- VD như deploy Lambda function sử dụng CDK hoặc SAM (thay thế CodeBuild)
- Sử dụng StackSet để deploy tới nhiều Account/Region
- Config các setting khác như Stack name, Change Set name, Template….

Action Mode
- Create or Update Change Set, Execute Change Set
- Create or Update Stack, Delete Stack, Replace Failed Stack
Template Parameter Overrides
- Chỉ định Json Object để ghi đè param
- lấy Parameter Value từ Input Artiafact
- Tất cả các param name phải có trong template
- Static: Sử dụng template configuration file, RECOMMEND
- Dynamic: Sử dụng parameter override
Best Practices
- Parallel deploy: Có thể deploy tới nhiều Deployment Group cùng 1 lúc
- Parallel Actions: Thực hiện nhiều action cùng 1 lúc
- Deploy to Pre-Prod + Manual Approve trước khi Deploy tới Prod
- Multi Region:
- Phải chỉ định là S3 Artifact Store, cho mỗi Region có action
- Trường hợp dùng console tạo Pipepline thì sẽ tự config, nhưng nếu tạo bằng CLI, SDK… thì PHẢI tạo Artifact Bucket.
CodeArtifact
- Là Repository cho Maven/Gradle/NPM, Python…
- Proxy từ các Public Artifact Repo và copy về CodeArtifact
- Có thể deploy trong VPC
- Có thể trigger EventBridge khi có thay đổi trong CodeArtifact để thực hiện action như call Lambda, deploy lại CodeDeploy…
- Có thể config Cross-Account nhờ Resource-Base policy
- Upstream
- 1 Repo có thể có nhiều Upstream, khi tìm 1 dependency sẽ search trong tất cả các Upstream để tìm đúng dependency cần tìm
- Max 10 Upstream, 1 external connection (như npm public, mvn public…)
- Domain
- Lưu trữ tất cả các Repo ở 1 nơi, các Repo như kiểu chỉ là các shortcut tới Domain.
- Có thể config Domain cho nhiều account, mỗi account có thể có nhiều Repo
- Domain Resource base Policy
- Retention
- Đại khái là khi không tìm thấy package ở các Repo thì sẽ fetch từ public repo, và cache ở Repo đầu + cuối

CodeStar
Pre-configured continuous delivery tool cho các service như EC2, Lambda, Beanstalk, có thể sử dụng code editor như Visual Studio, Eclipse, AWS CLI.

CodeGuru
Reviewer
Giống SonarLint, nhưng tích hợp thẳng vào vào các source provider sau:
- AWS CodeCommit
- Bitbucket
- GitHub
- GitHub Enterprise Cloud
- GitHub Enterprise Server
- Amazon S3
Hiện tại chỉ support Java và Python
CodeGuru Reviewer Secrets Detector: Phát hiện key, password trong code, document, suggest chuyển sang secrets manager
CodeGuru Profiler
Gần giống Prometheus, collect các thông tin khi run các application để phân tích các tiêu chí.
Hoạt động trên AWS hoặc On-Premise, cần cài Agent để hoạt động được
- MaxStackDepth
- MemoryUsageLimitPercent
- MinimumTimeForReportingInMilliseconds
- ReportingIntervalInMilliseconds
- SamplingIntervalInMilliseconds
CodeGuru Profiler cung cấp các visualization để xác định:
- Code nào đang run trên CPU
- Thời gian cần để thực hiện
- Cách để giảm mức sử dụng CPU
Phân tích bao gồm:
- Vấn đề độ trễ và sử dụng CPU trong ứng dụng của bạn
- Các cách để giảm chi phí cơ sở hạ tầng khi chạy ứng dụng
- Xác định vấn đề performance ứng dụng
- Xác định bộ nhớ heap của ứng dụng của bạn theo thời gian
Khi sử dụng cùng lambda có thể thêm Layer hoặc .zip file để giảm code cần thiết để tích hợp CodeGuru, hoặc chỉ đơn giản là enable Profiling trong config của function, nhưng nếu tích hợp trong code sẽ control được nhiều hơn
Cloud9
- Giống Github Spaces
- Cài sẵn các tool cần thiết cho các ngôn ngữ phổ biến như JS, Python, PHP, Java…
- Có thể share với team
- Tích hợp cùng SAM và Lambda