October 20, 2021

Triển khai cơ sở hạ tầng (infrastructure) bằng Deployment Manager của GCP

Như các bạn đã biết chúng ta có thể xây dựng cơ sở hạ tầng thông qua Terraform (các bạn có thể xem lại bài này) . Hôm nay chúng ta sẽ thông qua một sản phẩm của GCP (Deployment Manager) để triển khai một cơ sở hạ tầng nhé. Trong bài này đó là một VM với một firewall đươc lập để người dùng có thể truy cập vào VM đó như là một ứng dụng web.

Trước tiên chúng ta cần bật Cloud Shell ở màn hình GCP console lên để thao tác bằng command line.

1. Tạo script mô tả hạ tầng

Tại màn hình Cloud Shell chúng ta tạo một folder mới để dễ thao tác, và tạo một file có tên config.yaml chứa nội dung mô tả infrastructure.

mkdir khanhvn666
cd khanhvn666
vi config.yaml

Nội dung config.yaml giống như bên dưới. Các bạn chỉ cần copy paste vô.

imports:
- path: instance.jinja
- path: ./startup-script.sh
  name: startup-script.sh

resources:
- name: my-instance
  type: instance.jinja
  properties:
    metadata-from-file:
      startup-script: startup-script.sh
    zone: us-west1-a

File config.yaml trên mô tả cho chúng ta biết nó sẽ sử dụng một file khác có tên instance.jinja và tạo xong VM nó sẽ chạy file startup-script.sh. Ngoài ra máy VM này có zone là us-west1-a.

Tiếp theo ta tạo file instance.jinja có nôi dung như bên dưới.

{% set COMPUTE_URL_BASE = 'https://www.googleapis.com/compute/v1/' %}
{% set BASE_NAME = env['deployment'] + '-' + env['name'] %}
resources:
- name: tcp-firewall-rule
  type: compute.v1.firewall
  properties:
    sourceRanges: ["0.0.0.0/0"]
    allowed:
    - IPProtocol: TCP
      ports: ["80"]
- name: {{ BASE_NAME }}
  type: compute.v1.instance
  properties:
    zone: {{ properties['zone'] }}
    machineType: {{ COMPUTE_URL_BASE }}projects/{{ env['project'] }}/zones/{{ properties['zone'] }}/machineTypes/f1-micro
    metadata:
      items:
      {% for key, value in properties['metadata-from-file'].iteritems() %}
      - key: {{ key }}
        value: |
          {{ imports[value]|indent(10) }}
    {% endfor %}
    disks:
    - deviceName: boot
      type: PERSISTENT
      boot: true
      autoDelete: true
      initializeParams:
        diskName: {{ BASE_NAME }}-disk
        sourceImage: {{ COMPUTE_URL_BASE }}projects/debian-cloud/global/images/family/debian-9
    networkInterfaces:
    - network: {{ COMPUTE_URL_BASE }}projects/{{ env['project'] }}/global/networks/default
      accessConfigs:
      - name: External NAT
        type: ONE_TO_ONE_NAT
outputs:
- name: vm_ip
  value: $(ref.{{ BASE_NAME }}.networkInterfaces[0].accessConfigs[0].natIP)

Và file startup-script.sh có nội dung như bên dưới.

apt-get update

apt-get install -y apache2

cat <<EOF > /var/www/html/index.html

<html><body><h1>Hello World</h1>

<p>This page was generated by a startup script.</p>

</body></html>

EOF

2. Triển khai hạ tầng thông qua Deployment Manager

Chúng ta chạy lệnh sau: gcloud deployment-manager deployments create mydepl –config config.yaml Kết quả ra giống như màn hình dưới phải không nào.

Tiếp theo chúng ta kiểm tra xem thông qua script ta đã triển khai được mấy VM và thông số như thế nào bằng câu lệnh gcloud compute instances list, thông số firewall đã tạo: gcloud compute firewall-rules list

Tiếp theo ta sẽ kiểm tra VM vừa tạo bằng cách truy cập địa chỉ EXTERNAL_IP từ trình duyệt. (Trong hình trên là 35.230.125.202)

Khi thực hành có chỗ nào chưa hiểu, cần support, các bạn hãy liên hệ với các chuyên gia Cloud Ace , hoặc comment ở form comment bên dưới, để nhận được hỗ trợ tốt hơn.