迅维网

运用 Ansible 部署无服务(serverless)使用

hcrt 2017-9-8 14:22

运用 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 进行连接,但它也支持 Win 机器上的 Win 远程管理(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 用户、开发人员和行业合作伙伴。加入我们吧,这里有产品更新、鼓舞人心的交谈、技术深度潜水,动手演示和整天的网络。


雷人

握手

鲜花

鸡蛋

路过
收藏
来自: 今日头条

最新评论

发表评论

登录 后可参与评论
关闭

站长提醒 上一条 /1 下一条

返回顶部
附近
店铺
微信扫码查看附近店铺
维修
报价
扫码查看手机版报价
信号元
件查询
点位图


芯片搜索