Home > Article > System Tutorial > Use Ansible to automate the deployment of serverless applications
Introduction | Ansible is designed to be the simplest deployment tool that actually works. This means it is not a complete programming language. You need to write a YAML template that defines the tasks and lists any tasks that need to be automated. |
Most people think of Ansible as a more powerful "SSH in a for loop", and in simple usage scenarios this is true. But in fact Ansible is a task, not SSH. In many cases we connect via SSH, but it also supports things like Windows Remote Management (WinRM) on Windows machines, and the HTTPS API as a common language for cloud services.
In the cloud, Ansible can operate on two independent levels: control plane and instance resources. The control plane consists of everything that is not running on the operating system. This includes setting up your network, creating new instances, provisioning higher-level services like Amazon's S3 or DynamoDB, and everything you need to keep your cloud infrastructure secure and serving your customers.
Working on the instance is what you already know Ansible can do: starting and stopping services, templating configuration files, installing packages, and all operating system-related operations over SSH.
Now, what is serviceless? Depending on who you ask, serverless is either an infinite extension of the public cloud, or a completely new paradigm where everything is API calls and has never been done before.
Ansible takes the first view. Before "serviceless" was a technical term, users had to manage and configure EC2 instances, virtual private cloud (VPC) networks, and everything else. Serviceless is another step in the direction of managed services and works well with Ansible's agentless architecture.
Before we start the Lambda example, let's look at a simple configuration CloudFormation stack task:
- name: Build network cloudformation: stack_name: prod-vpc state: present template: base_vpc.yml
Writing a task like this only takes a few minutes, but it is the final semi-manual step involved in building the infrastructure - click "Create Stack" - this will put the playbook together with the others. Now your VPC is just another task to call upon when setting up a new region.
Since the cloud provider is the source of truth about what is happening in your account, Ansible has many ways to retrieve and filter and query running instances or networks using IDs, names, and other parameters. Taking the cloudformation_facts module as an example, we can get the subnet ID, network range, and other data from the template we just created.
- name: Pull all new resources back in as a variable cloudformation_facts: stack_name: prod-vpc register: network_stack
For serverless applications, you will definitely need a Lambda function in addition to DynamoDB tables, S3 buckets, and anything else. Fortunately, by using the lambda module, a Lambda function can be created in the same way as the stack of the previous task:
- lambda: name: sendReportMail zip_file: "{{ deployment_package }}" runtime: python3.6 handler: report.send memory_size: 1024 role: "{{ iam_exec_role }}" register: new_function
If you have other tools that you want to use to deliver serverless applications, this is also possible. The open source serverless framework has its own Ansible module that also works:
- 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
This is not all you need, since the serverless project must also exist, where you will heavily define your functions and event sources. For this example, we will make a function that responds to HTTP requests. Serviceless frameworks use YAML as their configuration language (like Ansible), so this should look familiar.
# serverless.yml service: fakeservice provider: name: aws runtime: python3.6 functions: main: handler: test_function.handler events: - http: path: / method: get
At AnsibleFest, I'll cover this example and other in-depth deployment strategies to get the most out of the playbooks and infrastructure you already have, as well as new serverless practices. Whether you can get there or not, I hope these examples can get you started using Ansible, whether or not you have any services to manage.
AnsibleFest is a single-day conference that brings together hundreds of Ansible users, developers, and industry partners. Join us for product updates, inspiring conversations, technical deep dives, hands-on demos and networking all day long.
The above is the detailed content of Use Ansible to automate the deployment of serverless applications. For more information, please follow other related articles on the PHP Chinese website!