Ansible 怎麼可以缺少阿裏雲
雲計算時代DevOps的協同開發、自動構建、持續集成已經被越來越多的用戶和企業所接受,作為DevOps的核心之一,自動化更是隨著自動化工具的不斷成熟而愈發強大。自動化的目標是將整個交付流程盡其所能的自動化,包括基礎設施的自動化,應用部署的自動化,應用集成的自動化等。
作為自動化工具的重要成員之一,Ansible 為自動化運維提供了一個良好的解決方案。
眾所周知,Ansible是一個IT自動化運維的工具,它的最主要的特點是可以通過SSH協議實現對應用服務器係統的配置,應用的部署以及一些更高級IT任務的執行,如持續部署,開機回滾等。除此之外,Ansible還有一個重要的特性,可以通過代碼來實現對基礎設施的定義,生產和管理,而這就是所謂的基礎設施即代碼(Infrastracture as Code)簡寫為IaC。
作為DevOps的重要自動化工具之一,Ansible怎麼可以缺少雲計算服務的重要提供商-阿裏雲呢?本文將向大家詳細展示如何基於 Ansible 實現對阿裏雲基礎設施的定義和管理。
Ansible Provider Of Alicloud
基於Ansible實現對阿裏雲基礎設施管控的基本思路:利用Ansible Module設計和實現麵向阿裏雲服務的Provider,使其可以解析用戶在playbooks中定義的資源參數,並通過這些參數調用對應雲服務的API,進而實現對阿裏雲對應資源的管控。
下圖是基於Ansible快速搭建阿裏雲ECS instance,VPC以及其他資源的實現原理流程圖:
從上圖可以看出,整個阿裏雲資源搭建的實現過程總共需要五步:
- 用戶以代碼的形式定義阿裏雲資源,主要體現為輸入各個資源對應的參數,如鏡像ID,實例類型,VPC網段,EIP帶寬等;
- 定義完成後,執行
ansible-playbook
命令,運行定義好的playbook; - ansible解析playbook,並確定playbook所使用的provider;
- 通過provider調用對應的資源module,並在module中重新組裝參數和構建請求;
- 調用阿裏雲的開放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