Mở khóa khả năng quản lý hạ tầng hiệu quả, lặp lại với Python cho Hạ tầng dưới dạng Mã (IaC). Khám phá lợi ích, công cụ và các phương pháp hay nhất cho các nhóm DevOps toàn cầu.
Tự động hóa DevOps bằng Python: Nắm vững Hạ tầng dưới dạng Mã
Trong bối cảnh công nghệ phát triển nhanh chóng hiện nay, khả năng quản lý và cấp phát hạ tầng một cách hiệu quả và đáng tin cậy là tối quan trọng đối với các doanh nghiệp trên toàn thế giới. Sự phát triển của điện toán đám mây và nhu cầu về chu trình phân phối phần mềm nhanh hơn đã khiến các phương pháp quản lý hạ tầng thủ công truyền thống trở nên lỗi thời. Đây là lúc Hạ tầng dưới dạng Mã (IaC) phát huy tác dụng, làm thay đổi cách chúng ta xây dựng, triển khai và quản lý môi trường IT của mình. Và khi nói đến IaC, Python nổi bật là một ngôn ngữ mạnh mẽ, linh hoạt và được áp dụng rộng rãi, giúp các nhóm DevOps trên toàn cầu đạt được sự nhanh nhẹn, nhất quán và khả năng mở rộng cao hơn.
Hạ tầng dưới dạng Mã (IaC) là gì?
Hạ tầng dưới dạng Mã (IaC) là thực tiễn quản lý và cấp phát hạ tầng thông qua các tệp định nghĩa máy đọc được, thay vì thông qua cấu hình phần cứng vật lý hoặc các công cụ cấu hình tương tác. Điều này có nghĩa là xử lý hạ tầng của bạn – máy chủ, mạng, cơ sở dữ liệu, bộ cân bằng tải và hơn thế nữa – với các nguyên tắc tương tự như mã ứng dụng: kiểm soát phiên bản, kiểm thử và triển khai tự động.
Các nguyên tắc chính của IaC bao gồm:
- Cách tiếp cận khai báo: Bạn định nghĩa trạng thái cuối cùng mong muốn của hạ tầng, và công cụ IaC sẽ tìm ra cách để đạt được nó. Điều này trái ngược với cách tiếp cận mệnh lệnh, nơi bạn viết kịch bản các hướng dẫn từng bước.
- Kiểm soát phiên bản: Các định nghĩa IaC được lưu trữ trong các hệ thống kiểm soát phiên bản (như Git), cho phép theo dõi thay đổi, cộng tác, khôi phục và kiểm toán.
- Tự động hóa: IaC tự động hóa việc cấp phát và quản lý hạ tầng, giảm lỗi thủ công và tăng tốc thời gian triển khai.
- Khả năng lặp lại và nhất quán: IaC đảm bảo rằng hạ tầng được triển khai giống hệt nhau mỗi lần, bất kể môi trường hay người thực hiện triển khai, loại bỏ vấn đề 'nó hoạt động trên máy của tôi'.
- Hiệu quả chi phí: Bằng cách tự động hóa quy trình và tối ưu hóa việc sử dụng tài nguyên, IaC có thể dẫn đến tiết kiệm chi phí đáng kể.
Tại sao lại là Python cho Hạ tầng dưới dạng Mã?
Sự phổ biến của Python trong cộng đồng DevOps không phải là ngẫu nhiên. Cú pháp rõ ràng, thư viện phong phú và cộng đồng lớn, năng động khiến nó trở thành lựa chọn lý tưởng cho IaC, mang lại một số lợi thế hấp dẫn:
1. Dễ đọc và Đơn giản
Cú pháp tối giản và trực quan của Python giúp dễ đọc, viết và hiểu, ngay cả đối với những người mới lập trình. Điều này rất quan trọng đối với IaC, nơi sự rõ ràng là cần thiết để cộng tác giữa các nhóm đa dạng và để duy trì các định nghĩa hạ tầng phức tạp theo thời gian.
2. Thư viện và Hệ sinh thái phong phú
Python tự hào có một hệ sinh thái phong phú gồm các thư viện và framework được thiết kế riêng cho điện toán đám mây, mạng và quản trị hệ thống. Chúng bao gồm:
- Boto3: SDK của Amazon Web Services (AWS) dành cho Python, cho phép tương tác có lập trình với các dịch vụ AWS.
- Thư viện máy khách Google Cloud cho Python: Các công cụ để tương tác với các dịch vụ Google Cloud Platform (GCP).
- Azure SDK cho Python: Các thư viện để quản lý tài nguyên Azure.
- Requests: Để thực hiện các yêu cầu HTTP, hữu ích cho việc tương tác với các API RESTful của nhà cung cấp đám mây hoặc các dịch vụ hạ tầng.
- Paramiko: Để triển khai giao thức SSHv2, cho phép thực thi lệnh từ xa và truyền tệp.
3. Khả năng tương thích đa nền tảng
Python chạy trên hầu hết mọi hệ điều hành, làm cho các tập lệnh IaC của bạn có thể di động và thích ứng trên các môi trường khác nhau, cho dù đó là Linux, Windows hay macOS.
4. Hỗ trợ cộng đồng mạnh mẽ
Cộng đồng Python rộng lớn có nghĩa là có sẵn sự hỗ trợ, vô số hướng dẫn và một dòng công cụ và thư viện mới liên tục. Điều này thúc đẩy việc học hỏi và giải quyết vấn đề cho các chuyên gia DevOps trên toàn thế giới.
5. Tích hợp với các công cụ hiện có
Python tích hợp liền mạch với các công cụ DevOps phổ biến khác như Docker, Kubernetes, Jenkins, GitLab CI và nhiều công cụ khác, cho phép một pipeline CI/CD gắn kết và tự động.
Các công cụ và Framework IaC dựa trên Python phổ biến
Mặc dù Python có thể được sử dụng để viết kịch bản tùy chỉnh, nhưng một số công cụ và framework mạnh mẽ tận dụng Python để triển khai các nguyên tắc IaC. Các công cụ này trừu tượng hóa phần lớn sự phức tạp, cung cấp các cách có cấu trúc và dễ bảo trì để định nghĩa và quản lý hạ tầng.
1. Terraform (với tích hợp Python)
Terraform là một công cụ IaC mã nguồn mở được sử dụng rộng rãi, được phát triển bởi HashiCorp. Mặc dù ngôn ngữ cấu hình chính của nó là HashiCorp Configuration Language (HCL), Terraform tích hợp đặc biệt tốt với Python, cho phép logic phức tạp, thao tác dữ liệu và tạo tài nguyên động bằng cách sử dụng các tập lệnh Python. Bạn có thể gọi các tập lệnh Python như một phần của quy trình làm việc Terraform của mình.
Trường hợp sử dụng:
- Cấp phát hạ tầng trên nhiều nhà cung cấp đám mây (AWS, Azure, GCP, v.v.).
- Quản lý các ứng dụng đa tầng phức tạp.
- Điều phối các thay đổi hạ tầng trong quá trình triển khai ứng dụng.
Kịch bản ví dụ (Khái niệm):
Hãy tưởng tượng bạn cần cấp phát một số lượng cụ thể các phiên bản EC2 trên AWS dựa trên đầu vào động từ một tập lệnh Python lấy dữ liệu từ một API bên ngoài. Bạn có thể sử dụng bộ cấp phát Terraform để thực thi một tập lệnh Python xác định số lượng phiên bản, sau đó để Terraform tạo các phiên bản đó.
# main.tf (Terraform Configuration)
resource "aws_instance" "example" {
count = "${element(split(",", python_script.instance_counts.stdout), 0)}"
ami = "ami-0abcdef1234567890"
instance_type = "t2.micro"
tags = {
Name = "HelloWorld-${count.index}"
}
}
# Use a local-exec provisioner to run a Python script
resource "null_resource" "run_python_script" {
triggers = {
always_run = timestamp()
}
provisioner "local-exec" {
command = "python scripts/generate_instance_counts.py > instance_counts.txt"
}
}
# Data source to read the output of the Python script
data "local_file" "instance_counts_output" {
filename = "instance_counts.txt"
}
# This resource dynamically gets the instance count from the script's output
# Note: This is a simplified conceptual example. A more robust approach would involve
# using Terraform's `templatefile` function or custom providers for complex interactions.
resource "local_file" "instance_counts" {
content = data.local_file_instance_counts_output.content
}
# A python script (scripts/generate_instance_counts.py) could look like:
# import requests
#
# # Fetch data from an external API (e.g., to determine load)
# try:
# response = requests.get("https://api.example.com/current_load")
# response.raise_for_status() # Raise an exception for bad status codes
# load = response.json().get("load", 1)
# print(load)
# except requests.exceptions.RequestException as e:
# print(f"Error fetching load: {e}. Defaulting to 1 instance.")
# print(1)
2. Ansible (Backend Python)
Ansible là một công cụ tự động hóa mạnh mẽ sử dụng cách tiếp cận khai báo để đơn giản hóa các tác vụ phức tạp như quản lý cấu hình, triển khai ứng dụng và điều phối. Mặc dù Ansible sử dụng YAML cho các playbook, công cụ cốt lõi của nó được viết bằng Python và nó cho phép viết kịch bản Python trong các playbook và các module tùy chỉnh.
Trường hợp sử dụng:
- Tự động cài đặt và cấu hình phần mềm.
- Điều phối triển khai ứng dụng.
- Quản lý tài khoản người dùng và quyền.
- Điều phối các quy trình làm việc phức tạp trên nhiều máy chủ.
Kịch bản ví dụ:
Sử dụng Ansible để cài đặt và cấu hình một máy chủ web trên một nhóm máy. Bạn có thể viết các module Python tùy chỉnh cho các tác vụ rất cụ thể hoặc phức tạp mà không được các module Ansible tích hợp sẵn bao gồm.
# playbook.yml (Ansible Playbook)
---
- name: Configure web server
hosts: webservers
become: true
tasks:
- name: Install Nginx
apt:
name: nginx
state: present
- name: Deploy custom application config using a Python script
copy:
content: "{{ lookup('pipe', 'python scripts/generate_nginx_config.py') }}"
dest: /etc/nginx/sites-available/default
notify:
- Restart Nginx
handlers:
- name: Restart Nginx
service: name=nginx state=restarted
# scripts/generate_nginx_config.py (Python script)
# import json
#
# # Fetch dynamic configuration data (e.g., from a database or API)
# backend_servers = ["192.168.1.100", "192.168.1.101"]
#
# config = f"server {{
# listen 80;
# location / {{
# proxy_pass http://backend_servers;
# }}
# }}"
#
# print(config)
3. Pulumi
Pulumi là một công cụ IaC hiện đại cho phép bạn định nghĩa hạ tầng đám mây của mình bằng cách sử dụng các ngôn ngữ lập trình quen thuộc, bao gồm Python. Điều này mang lại lợi thế đáng kể cho các nhà phát triển đã thành thạo Python, cho phép họ sử dụng các kỹ năng hiện có để quản lý hạ tầng.
Trường hợp sử dụng:
- Định nghĩa hạ tầng bằng Python cho AWS, Azure, GCP, Kubernetes và nhiều nền tảng khác.
- Tận dụng toàn bộ khả năng lập trình của Python cho logic hạ tầng phức tạp.
- Tích hợp quản lý hạ tầng trực tiếp vào quy trình làm việc phát triển ứng dụng.
Kịch bản ví dụ:
Định nghĩa một nhóm lưu trữ AWS S3 với các chính sách kiểm soát truy cập cụ thể bằng Python.
# __main__.py (Pulumi Program)
import pulumi
import pulumi_aws as aws
# Create an AWS resource (S3 Bucket)
bucket = aws.s3.Bucket("my-bucket",
acl="private",
versioning={
"enabled": True,
},
opts=pulumi.ResourceOptions(provider=aws.Provider("us-west-2")) # Specify the AWS region
)
# Export the bucket name
pulumi.export("bucket_name", bucket.id)
# Example of conditional logic using Python
should_enable_logging = True
if should_enable_logging:
log_bucket = aws.s3.Bucket("my-bucket-logs", acl="log-delivery-write")
bucket.logging = aws.s3.BucketLoggingArgs(
target_bucket=log_bucket.id,
target_prefix="logs/"
)
pulumi.export("log_bucket_name", log_bucket.id)
4. AWS CloudFormation (với tài nguyên tùy chỉnh Python)
AWS CloudFormation là một dịch vụ giúp bạn mô hình hóa và thiết lập các tài nguyên AWS của mình để bạn có thể dành ít thời gian hơn cho việc quản lý hạ tầng và nhiều thời gian hơn để xây dựng ứng dụng. Mặc dù CloudFormation sử dụng các template JSON hoặc YAML, bạn có thể mở rộng khả năng của nó bằng cách tạo các tài nguyên tùy chỉnh. Python là một lựa chọn tuyệt vời để phát triển các tài nguyên tùy chỉnh này, cho phép bạn tích hợp các dịch vụ AWS không có hỗ trợ CloudFormation trực tiếp hoặc để triển khai logic phức tạp.
Trường hợp sử dụng:
- Cấp phát tài nguyên AWS.
- Tích hợp các dịch vụ bên ngoài hoặc logic tùy chỉnh vào các stack CloudFormation.
- Quản lý các triển khai phức tạp với logic có điều kiện.
Kịch bản ví dụ (Khái niệm):
Tạo một tài nguyên CloudFormation tùy chỉnh sử dụng chức năng Python Lambda để cấp phát một dịch vụ bên thứ ba, như kênh Slack hoặc cảnh báo giám sát tùy chỉnh.
Khi CloudFormation cần tạo, cập nhật hoặc xóa tài nguyên tùy chỉnh, nó sẽ gọi một chức năng Lambda được chỉ định (được viết bằng Python). Chức năng Lambda này sau đó sử dụng các thư viện Python (như boto3) để tương tác với các dịch vụ AWS khác hoặc các API bên ngoài để đáp ứng yêu cầu.
5. Serverless Framework (với Python)
Serverless Framework là một công cụ phổ biến để xây dựng và triển khai các ứng dụng không máy chủ (serverless), đặc biệt trên AWS Lambda. Nó sử dụng YAML để cấu hình nhưng cho phép các nhà phát triển viết các hàm của họ bằng Python. Mặc dù không hoàn toàn dùng để cấp phát hạ tầng chung, nhưng nó rất quan trọng để quản lý lớp điện toán của các ứng dụng gốc đám mây hiện đại, thường tạo thành một phần đáng kể của tổng thể hạ tầng.
Trường hợp sử dụng:
- Triển khai và quản lý các hàm AWS Lambda.
- Định nghĩa API Gateway, nguồn sự kiện và các thành phần không máy chủ khác.
- Điều phối các quy trình làm việc không máy chủ.
Kịch bản ví dụ:
Triển khai một hàm AWS Lambda dựa trên Python xử lý các tin nhắn đến từ một hàng đợi SQS.
# serverless.yml (Serverless Framework Configuration)
service: my-python-lambda-service
provider:
name: aws
runtime: python3.9
region: us-east-1
iamRoleStatements:
- Effect: Allow
Action: "sqs:ReceiveMessage"
Resource: "arn:aws:sqs:us-east-1:123456789012:my-queue"
functions:
processMessage:
handler: handler.process
events:
- sqs: arn:aws:sqs:us-east-1:123456789012:my-queue
# handler.py (Python Lambda Function)
# import json
#
# def process(event, context):
# for record in event['Records']:
# message_body = record['body']
# print(f"Received message: {message_body}")
# # Process the message here...
# return {
# 'statusCode': 200,
# 'body': json.dumps('Messages processed successfully!')
# }
Các phương pháp hay nhất cho Python IaC
Để tận dụng hiệu quả Python cho IaC, việc áp dụng các phương pháp hay nhất là rất cần thiết:
1. Áp dụng kiểm soát phiên bản (Git)
Lưu trữ tất cả các định nghĩa IaC của bạn (Terraform HCL, Ansible playbook, mã Python Pulumi, v.v.) trong một hệ thống kiểm soát phiên bản như Git. Điều này cho phép:
- Theo dõi các thay đổi và hiểu sự phát triển của hạ tầng.
- Cộng tác giữa các thành viên trong nhóm.
- Dễ dàng khôi phục về các trạng thái ổn định trước đó.
- Kiểm toán và tuân thủ.
2. Triển khai đường ống CI/CD
Tích hợp IaC của bạn vào đường ống CI/CD. Điều này có nghĩa là:
- Kiểm tra cú pháp và định dạng: Tự động kiểm tra mã IaC của bạn để tìm lỗi kiểu dáng và cú pháp.
- Kiểm thử: Chạy các kiểm thử tự động (ví dụ: sử dụng Terratest cho Terraform, Molecule cho Ansible) để xác thực mã hạ tầng của bạn trước khi triển khai.
- Triển khai tự động: Kích hoạt các triển khai hạ tầng tự động khi hợp nhất các thay đổi vào nhánh chính của bạn.
- Xem trước/Chạy thử: Sử dụng các tính năng như
terraform planhoặc bản xem trước của Pulumi để xem những thay đổi sẽ được thực hiện trước khi chúng được áp dụng.
3. Sử dụng mô-đun và khả năng tái sử dụng
Giống như mã ứng dụng, IaC của bạn phải có tính mô-đun. Chia nhỏ hạ tầng của bạn thành các thành phần, mô-đun hoặc template có thể tái sử dụng. Điều này thúc đẩy:
- Tính nhất quán giữa các dự án.
- Dễ dàng bảo trì và cập nhật.
- Giảm sự trùng lặp công sức.
Ví dụ, tạo một mô-đun tiêu chuẩn để triển khai cơ sở dữ liệu PostgreSQL hoặc một cụm Kubernetes có thể được tái sử dụng trong các môi trường khác nhau (phát triển, thử nghiệm, sản xuất).
4. Triển khai quản lý bí mật
Không bao giờ mã hóa cứng thông tin nhạy cảm (khóa API, mật khẩu, chứng chỉ) trực tiếp trong các tệp IaC của bạn. Sử dụng các công cụ quản lý bí mật chuyên dụng như HashiCorp Vault, AWS Secrets Manager, Azure Key Vault hoặc GCP Secret Manager. Các tập lệnh Python của bạn sau đó có thể truy xuất các bí mật này một cách an toàn trong thời gian chạy.
5. Áp dụng tư duy khai báo
Mặc dù bản thân Python là ngôn ngữ mệnh lệnh, nhưng các công cụ IaC bạn sử dụng (như Terraform và Pulumi) thường ưu tiên cách tiếp cận khai báo. Tập trung vào việc định nghĩa trạng thái cuối cùng mong muốn của hạ tầng thay vì viết kịch bản các bước chính xác để đạt được nó. Điều này làm cho IaC của bạn mạnh mẽ hơn và dễ quản lý hơn, đặc biệt trong các môi trường đám mây động.
6. Lập tài liệu về hạ tầng của bạn
Ngay cả với mã, tài liệu là rất quan trọng. Lập tài liệu về cấu hình IaC của bạn, mục đích của các tài nguyên khác nhau và bất kỳ logic tùy chỉnh nào được triển khai trong Python. Điều này vô giá cho việc giới thiệu thành viên mới trong nhóm và để tham khảo trong tương lai.
7. Cân nhắc các chiến lược đa đám mây
Nếu tổ chức của bạn hoạt động trên nhiều nhà cung cấp đám mây (ví dụ: AWS và Azure), các công cụ IaC dựa trên Python như Terraform và Pulumi là những lựa chọn tuyệt vời. Chúng cho phép bạn trừu tượng hóa các chi tiết cụ thể của nhà cung cấp và quản lý tài nguyên một cách nhất quán trên các đám mây khác nhau, mang lại sự linh hoạt cao hơn và tránh bị khóa nhà cung cấp.
8. Tự động hóa kiểm thử một cách nghiêm ngặt
Kiểm thử là rất quan trọng đối với IaC. Triển khai các cấp độ kiểm thử khác nhau:
- Kiểm tra cú pháp và phân tích tĩnh: Phát hiện lỗi cú pháp và lỗi kiểu dáng sớm.
- Kiểm thử đơn vị: Đối với các mô-đun hoặc tập lệnh Python tùy chỉnh được sử dụng trong IaC của bạn.
- Kiểm thử tích hợp: Xác minh rằng các thành phần hạ tầng khác nhau hoạt động cùng nhau như mong đợi.
- Kiểm thử đầu cuối: Mô phỏng tương tác của người dùng với hạ tầng đã triển khai của bạn.
Các công cụ như Terratest (cho Terraform) và Molecule (cho Ansible) rất có giá trị để viết và chạy các kiểm thử tích hợp và đầu cuối cho mã hạ tầng của bạn.
Python và kiến trúc DevOps hiện đại
Vai trò của Python trong IaC mở rộng đến việc cho phép các kiến trúc DevOps hiện đại:
1. Microservices và Container hóa
Khi triển khai microservices bằng cách sử dụng container (Docker) được điều phối bởi các nền tảng như Kubernetes, IaC là rất cần thiết. Python có thể được sử dụng để:
- Định nghĩa các tài nguyên Kubernetes (Deployments, Services, Ingresses) bằng cách sử dụng Pulumi hoặc các tập lệnh Python tùy chỉnh tương tác với API Kubernetes.
- Tự động hóa việc xây dựng và triển khai hình ảnh Docker.
- Quản lý hạ tầng đám mây cần thiết để lưu trữ các cụm Kubernetes (ví dụ: EKS, AKS, GKE) bằng cách sử dụng Terraform hoặc Pulumi.
2. Điện toán không máy chủ (Serverless Computing)
Như đã đề cập với Serverless Framework, Python là ngôn ngữ hạng nhất cho các hàm không máy chủ. Các công cụ IaC được sử dụng để định nghĩa và cấp phát các tài nguyên đám mây cơ bản (Lambda, API Gateway, SQS, DynamoDB) hỗ trợ các hàm này.
3. Môi trường đa đám mây và đám mây lai
Quản lý hạ tầng trên nhiều đám mây công cộng và các trung tâm dữ liệu tại chỗ đòi hỏi sự tự động hóa mạnh mẽ. Các công cụ IaC dựa trên Python cung cấp một giao diện thống nhất để cấp phát và quản lý tài nguyên trong các môi trường đa dạng, đảm bảo tính nhất quán và giảm sự phức tạp.
Thách thức và cân nhắc
Mặc dù Python IaC mang lại những lợi ích đáng kể, điều quan trọng là phải nhận thức được những thách thức tiềm tàng:
- Đường cong học tập: Việc áp dụng các công cụ và phương pháp mới đòi hỏi phải học hỏi. Các nhóm cần đầu tư thời gian vào đào tạo về Python, các công cụ IaC cụ thể và các nền tảng đám mây.
- Quản lý trạng thái: Các công cụ IaC duy trì một tệp trạng thái ánh xạ mã của bạn với các tài nguyên thực tế. Việc quản lý trạng thái này đúng cách là rất quan trọng để tránh sự không nhất quán và lỗi.
- Phát hiện trôi dạt: Những thay đổi được thực hiện bên ngoài IaC có thể dẫn đến sự trôi dạt cấu hình. Thường xuyên xem xét và điều chỉnh hạ tầng của bạn so với các định nghĩa IaC.
- Phức tạp cho các tác vụ đơn giản: Đối với các tác vụ hạ tầng rất đơn giản, chỉ một lần, việc thiết lập IaC đầy đủ có thể là quá mức cần thiết. Tuy nhiên, đối với bất kỳ điều gì yêu cầu tính lặp lại hoặc quản lý, IaC đều có lợi.
- Bảo mật: Đảm bảo các thực tiễn bảo mật phù hợp được tuân thủ, đặc biệt khi quản lý quyền truy cập vào các tài khoản đám mây và dữ liệu nhạy cảm.
Kết luận
Python đã khẳng định vị thế của mình như một nền tảng của các thực tiễn DevOps hiện đại, và việc ứng dụng nó trong Hạ tầng dưới dạng Mã là một minh chứng cho sức mạnh và sự linh hoạt của nó. Bằng cách áp dụng Python cho IaC, các tổ chức trên toàn cầu có thể đạt được mức độ tự động hóa, nhất quán và hiệu quả chưa từng có trong việc quản lý hạ tầng IT của mình. Từ việc cấp phát tài nguyên đám mây với Terraform và Pulumi đến tự động hóa cấu hình với Ansible và triển khai các ứng dụng không máy chủ với Serverless Framework, Python trao quyền cho các nhóm DevOps xây dựng, triển khai và quản lý hạ tầng một cách tự tin và nhanh chóng.
Khi bạn tiếp tục hành trình trong tự động hóa DevOps, việc biến Python thành một phần cốt lõi trong chiến lược IaC của bạn chắc chắn sẽ dẫn đến các hoạt động IT mạnh mẽ hơn, có khả năng mở rộng và tiết kiệm chi phí hơn. Chìa khóa là chọn đúng công cụ, áp dụng các phương pháp hay nhất và thúc đẩy văn hóa học hỏi và cộng tác liên tục. Tương lai của quản lý hạ tầng là tự động, và Python là một yếu tố thiết yếu cho tương lai đó.