教程:使用 Ansible 在 Azure App 服务 中配置应用
重要
运行本文中的示例 playbook 需要 Ansible 2.7(或更高版本)。
Azure 应用服务使你可以生成和托管代码。 此代码可以采用 Web 应用、移动后端和 RESTful API 的形式。 借助应用服务,可以使用选择的编程语言开发代码,而无需管理基础结构。 应用服务支持 Windows 和 Linux。 支持从任何 Git 存储库进行自动部署,包括 GitHub 和 Azure DevOps。
在本文中,学习如何:
- 使用 Java 8 和 Tomcat 容器运行时在 Azure 应用服务中创建应用
- 创建 Azure 流量管理器配置文件
- 使用所创建的应用定义流量管理器终结点
先决条件
- Azure 订阅:如果没有 Azure 订阅,请在开始之前创建一个免费帐户。
安装 Ansible - 执行以下任一选项:
- 在 Linux 虚拟机上安装和配置 Ansible
- 配置 Azure Cloud Shell,另外,如果无法访问 Linux 虚拟机,请使用 Ansible 创建虚拟机。
创建基本的应用服务
本部分中的 playbook 代码定义以下资源:
- 在其中部署应用服务计划和应用的 Azure 资源组
- 采用 Java 8 的 Linux 上的应用服务 和 Tomcat 容器运行时
将以下 playbook 保存为 firstwebapp.yml
:
- hosts: localhost
connection: local
vars:
resource_group: myResourceGroup
webapp_name: myfirstWebApp
plan_name: myAppServicePlan
location: eastus
tasks:
- name: Create a resource group
azure_rm_resourcegroup:
name: "{{ resource_group }}"
location: "{{ location }}"
- name: Create App Service on Linux with Java Runtime
azure_rm_webapp:
resource_group: "{{ resource_group }}"
name: "{{ webapp_name }}"
plan:
resource_group: "{{ resource_group }}"
name: "{{ plan_name }}"
is_linux: true
sku: S1
number_of_workers: 1
frameworks:
- name: "java"
version: "8"
settings:
java_container: tomcat
java_container_version: 8.5
使用 ansible-playbook 运行 playbook
ansible-playbook firstwebapp.yml
运行 playbook 后,可看到类似于以下结果的输出:
PLAY [localhost]
TASK [Gathering Facts]
ok: [localhost]
TASK [Create a resource group]
changed: [localhost]
TASK [Create App Service on Linux with Java Runtime]
[WARNING]: Azure API profile latest does not define an entry for WebSiteManagementClient
changed: [localhost]
PLAY RECAP
localhost : ok=3 changed=2 unreachable=0 failed=0
创建应用并使用 Azure 流量管理器
可使用 Azure 流量管理器来控制如何将来自 Web 客户端的请求分发到 Azure 应用服务中的应用。 将应用服务终结点添加到 Azure 流量管理器配置文件时,流量管理器会跟踪应用服务应用的状态。 状态包括“正在运行”、“已停止”和“已删除”。 流量管理器用于确定应接收流量的终结点。
在应用服务中,应用在应用服务计划中运行。 应用服务计划为要运行的应用定义一组计算资源。 可以在不同的组中管理应用服务计划和 Web 应用。
本部分中的 playbook 代码定义以下资源:
- 在其中部署应用服务计划的 Azure 资源组
- 应用服务计划
- 在其中部署应用的 Azure 资源组
- 采用 Java 8 的 Linux 上的应用服务 和 Tomcat 容器运行时
- 流量管理器配置文件
- 使用创建的应用的流量管理器终结点
将以下 playbook 保存为 webapp.yml
:
- hosts: localhost
connection: local
vars:
resource_group_webapp: myResourceGroupWebapp
resource_group: myResourceGroup
webapp_name: myLinuxWebApp
plan_name: myAppServicePlan
location: eastus
traffic_manager_profile_name: myTrafficManagerProfile
traffic_manager_endpoint_name: myTrafficManagerEndpoint
tasks:
- name: Create resource group
azure_rm_resourcegroup:
name: "{{ resource_group_webapp }}"
location: "{{ location }}"
- name: Create secondary resource group
azure_rm_resourcegroup:
name: "{{ resource_group }}"
location: "{{ location }}"
- name: Create App Service Plan
azure_rm_appserviceplan:
resource_group: "{{ resource_group }}"
name: "{{ plan_name }}"
location: "{{ location }}"
is_linux: true
sku: S1
number_of_workers: 1
- name: Create App Service on Linux with Java Runtime
azure_rm_webapp:
resource_group: "{{ resource_group_webapp }}"
name: "{{ webapp_name }}"
plan:
resource_group: "{{ resource_group }}"
name: "{{ plan_name }}"
is_linux: true
sku: S1
number_of_workers: 1
app_settings:
testkey: "testvalue"
frameworks:
- name: java
version: 8
settings:
java_container: "Tomcat"
java_container_version: "8.5"
- name: Get web app facts
azure_rm_webapp_facts:
resource_group: "{{ resource_group_webapp }}"
name: "{{ webapp_name }}"
register: webapp
- name: Create Traffic Manager Profile
azure_rm_trafficmanagerprofile:
resource_group: "{{ resource_group_webapp }}"
name: "{{ traffic_manager_profile_name }}"
location: global
routing_method: performance
dns_config:
relative_name: "{{ traffic_manager_profile_name }}"
ttl: 60
monitor_config:
protocol: HTTPS
port: 80
path: '/'
- name: Add endpoint to traffic manager profile, using created web site
azure_rm_trafficmanagerendpoint:
resource_group: "{{ resource_group_webapp }}"
profile_name: "{{ traffic_manager_profile_name }}"
name: "{{ traffic_manager_endpoint_name }}"
type: azure_endpoints
location: "{{ location }}"
target_resource_id: "{{ webapp.webapps[0].id }}"
使用 ansible-playbook 运行 playbook
ansible-playbook webapp.yml
运行 playbook 后,可看到类似于以下结果的输出:
PLAY [localhost]
TASK [Gathering Facts]
ok: [localhost]
TASK [Create resource group]
changed: [localhost]
TASK [Create resource group for app service plan]
changed: [localhost]
TASK [Create App Service Plan]
[WARNING]: Azure API profile latest does not define an entry for WebSiteManagementClient
changed: [localhost]
TASK [Create App Service on Linux with Java Runtime]
changed: [localhost]
TASK [Get web app facts]
ok: [localhost]
TASK [Create Traffic Manager Profile]
[WARNING]: Azure API profile latest does not define an entry for TrafficManagerManagementClient
changed: [localhost]
TASK [Add endpoint to traffic manager profile, using the web site created above]
changed: [localhost]
TASK [Get Traffic Manager Profile facts]
ok: [localhost]
PLAY RECAP
localhost : ok=9 changed=6 unreachable=0 failed=0
后续步骤
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