Pulumi là gì?

Pulumi là một công cụ phát triển cho phép bạn viết các chương trình máy tính triển khai tài nguyên đám mây – một hoạt động được gọi là cơ sở hạ tầng dưới dạng mã (IaC) . Pulumi tích hợp với nhiều nền tảng đám mây và các chương trình Pulumi có thể được viết bằng một số ngôn ngữ lập trình phổ biến.

Với tích hợp Linode của Pulumi, bạn có thể quản lý tài nguyên Linode của mình như bạn làm với API hoặc CLI của chúng tôi , nhưng bằng ngôn ngữ mà bạn có thể đã quen thuộc. Hướng dẫn này sẽ trình bày các ví dụ được viết bằng JavaScript, nhưng Pulumi cũng tương thích với Go, Python và TypeScript.

Pulumi cũng đi kèm với giao diện CLI để chạy các chương trình cơ sở hạ tầng đám mây mà bạn viết. Sau khi viết xong chương trình, bạn có thể tạo tài nguyên đám mây của mình bằng một lệnh duy nhất:

pulumi up

Trong hướng dẫn này bạn sẽ học cách:

Trước khi bạn bắt đầu

1.Nếu bạn chưa tạo, hãy tạo mã thông báo API Linode .

2.Tạo tài khoản Pulumi Cloud miễn phí .

3.Tạo một Linode Debian 9 mới. Làm theo hướng dẫn Tạo phiên bản tính toán của chúng tôi để triển khai Linode, sau đó làm theo hướng dẫn Thiết lập và bảo mật phiên bản tính toán . Đảm bảo tạo một người dùng Linux giới hạn có quyền sudo trên máy chủ của bạn. Tất cả các lệnh trong hướng dẫn này đều phải được chạy từ người dùng sudo.

4. Cài đặt Pulumi trên Linode của bạn bằng tập lệnh cài đặt của họ:

curl -fsSL https://get.pulumi.com | sh

5.Để bắt đầu sử dụng Pulumi CLI:

  • Khởi động lại phiên shell của bạn hoặc
  • Thêm /home/username/.pulumi/binvào $PATHbiến của bạn trong phiên hiện tại. Thay thế usernamebằng tên người dùng Linux giới hạn của bạn:
PATH=$PATH:/home/username/.pulumi/bin

6.Cài đặt Node.js và npm :

sudo apt-get install curl software-properties-common
curl -sL https://deb.nodesource.com/setup_12.x | sudo bash -
sudo apt-get install -y nodejs

Tạo mã thông báo truy cập Pulumi

Sau khi có tài khoản Pulumi, bạn sẽ cần tạo mã thông báo truy cập để sử dụng sau.

  1. Đăng nhập vào tài khoản Pulumi của bạn . Sau khi đăng nhập, hãy nhấp vào hình ảnh đại diện ở góc trên bên phải của bảng điều khiển Pulumi, sau đó nhấp vào tùy chọn Cài đặt trong menu thả xuống xuất hiện:Location of Pulumi Settings option
  2. Chọn mục Mã thông báo truy cập trong thanh bên trái của trang xuất hiện:Location of Pulumi Access Token page
  3. Nhấp vào nút New Access Token ở phía trên bên phải của trang sau và làm theo lời nhắc để tạo token mới của bạn. Đảm bảo bạn lưu token này ở một vị trí an toàn, tương tự như token API Linode của bạn.

Tạo một Linode

Thiết lập Dự án Pulumi của bạn

Bây giờ bạn đã có mọi thứ cần thiết để bắt đầu sử dụng Pulumi, bạn có thể tạo một dự án Pulumi mới .

Ghi chú: Dự án Pulumi là cấu trúc thư mục chứa các chương trình Pulumi của bạn. Cụ thể, dự án là bất kỳ thư mục nào chứa Pulumi.yamltệp siêu dữ liệu.

1.Pulumi yêu cầu một thư mục trống cho mỗi dự án mới, vì vậy trước tiên bạn cần tạo một thư mục và biến nó thành thư mục làm việc của bạn:

cd ~/ && mkdir pulumi && cd pulumi

2.Bây giờ bạn đã ở trong thư mục làm việc mới trống của mình, hãy tạo một dự án mới:

pulumi new

3.Từ đây, bạn sẽ thấy một số lời nhắc:

  • Nhập mã thông báo truy cập Pulumi của bạn nếu được nhắc. Nếu bạn đã nhập mã thông báo này tại bất kỳ thời điểm nào sau khi cài đặt Pulumi, bạn sẽ không được nhắc lại và có thể bỏ qua bước này.
  • Sử dụng các phím mũi tên để tô sáng linode-javascripttùy chọn.
  • Nhập tên dự án theo ý bạn hoặc để trống để sử dụng tùy chọn mặc định.
  • Nhập mô tả dự án hoặc để trống để sử dụng tùy chọn mặc định.
  • Nhập tên ngăn xếp theo ý bạn hoặc để trống để sử dụng tùy chọn mặc định.
  • Nhập mã thông báo API Linode của bạn.

