當前位置:
首頁 > 知識 > 使用 Ansible 部署無服務(serverless)應用

使用 Ansible 部署無服務(serverless)應用

使用 Ansible 部署無服務(serverless)應用


無服務是託管服務發展方向的又一步,並且與 Ansible 的無代理體系結構相得益彰。 -- Ryan Scott Brown

編譯自: https://opensource.com/article/17/8/ansible-serverless-applications

作者: Ryan Scott Brown

譯者: geekpi

無服務serverless是託管服務managed service發展方向的又一步,並且與 Ansible 的無代理體系結構相得益彰。

Ansible[1] 被設計為實際工作中的最簡化的部署工具。這意味著它不是一個完整的編程語言。你需要編寫定義任務的 YAML 模板,並列出任何需要自動完成的任務。

大多數人認為 Ansible 是一種更強大的「處於 for 循環中的 SSH」,在簡單的使用場景下這是真的。但其實 Ansible 是任務,而非 SSH。在很多情況下,我們通過 SSH 進行連接,但它也支持 Windows 機器上的 Windows 遠程管理(WinRM),以及作為雲服務的通用語言的 HTTPS API 之類的東西。

在雲中,Ansible 可以在兩個獨立的層面上操作:控制面control plane和實例資源on-instance resource。控制面由所有沒有運行在操作系統上的東西組成。包括設置網路、新建實例、供給更高級別的服務,如亞馬遜的 S3 或 DynamoDB,以及保持雲基礎設施安全和服務客戶所需的一切。

實例上的工作是你已經知道 Ansible 可以做的:啟動和停止服務、配置文件模版化templating、安裝軟體包以及通過 SSH 執行的所有與操作系統相關的操作。

現在,什麼是無服務serverless[2]呢?這要看你問誰,無服務要麼是對公有雲的無限延伸,或者是一個全新的範例,其中所有的東西都是 API 調用,以前從來沒有這樣做過。

Ansible 採取第一種觀點。在 「無服務」 是專門術語之前,用戶不得不管理和配置 EC2 實例、虛擬私有雲 (VPC) 網路以及其他所有內容。無服務是託管服務方向邁出的另一步,並且與 Ansible 的無代理體系結構相得益彰。

在我們開始 Lambda[3] 示例之前,讓我們來看一個簡單的配置 CloudFormation 棧任務:


- name: Build network

cloudformation:

stack_name: prod-vpc

state: present

template: base_vpc.yml

編寫這樣的任務只需要幾分鐘,但它是構建基礎架構所涉及的最後的半手動步驟 - 點擊 「Create Stack」 - 這將 playbook 與其他放在一起。現在你的 VPC 只是在建立新區域時可以調用的另一項任務了。

由於雲提供商是你帳戶中發生些什麼的真相來源,因此 Ansible 有許多方法來取回並使用 ID、名稱和其他參數來過濾和查詢運行的實例或網路。以 cloudformation_facts 模塊為例,我們可以從我們剛剛創建的模板中得到子網 ID、網路範圍和其他數據。


- name: Pull all new resources back in as a variable

cloudformation_facts:

stack_name: prod-vpc

register: network_stack

對於無服務應用,除了 DynamoDB 表,S3 bucket 和其他任何其他功能之外,你肯定還需要一個 Lambda 函數的補充。幸運的是,通過使用 lambda 模塊, Lambda 函數可以以上次任務的堆棧相同的方式創建:


- lambda:

name: sendReportMail

zip_file: "{{ deployment_package }}"

runtime: python3.6

handler: report.send

memory_size: 1024

role: "{{ iam_exec_role }}"

register: new_function

如果你有其他想用來交付無服務應用的工具,這也是可以的。開源的無服務框架[4]有自己的 Ansible 模塊,它也可以工作:


- serverless:

service_path: "{{ project_dir }}"

stage: dev

register: sls

- name: Serverless uses CloudFormation under the hood, so you can easily pull info back into Ansible

cloudformation_facts:

stack_name: "{{ sls.service_name }}"

register: sls_facts

這不是你需要的全部,因為無服務項目也必須存在,你將在那裡大量的定義你的函數和事件源。對於此例,我們將製作一個響應 HTTP 請求的函數。無服務框架使用 YAML 作為其配置語言(和 Ansible 一樣),所以這應該看起來很熟悉。


# serverless.yml

service: fakeservice

provider:

name: aws

runtime: python3.6

functions:

main:

handler: test_function.handler

events:

- http:

path: /

method: get

在 AnsibleFest[5] 中,我將介紹這個例子和其他深入的部署策略,以最大限度地利用你已經擁有的 playbook 和基礎設施,還有新的無服務實踐。無論你是否能到,我希望這些例子可以讓你開始使用 Ansible,無論你是否有任何服務要管理。

AnsibleFest 是一個單日會議,彙集了數百名 Ansible 用戶、開發人員和行業合作夥伴。加入我們吧,這裡有產品更新、鼓舞人心的交談、技術深度潛水,動手演示和整天的網路。

(題圖: opensource.com)



via: https://opensource.com/article/17/8/ansible-serverless-applications

作者:Ryan Scott Brown[6] 譯者:geekpi 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

  • [1]: Ansible - https://www.ansible.com/

  • [2]: 無服務 - https://en.wikipedia.org/wiki/Serverless_computing

  • [3]: Lambda - https://aws.amazon.com/lambda/

  • [4]: 無服務框架 - https://serverless.com/

  • [5]: AnsibleFest - https://www.ansible.com/ansiblefest?intcmp=701f2000000h4RcAAI

  • [6]: Ryan Scott Brown - https://opensource.com/users/ryansb

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Linux技術 的精彩文章:

Minikube:使用 Kubernetes 進行本地開發
一個開源軟體許可證合規的經濟高效模式
一文了解 Kubernetes 是什麼?
物聯網助長了 Linux 惡意軟體

TAG:Linux技術 |