DevOps AI
  • Home
  • Bảo mật
  • AI & Automation
  • DevOps & Cloud
  • Bộ đề luyện thi cloud
No Result
View All Result
DevOpsAI
  • Home
  • Bảo mật
  • AI & Automation
  • DevOps & Cloud
  • Bộ đề luyện thi cloud
No Result
View All Result
DevOpsAI
No Result
View All Result
Home DevOps & Cloud

Cấu hình đa môi trường cho CDK app

Quân Nguyễn by Quân Nguyễn
25 Tháng 4, 2025
in DevOps & Cloud
0
Share on FacebookShare on Twitter

Phân chia môi trường bằng việc đánh tag resource là công viẹc quan trọng cần nghĩ đến sau khi khởi tạo CDK app. Tròng bài viết trước mình đã chia sẽ cách tạo vpc, trong bài viết này mình xin chia sẽ cách mình cấu hình môi trường cho CDK app.



Bài viết trước


Tạo VPC với constructor L1 trong CDK

Giới thiệu quy tắt đặt tên

Mình sử dụng quy tắt đặt tên cho resource như sau.

Related Post

cdk terraform

CDK cho Terraform

29 Tháng 4, 2025
Ưu Đãi Đặc Biệt: Nhận Ngay Coupon Giảm 25% cho Bộ Đề Luyện Thi Cloud!

Ưu Đãi Đặc Biệt: Nhận Ngay Coupon Giảm 25% cho Bộ Đề Luyện Thi Cloud!

29 Tháng 4, 2025

Đổi MTU cho Calico trong Kubernetes

30 Tháng 4, 2025

Tắt NLA trên Amazon EC2 Windows instance

30 Tháng 4, 2025

<tên project>-<tên môi trường>-<tên stack>-<tên resource>

ví dụ

				
					Resources:
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.90.16.0/22
      EnableDnsHostnames: true
      EnableDnsSupport: true
      InstanceTenancy: default
      Tags:
        - Key: Name
          Value: cdk-learning-dev-network-vpc
				
			

bạn có thể thấy là trong tên của resource có kèm theo tên của môi trường, vậy thì làm thế nào mà chúng ta có thể cấu hình một cách linh hoạt, có rất nhiều ý tưởng để đạt được điều này?

sử dung biến môi trường

Trong JS để truy cập vào biến môi trường bạn có thể làm như sau.

				
					console.log('ENV', process.env.ENV);
				
			

Sử dụng file cấu hình

bạn có thể taọ một file cấu hình riêng biệt sau đó fmooix khi sử dụng thì gọi nó.

				
					export class EnvDevelop {
    static StageName = 'dev';
    static SystemName = 'network';
    static ProjectName = 'cdk-learning';
}

				
			

Bối cảnh thời gian chạy CDK

chi tiết hơn bạn có thể tham khảo ở đây

Generate cấu hình

hiện tại mình tháy cách này là phù hợp đối với mình, mỗi khi dùng lệnh cdk mình sẽ thêm cờ -c config=dev|stg|prod để chọn cấu hình phù hợp với mỗi môi trường.

cấu hình mình mong muốn là

				
					{
      "projectOwner": "Quan.devopsify",
      "projectName": "cdk-learning",
      "costOwner": "huyntt.devopsify",
      "environment" "dev || stg || prod"
}
				
			

cấu hình này mình sử dụng cho việc đánh tag resource… và dùng cho nhiều việc khác nữa, tùy vào nhu cầu của bạn.

MÌnh tạo một file config/build-config.ts trong thư mục dự án cdk

				
					import * as cdk from "aws-cdk-lib";
// These values map to the keys in our cdk.json and make sure
// no values that aren't supported are passed in with the
// -c config=env flag
const supportedEnvironments = ["dev", "stg", "prod"] as const;
type SupportedEnvironments = typeof supportedEnvironments[number];
// This maps to the values you specified in your cdk.json file
// if you add any values to your cdk.json file, also add them here!
export type BuildConfig = {
  environment: SupportedEnvironments;
  projectOwner: string;
  projectName: string;
  costOwner: string;
};
// This function is used by your CDK app and pulls your config values
// from the context
export const getConfig = (app: cdk.App): BuildConfig => {
  const env = app.node.tryGetContext("config");
  if (!env) {
    throw new Error(
      "Environment variable must be passed to cdk: `yarn cdk -c config=XXX`"
    );
  }
  if (!supportedEnvironments.includes(env)) {
    throw new Error(
      `$ is not in supported environments: ${supportedEnvironments.join(
        ", "
      )}`
    );
  }
  // this contains the values in the context without being
  // validated
  const unparsedEnv = app.node.tryGetContext(env);
  return {
    environment: env,
    projectOwner: ensureString(unparsedEnv, "projectOwner"),
    projectName: ensureString(unparsedEnv, "projectName"),
    costOwner: ensureString(unparsedEnv, "costOwner"),
  };
};
// this function ensures that the value from the config is
// the correct type. If you have any types other than
// strings be sure to create a new validation function
function ensureString(
  object: { [name: string]: any },
  key: keyof BuildConfig
): string {
  if (
    !object[key] ||
    typeof object[key] !== "string" ||
    object[key].trim().length === 0
  ) {
    throw new Error(key + " does not exist in cdk config");
  }
  return object[key];
}
				
			