4.Sau khi cài đặt thành công, bạn sẽ thấy một Your new project is ready to go!thông báo. pulumi newLệnh này sẽ tạo một bộ sưu tập các tệp cấu hình mặc định trong thư mục dự án của bạn. Cấu hình mặc định sẽ cung cấp cho bạn mọi thứ bạn cần để bắt đầu. Nhập lệnh lsđể đảm bảo rằng các tệp có mặt:

ls
index.js      package.json	 Pulumi.pulumi.yaml
node_modules  package-lock.json  Pulumi.yaml

Nội dung của các tệp này được xác định theo phản hồi của chúng tôi đối với từng lời nhắc sau khi nhập pulumi new. Cụ thể:

  • index.jschứa JavaScript Pulumi sẽ chạy
  • package.jsonđịnh nghĩa các phụ thuộc mà chúng ta có thể sử dụng và đường dẫn tệp mà Pulumi sẽ đọc mã của chúng ta.

Kiểm tra cấu hình mặc định

Chúng ta hãy xem nội dung của index.jstập tin này:

"use strict";
const pulumi = require("@pulumi/pulumi");
const linode = require("@pulumi/linode");

// Create a Linode resource (Linode Instance)
const instance = new linode.Instance("my-instance", {
    type: "g6-nanode-1",
    region: "us-east",
    image: "linode/ubuntu18.04",
});

// Export the Instance label of the instance
exports.instanceLabel = instance.label;

Tệp này yêu cầu hai mô-đun JavaScript độc đáo của Pulumi: SDK của Pulumi và tích hợp Linode của Pulumi. Tài liệu tham khảo API của Pulumi đóng vai trò là tài liệu tham khảo cho JavaScript mà bạn sẽ thấy ở đây. Tài liệu này cũng bao gồm một thư viện gồm một số tùy chọn bổ sung cho phép bạn tạo các cấu hình cụ thể hơn cho trường hợp sử dụng của mình.

Trong trường hợp này, tệp của bạn chỉ tạo một phiên bản Linode (Nanode) 1GB duy nhất trong trung tâm dữ liệu Newark chạy Ubuntu 18.04.

Tạo và hủy tài nguyên

Sử dụng lệnh Pulumipreview để kiểm tra mã của bạn và đảm bảo rằng nó có thể tạo tài nguyên thành công trong tài khoản của bạn.

pulumi preview

Đầu ra của lệnh sẽ liệt kê các hoạt động mà Pulumi sẽ thực hiện sau khi bạn triển khai chương trình của mình:

Previewing update (dev):

    Type                      Name                   Plan
+   pulumi:pulumi:Stack       my-pulumi-project-dev  create
+   └─ linode:index:Instance  my-instance            create

Resources:
    + 2 to create

Sử dụng lệnh Pulumiup để triển khai mã của bạn vào tài khoản Linode:

pulumi up

Ghi chú: Thao tác này sẽ tạo ra một nguồn tài nguyên có thể thanh toán mới trên tài khoản của bạn.

Từ đây, bạn sẽ được nhắc xác nhận việc tạo tài nguyên. Sử dụng các phím mũi tên để chọn tùy yeschọn, nhấn enter, và bạn sẽ thấy tài nguyên của mình được tạo. Sau khi quá trình hoàn tất, Nhãn Linode của Linode mới của bạn sẽ được hiển thị. Nếu bạn kiểm tra tài khoản của mình theo cách thủ công thông qua Cloud Manager , bạn có thể xác nhận rằng Linode này đã được tạo thành công.

Vì Linode này chỉ được tạo ra để thử nghiệm nên bạn có thể xóa nó một cách an toàn bằng cách nhập lệnh của Pulumidestroy :

pulumi destroy

Làm theo lời nhắc và bạn sẽ có thể thấy các tài nguyên đang bị xóa, tương tự như cách chúng ta thấy chúng được tạo ra.

Ghi chú: Nhiều lệnh Pulumi sẽ được ghi vào tài khoản Pulumi của bạn. Bạn có thể thấy điều này trong tab Hoạt động của ngăn xếp dự án của bạn trong Pulumi Cloud .

Tạo và cấu hình NodeBalancer

Để chứng minh tốt hơn sức mạnh của mã Pulumi, chúng ta sẽ tạo một index.jstệp mới. Tệp này sẽ định nghĩa mọi thứ chúng ta cần để tạo một NodeBalancer hoạt động được cấu hình sẵn với hai Linode chạy NGINX.

1.Thay thế nội dung của index.jstệp bằng nội dung sau:

const pulumi = require("@pulumi/pulumi");
const linode = require("@pulumi/linode");

// Create two new 1GB Linodes (Nanodes) using a StackScript to configure them internally.
// The StackScript referenced will install and enable NGINX.

