閱讀294 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Ansible 怎麼可以缺少阿裏雲

雲計算時代DevOps的協同開發、自動構建、持續集成已經被越來越多的用戶和企業所接受,作為DevOps的核心之一,自動化更是隨著自動化工具的不斷成熟而愈發強大。自動化的目標是將整個交付流程盡其所能的自動化,包括基礎設施的自動化,應用部署的自動化,應用集成的自動化等。

作為自動化工具的重要成員之一,Ansible 為自動化運維提供了一個良好的解決方案。

眾所周知,Ansible是一個IT自動化運維的工具,它的最主要的特點是可以通過SSH協議實現對應用服務器係統的配置,應用的部署以及一些更高級IT任務的執行,如持續部署,開機回滾等。除此之外,Ansible還有一個重要的特性,可以通過代碼來實現對基礎設施的定義,生產和管理,而這就是所謂的基礎設施即代碼(Infrastracture as Code)簡寫為IaC。

作為DevOps的重要自動化工具之一,Ansible怎麼可以缺少雲計算服務的重要提供商-阿裏雲呢?本文將向大家詳細展示如何基於 Ansible 實現對阿裏雲基礎設施的定義和管理。
image

Ansible Provider Of Alicloud

基於Ansible實現對阿裏雲基礎設施管控的基本思路:利用Ansible Module設計和實現麵向阿裏雲服務的Provider,使其可以解析用戶在playbooks中定義的資源參數,並通過這些參數調用對應雲服務的API,進而實現對阿裏雲對應資源的管控。

下圖是基於Ansible快速搭建阿裏雲ECS instance,VPC以及其他資源的實現原理流程圖:
image

從上圖可以看出,整個阿裏雲資源搭建的實現過程總共需要五步:

  1. 用戶以代碼的形式定義阿裏雲資源,主要體現為輸入各個資源對應的參數,如鏡像ID,實例類型,VPC網段,EIP帶寬等;
  2. 定義完成後,執行ansible-playbook命令,運行定義好的playbook;
  3. ansible解析playbook,並確定playbook所使用的provider;
  4. 通過provider調用對應的資源module,並在module中重新組裝參數和構建請求;
  5. 調用阿裏雲的開放API,實現對阿裏雲對應資源的有效管控。

在了解了Ansible Provider Of Alicloud的基本實現原理後,接下來介紹如何使用。

安裝 Ansible Provider Of Alicloud

首先安裝 Ansible Provider Of Alicloud。
根據不同用戶的需求,我們為Ansible Provider Of Alicloud提供了兩種簡單的安裝方式。

  • 安裝方式一:
    運行如下命令即可實現對ansible以及alicloud provider的同時安裝:

    $ sudo pip install ansible_alicloud

  • 安裝方式二:
    為了適應不同用戶的需求,我們提供了對module的源碼安裝,即可根據自身的需要,在ansible-provider中選擇自己需要的module並進行安裝:

    • 新建工作目錄roles/library

      $ mkdir -p roles/library

    • ansible-provider中下載自己需要的module到目錄roles/library下

    • 安裝module的依賴

      $ sudo pip install ansible_alicloud_module_utils

安裝完畢後,即可編寫playbook實現對阿裏雲資源的管控了。

使用 Ansible Provider Of Alicloud

Ansible Provider Of Alicloud安裝成功後,即可通過編寫playbooks來定義阿裏雲資源了。Playbook的編寫必須符合YAML語法,下麵是創建阿裏雲instance的playbook alicloud.yml:

- name: Create ECS instance in VPC network
  hosts: localhost
  connection: local
  vars:
    # general
    alicloud_access_key: <your-alicloud-access-key-id>
    alicloud_secret_key: <your-alicloud-access-secret-key>
    alicloud_region: cn-beijing
    alicloud_zone: cn-beijing-a
    image: centos_6_8_64_40G_base_20170222.vhd
    type: ecs.n4.small
    instance_name: travis-ansible-instance
    description: travis-ansible-instance
    host_name: myhost
    password: pass@123
    count: 1
    allocate_public_ip: True
    internet_charge_type: PayByBandwidth
    max_bandwidth_in: 200
    max_bandwidth_out: 10
    instance_tags:
      - tag_key: create_test_1
        tag_value: '0.01'
      - tag_key: create_test_2
        tag_value: '0.02'

  tasks:
    - name: Creating an ECS instance
      alicloud_instance:
        alicloud_access_key: '{{ alicloud_access_key }}'
        alicloud_secret_key: '{{ alicloud_secret_key }}'
        alicloud_region: '{{ alicloud_region }}'
        alicloud_zone: '{{ alicloud_zone }}'
        image_id: '{{ image }}'
        instance_type: '{{ type }}'
        instance_name: '{{ instance_name }}'
        description: '{{ description }}'
        host_name: '{{ host_name }}'
        password: '{{ password }}'
        group_id: 'sg-xxxxxxxxxxx'
        vswitch_id: 'vsw-xxxxxxxxxxx'
        count: '{{ count }}'
        allocate_public_ip: '{{ allocate_public_ip }}'
        internet_charge_type: '{{ internet_charge_type }}'
        max_bandwidth_in: '{{ max_bandwidth_in }}'
        max_bandwidth_out: '{{ max_bandwidth_out }}'
        instance_tags: '{{ instance_tags }}'
      register: ecs 

如上所示,我們定義了一台在北京可用區的 Centos 的 Instance。

更多有關module的內容和實例,可參考 ansible-alicloud文檔.

資源定義完畢後,運行如下的命令即可實現對阿裏雲ECS Instance的快速創建:

$ ansible-playbook alicloud.yml

值得注意的是,alicloud_instance module提供了count參數,以實現對 ECS Instance 的批量創建。

Playbook執行結束後,Module 將會在向您輸出當前創建的所有 Instance 的 ID,IP。 基於ID和IP可進一步實現對Instance的管理,如啟動,停止,部署應用等。

開發 Ansible Provider Of Alicloud

目前我們已經完成了阿裏雲產品主要module的開發,並向Ansible官方提交了 PR。雖然還沒有被Merge,但可根據上文提供安裝方式完成安裝和使用。
Provider的倉庫地址是ansible-provider,歡迎大家使用並為其貢獻力量和提供需求,我們將持續改進和完善。

除此之外,我們將提供更多的基於Ansible Provider的最佳實踐,敬請期待。

寫在最後

DevOps的不斷發展造就了自動化工具的不斷豐富和完善,Ansible Provider Of Alicloud 正是 Ansible 中不可或缺的一部分。為此,我們也將根據用戶的需求以及阿裏雲產品功能的不斷發展,提供更加豐富和強大的 Module,幫助用戶尤其是Ansible用戶簡化基礎設施構建的流程,進而為整個業務流程的自動化貢獻力量。

參考資料

Ansilbe Alicloud Provider Github.
Ansible Docs.
Ansilbe Alicloud Docs

最後更新:2017-08-16 18:02:21

  上一篇:go  PostgreSQL SQL 語言:數據操縱
  下一篇:go  微商管理係統之代理商管理軟件