file này dùng để generate ra file cấu hình như mình nói ở trên bằng cách đọc praram config=dev || stg || prod mà mình truyền vào, sau đó nó kết hợp cùng với một số common config mà mình sẽ khai báo nó trong cdk.json

Refactoring 

mình nhận thấy mỗi resource mỗi khi khởi tạo đều cần đánh tag. Mình sẽ tạo ra một class để đưa ra quy tắt đặt tag, và các resource khác khi tạo sẽ kế thừa class này.

Tạo file lib/resources/abstract/index.ts trông thư mục dự án.

				
					import { Construct } from 'constructs';
import * as cdk from "aws-cdk-lib";
export abstract class Resource {
    constructor() {}
    protected createTagName(scope: Construct, ProjectName: string, StageName: string, stackname: string, originalName: string): string {
        return [
            ProjectName,
            StageName,
            stackname,
            originalName,
        ].join('-');
    }
    // protected Format(scope: Construct, name: string): string {
    //     return name
    //         .split('-')
    //         .map((name) => name[0].toUpperCase() + name.substring(1))
    //         .join('');
    // }
    // protected FomatId(scope: Construct, id: number): string {
    //     return ('00' + id).slice(-3);
    // }
}
				
			

phần mình comment là tạm thời trong bài này chưa dùng đến, 

class tạo vpc trong bài viết trước sẽ được chỉnh lại như sau

Mình sẽ import class Resource và sau đó extends trong Vpc. Và từ đây về sau mọi tag của resurce đều tuân theo quy tắt trên.

Trong file lib/hello-ckd-stack.ts chỉnh lại như sau.

Kiểm tra

Kiểm tra xem kết quả như thế nào. 

chạy lệnh cdk synth -c config=dev

Như mong đợi

Bonus

lúc nãy mình tạo file cấu hình có nhiều cặp key value, những cặp key value đó mình dùng cho việc đánh tag ở cấp common dự án

trong file bin/hello-ckd.ts mình cấu hình như sau.

tag này sau khi deploy, truy cập vào console aws mới xem đc nhé, nó sẽ không được generate trong cdk synth.

Github

Toàn bộ source trong bài viết mình để ở đây

 

Tags: awscdkkiến trúcvpc
Quân Nguyễn

Quân Nguyễn

Related Posts

cdk terraform
DevOps & Cloud

CDK cho Terraform

by Quân Nguyễn
29 Tháng 4, 2025
Ưu Đãi Đặc Biệt: Nhận Ngay Coupon Giảm 25% cho Bộ Đề Luyện Thi Cloud!
Tin tức

Ưu Đãi Đặc Biệt: Nhận Ngay Coupon Giảm 25% cho Bộ Đề Luyện Thi Cloud!

by devopsify
29 Tháng 4, 2025
Đổi MTU cho Calico trong Kubernetes
DevOps & Cloud

Đổi MTU cho Calico trong Kubernetes

by Hiếu Tạ
30 Tháng 4, 2025
Next Post

Trigger trong pipeline Azure

Để lại một bình luận Hủy

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Recommended

Các website demo hay được sử dụng cho thực hành Automation Test

Các website demo hay được sử dụng cho thực hành Automation Test

11 Tháng 6, 2025
Hướng dẫn cài đặt Kubernetes trên Ubuntu 22.04

Hướng dẫn cài đặt Kubernetes trên Ubuntu 22.04

1 Tháng 5, 2025
Cài đặt Maven trên Windows

Cài đặt Maven trên Windows

11 Tháng 6, 2025
Cài đặt Grafana – Loki – Promtail monitoring log Container

Cài đặt Grafana – Loki – Promtail monitoring log Container

1 Tháng 5, 2025
Sử dụng VS Code và Playwright MCP tự động test demo website Demoblaze thông qua GitHub Copilot Agent

Sử dụng VS Code và Playwright MCP tự động test demo website Demoblaze thông qua GitHub Copilot Agent

16 Tháng 6, 2025
MCP server 2025 tốt nhất : Hướng dẫn chọn & bảo mật

MCP server 2025 tốt nhất : Hướng dẫn chọn & bảo mật

16 Tháng 6, 2025
DevOpsify Check Tool hỗ trợ MCP – Tự động hóa kiểm tra qua AI Claude & VS Code

DevOpsify Check Tool hỗ trợ MCP – Tự động hóa kiểm tra qua AI Claude & VS Code

13 Tháng 6, 2025
GitHub Action DevOpsify Check Tool – Tự động kiểm tra bảo mật & hiệu suất

GitHub Action DevOpsify Check Tool – Tự động kiểm tra bảo mật & hiệu suất

11 Tháng 6, 2025
DevOpsify

Cộng đồng DevOps Việt Nam chia sẽ kiến thức giúp tăng tốc quá trình phát triển ứng dụng và tự động hóa trong lĩnh vực Cloud DevOps & AI.

Bài viết mới

  • Sử dụng VS Code và Playwright MCP tự động test demo website Demoblaze thông qua GitHub Copilot Agent
  • MCP server 2025 tốt nhất : Hướng dẫn chọn & bảo mật
  • DevOpsify Check Tool hỗ trợ MCP – Tự động hóa kiểm tra qua AI Claude & VS Code

Categories

  • AI & Automation
  • Bảo mật
  • Chưa phân loại
  • DevOps & Cloud
  • Tin tức
No Result
View All Result
  • Home
  • Bảo mật
  • AI & Automation
  • DevOps & Cloud
  • Bộ đề luyện thi cloud

© 2025 DevOpsify