// "linode1" (the first argument passed to the Linode instance constructor function) is the Pulumi-allocated Unique Resource Name (URN) for this resource
const linode1 = new linode.Instance("linode1", {
        // "PulumiNode1" is the Linode's label that appears in the Cloud Manager. Linode labels must be unique on your Linode account
        label: "PulumiNode1",
        region: "us-east",
        image: "linode/debian9",
        privateIp: true,
        stackscriptData: {
                hostname: "PulumiNode1",
            },
        stackscriptId: 526246,
        type:"g6-nanode-1",
});

const linode2 = new linode.Instance("linode2", {
        label: "PulumiNode2",
        region: "us-east",
        image: "linode/debian9",
        privateIp: true,
        stackscriptData: {
            hostname: "PulumiNode2",
            },
        stackscriptId: 526246,
        type:"g6-nanode-1",
});

// Create and configure your NodeBalancer

const nodeBalancer = new linode.NodeBalancer("nodeBalancer", {
        clientConnThrottle: 20,
        label: "PulumiNodeBalancer",
        region: "us-east",
});

const nodeBalancerConfig = new linode.NodeBalancerConfig("nodeBalancerConfig", {
        algorithm: "source",
        check: "http",
        checkAttempts: 3,
        checkTimeout: 30,
        checkInterval: 40,
        checkPath: "/",
        nodebalancerId: nodeBalancer.id,
        port: 8088,
        protocol: "http",
        stickiness: "http_cookie",
});

// Assign your Linodes to the NodeBalancer

const balancerNode1 = new linode.NodeBalancerNode("balancerNode1", {
        address: pulumi.concat(linode1.privateIpAddress, ":80"),
        configId: nodeBalancerConfig.id,
        label: "PulumiBalancerNode1",
        nodebalancerId: nodeBalancer.id,
        weight: 50,
});

const balancerNode2 = new linode.NodeBalancerNode("balancerNode2", {
        address: pulumi.concat(linode2.privateIpAddress, ":80"),
        configId: nodeBalancerConfig.id,
        label: "PulumiBalancerNode2",
        nodebalancerId: nodeBalancer.id,
        weight: 50,
});

//Output your NodeBalancer's Public IPV4 address and the port we configured to access it
exports.nodeBalancerIP = nodeBalancer.ipv4;
exports.nodeBalancerPort = nodeBalancerConfig.port;

Ghi chú: Trong index.jstệp của chúng tôi, chúng tôi đã tạo và cấu hình hai Linode bằng StackScript hiện có cài đặt NGINX. Tích hợp Linode của Pulumi cho phép tạo StackScript hoàn toàn mới trực tiếp trong mã, có thể giúp bạn tự động hóa việc triển khai của mình hơn nữa.Nếu bạn muốn biết StackScript hoạt động như thế nào, bạn có thể xem tại đây .

2.Bây giờ bạn đã chuẩn bị thành công mã JavaScript, hãy cùng xem cấu hình của chúng ta:

pulumi up

Như trước đây, hãy chọn yeskhi được nhắc và đợi trong vài phút để tài nguyên của bạn được tạo, cấu hình và đưa trực tuyến.

3.Khi quá trình hoàn tất, bạn sẽ thấy địa chỉ IP của NodeBalancer và cổng bạn đã cấu hình trước đó được hiển thị như một phần của đầu ra:

Outputs:
+ nodeBalancerIP  : "192.0.2.3"
+ nodeBalancerPort: 8088

Nhập địa chỉ IP và cổng này vào trình duyệt web của bạn và bạn sẽ thấy trang theo phong cách Hello World mà StackScript đã cấu hình:

curl http://192.0.2.3:8088/
Hello from PulumiNode1

Ghi chú: Nếu bạn không thấy trang này ngay lập tức, bạn nên đợi thêm vài phút nữa. NodeBalancers đôi khi có thể cần thêm một chút thời gian để áp dụng đầy đủ cấu hình mới.

4.Sau khi hoàn tất NodeBalancer, bạn có thể xóa mọi thứ bạn đã thêm bằng cách nhập pulumi destroynhư trước.

Các bước tiếp theo

Pulumi là một công cụ mạnh mẽ với số lượng lớn các cấu hình có thể áp dụng. Từ đây bạn có thể:

  • Hãy xem các ví dụ của Pulumi để biết thêm ý tưởng về những việc bạn có thể làm với Pulumi.
  • Hãy thử sử dụng Pulumi với các ngôn ngữ khác như Python hoặc TypeScript
  • Nhập các công cụ Node.js như Express để có thêm tính linh hoạt cho mã của bạn.
  • Sử dụng Pulumi cho máy tính không có máy chủ

Thông tin thêm

Bạn có thể muốn tham khảo các nguồn sau để biết thêm thông tin về chủ đề này. Mặc dù chúng tôi cung cấp với hy vọng rằng chúng sẽ hữu ích, nhưng xin lưu ý rằng chúng tôi không thể đảm bảo tính chính xác hoặc tính kịp thời của các tài liệu được lưu trữ bên ngoài.

Nguồn: https://www.linode.com/docs/guides/deploy-in-code-with-pulumi/