使用 Ansible 部署無服務(serverless)應用
無服務是託管服務發展方向的又一步,並且與 Ansible 的無代理體系結構相得益彰。
Ansible 被設計為實際工作中的最簡化的部署工具。這意味著它不是一個完整的程式語言。你需要編寫定義任務的 YAML 模板,並列出任何需要自動完成的任務。
大多數人認為 Ansible 是一種更強大的“處於 for 迴圈中的 SSH”,在簡單的使用場景下這是真的。但其實 Ansible 是任務,而非 SSH。在很多情況下,我們通過 SSH 進行連線,但它也支援 Windows 機器上的 Windows 遠端管理(WinRM),以及作為雲服務的通用語言的 HTTPS API 之類的東西。
在雲中,Ansible 可以在兩個獨立的層面上操作:控制面和例項資源。控制面由所有沒有執行在作業系統上的東西組成。包括設定網路、新建例項、供給更高階別的服務,如亞馬遜的 S3 或 DynamoDB,以及保持雲基礎設施安全和服務客戶所需的一切。
例項上的工作是你已經知道 Ansible 可以做的:啟動和停止服務、配置檔案模版化、安裝軟體包以及通過 SSH 執行的所有與作業系統相關的操作。
現在,什麼是無服務呢?這要看你問誰,無服務要麼是對公有云的無限延伸,或者是一個全新的範例,其中所有的東西都是 API 呼叫,以前從來沒有這樣做過。
Ansible 採取第一種觀點。在 “無服務” 是專門術語之前,使用者不得不管理和配置 EC2 例項、虛擬私有云 (VPC) 網路以及其他所有內容。無服務是託管服務方向邁出的另一步,並且與 Ansible 的無代理體系結構相得益彰。
在我們開始 Lambda 示例之前,讓我們來看一個簡單的配置 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
如果你有其他想用來交付無服務應用的工具,這也是可以的。開源的無服務框架有自己的 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 中,我將介紹這個例子和其他深入的部署策略,以最大限度地利用你已經擁有的 playbook 和基礎設施,還有新的無服務實踐。無論你是否能到,我希望這些例子可以讓你開始使用 Ansible,無論你是否有任何服務要管理。
AnsibleFest 是一個單日會議,彙集了數百名 Ansible 使用者、開發人員和行業合作伙伴。加入我們吧,這裡有產品更新、鼓舞人心的交談、技術深度潛水,動手演示和整天的網路。
(題圖: opensource.com)
via: https://opensource.com/article/17/8/ansible-serverless-applications
作者:Ryan Scott Brown 譯者:geekpi 校對:wxy
相關文章
- 用 Ansible 部署無服務應用!
- 使用 k8s 快速部署應用服務K8S
- 使用 Serverless Devs 外掛快速部署前端應用Serverdev前端
- Serverless 微服務實踐-移動應用包分發服務Server微服務
- 使用Knative基於構建、部署、管理serverless應用Server
- Serverless部署應用並使用Cloudflare加速和支援HTTPSServerCloudHTTP
- LAMP平臺服務簡介、部署及應用LAMP
- 如何使用Akka Serverless製作電子商務應用?Server
- 管理Mac應用使用定位服務Mac
- 深度學習 | 如何開發、部署 Serverless 應用?深度學習Server
- 玩轉AIGC,5分鐘 Serverless 部署 Stable Diffustion 服務AIGCServer
- Terraform部署容器服務Swarm叢集及WordPress應用ORMSwarm
- ansible批量管理服務 上
- 用Apache服務部署網站Apache網站
- win10應用商店服務不可用怎麼辦 win10應用商店服務無法使用如何修復Win10
- 【應用服務 App Service】App Service使用Git部署時,遇見500錯誤APPGit
- 轉碼服務serverless探索Server
- 使用Dockerfile部署nodejs服務DockerNodeJS
- DNS服務應用DNS
- 利用京東雲Serverless服務快速構建5G時代的IoT應用Server
- 即學即會 Serverless | 如何解決 Serverless 應用開發部署的難題?Server
- Spring Boot Serverless 實戰系列“部署篇” | Mall 應用Spring BootServer
- 無服務計算應用場景探討及 FaaS 應用實戰
- EMQX Cloud Serverless 正式上線:三秒部署、按量計費的 MQTT Serverless 雲服務MQCloudServerQT
- BSN文昌鏈已部署上線VRF應用合約服務VR
- 使用nacos原始碼部署nacos服務原始碼
- Windows服務無法啟動桌面應用程式(Winform介面)WindowsORM
- ansible高階應用ansible-vault
- Qt服務應用操作QT
- 使用 Ansible 安裝部署 TiDBTiDB
- 用 GitHub Actions 部署 Go 語言服務GithubGo
- 控制檯程式使用ABP框架應用層服務框架
- HarmonyOS:使用本地真機執行應用/服務
- 微服務Consul系列之服務部署、搭建、使用微服務
- NFS服務部署NFS
- 用 Docker 建立 serverless 應用DockerServer
- 應用 Serverless 化,讓業務開發心無旁騖Server
- 如何使用flask將模型部署為服務Flask模型