教程:使用 Ansible 在 Azure Redis 缓存中配置缓存
重要
运行本文中的示例 playbook 需要 Ansible 2.9(或更高版本)。
Azure Redis 缓存是一种开放源代码兼容服务,可通过提供对数据的快速访问来构建响应式应用。
在本文中,学习如何:
- 创建缓存
- 缩放缓存
- 重启缓存
- 向缓存添加防火墙规则
- 删除缓存
先决条件
- Azure 订阅:如果没有 Azure 订阅,请在开始之前创建一个免费帐户。
安装 Ansible - 执行以下任一选项:
- 在 Linux 虚拟机上安装和配置 Ansible
- 配置 Azure Cloud Shell,另外,如果无法访问 Linux 虚拟机,请使用 Ansible 创建虚拟机。
创建缓存
在新资源组中创建 Azure Redis 缓存。
- name: Create resource group
azure_rm_resourcegroup:
name: "{{ resource_group }}"
location: "{{ location }}"
- name: Create Azure Cache for Redis
azure_rm_rediscache:
resource_group: "{{ resource_group }}"
name: "{{ redis_name }}"
sku:
name: basic
size: C1
预配缓存可能会耗时几分钟时间。 以下代码将指示 Ansible 等待操作完成:
- name: Wait for Redis provisioning to complete
azure_rm_rediscache_info:
resource_group: "{{ resource_group }}"
name: "{{ redis_name }}"
register: facts
until: "{{ facts.rediscaches[0]['provisioning_state'] == 'Succeeded' }}"
retries: 100
delay: 60
在较长的预配过程中,将显示多条“错误”消息。 可放心忽略这些错误消息。 最后一条消息才是重要消息。 在以下示例中,在最后一条消息 ("ok") 出现之前会显示许多错误消息。
FAILED - RETRYING: Get facts (100 retries left).
FAILED - RETRYING: Get facts (99 retries left).
FAILED - RETRYING: Get facts (98 retries left).
FAILED - RETRYING: Get facts (97 retries left).
FAILED - RETRYING: Get facts (96 retries left).
FAILED - RETRYING: Get facts (95 retries left).
FAILED - RETRYING: Get facts (94 retries left).
FAILED - RETRYING: Get facts (93 retries left).
FAILED - RETRYING: Get facts (92 retries left).
FAILED - RETRYING: Get facts (91 retries left).
ok: [localhost]
缩放缓存
Azure Redis 缓存具有不同的缓存产品/服务,具体取决于应用的需求。 这些缓存选项能够灵活地选择缓存大小和功能。 如果在创建缓存后应用要求发生更改,则可以根据需要缩放缓存。 有关缩放的详细信息,请参阅如何缩放 Azure Redis 缓存。
以下示例代码将缓存缩放为“标准”:
- name: Scale up Azure Cache for Redis
azure_rm_rediscache:
resource_group: "{{ resource_group }}"
name: "{{ redis_name }}"
sku:
name: standard
size: C1
缩放缓存可能会耗时几分钟时间。 以下代码将指示 Ansible 等待操作完成:
- name: Wait for Redis scaling up to complete
azure_rm_rediscache_info:
resource_group: "{{ resource_group }}"
name: "{{ redis_name }}"
register: facts
until: "{{ facts.rediscaches[0]['provisioning_state'] == 'Succeeded' }}"
retries: 100
delay: 60
与预配 Azure Redis 缓存任务类似,输出如下消息是正常的:
**FAILED - RETRYING: Get facts (100 retries left)** is normal.
重启缓存
以下代码将重启前面部分中创建的缓存。
- name: Reboot Azure Cache for Redis
azure_rm_rediscache:
resource_group: "{{ resource_group }}"
name: "{{ redis_name }}"
reboot:
reboot_type: all
添加防火墙规则
以下代码将向缓存添加防火墙规则:
- name: Add Firewall rule
azure_rm_rediscachefirewallrule:
resource_group: "{{ resource_group }}"
cache_name: "{{ redis_name }}"
name: rule1
start_ip_address: 168.1.1.1
end_ip_address: 168.1.1.4
删除缓存
以下代码将删除缓存:
- name: Delete Azure Cache for Redis
azure_rm_rediscache:
resource_group: "{{ resource_group }}"
name: "{{ redis_name }}"
state: absent
获取示例 playbook
可通过两种方法获取完整示例 playbook:
- 下载 playbook 并将其保存到
rediscache.yml
。 - 新建一个名为
rediscache.yml
的文件,并将以下内容复制到其中:
- name: Manage Azure Cache for Redis
hosts: localhost
connection: local
vars:
resource_group: "{{ resource_group_name }}"
redis_name: "redis{{ resource_group_name }}"
location: eastus2
roles:
- azure.azure_preview_modules
tasks:
- name: Create resource group
azure_rm_resourcegroup:
name: "{{ resource_group }}"
location: "{{ location }}"
- name: Create Azure Cache for Redis
azure_rm_rediscache:
resource_group: "{{ resource_group }}"
name: "{{ redis_name }}"
sku:
name: basic
size: C1
- name: Wait for Redis provisioning to complete
azure_rm_rediscache_info:
resource_group: "{{ resource_group }}"
name: "{{ redis_name }}"
register: facts
until: "{{ facts.rediscaches[0]['provisioning_state'] == 'Succeeded' }}"
retries: 100
delay: 60
- name: Scale up Azure Cache for Redis
azure_rm_rediscache:
resource_group: "{{ resource_group }}"
name: "{{ redis_name }}"
sku:
name: standard
size: C1
- name: Wait for Redis scaling up to complete
azure_rm_rediscache_info:
resource_group: "{{ resource_group }}"
name: "{{ redis_name }}"
register: facts
until: "{{ facts.rediscaches[0]['provisioning_state'] == 'Succeeded' }}"
retries: 100
delay: 60
- name: Reboot Azure Cache for Redis
azure_rm_rediscache:
resource_group: "{{ resource_group }}"
name: "{{ redis_name }}"
reboot:
reboot_type: all
- name: Add Firewall rule
azure_rm_rediscachefirewallrule:
resource_group: "{{ resource_group }}"
cache_name: "{{ redis_name }}"
name: rule1
start_ip_address: 168.1.1.1
end_ip_address: 168.1.1.4
- name: Delete Azure Cache for Redis
azure_rm_rediscache:
resource_group: "{{ resource_group }}"
name: "{{ redis_name }}"
state: absent
运行示例 playbook
在本部分运行 playbook 来测试本文所示的各种功能。
在 vars
节中,将 {{ resource_group_name }}
占位符替换为你的资源组名称。
使用 ansible-playbook 运行 playbook
ansible-playbook rediscache.yml
输出与以下结果类似:
TASK [create resource group]
Tuesday 12 March 2019 16:21:07 +0800 (0:00:00.054) 0:00:01.503
ok: [localhost]
TASK [Create Azure Cache for Redis]
Tuesday 12 March 2019 16:21:09 +0800 (0:00:01.950) 0:00:03.454
[WARNING]: Azure API profile latest does not define an entry for RedisManagementClient
changed: [localhost]
TASK [Dump host name]
Tuesday 12 March 2019 16:21:49 +0800 (0:00:40.125) 0:00:43.580
ok: [localhost] =>
output['host_name']: redis0312.redis.cache.windows.net
TASK [Get facts]
Tuesday 12 March 2019 16:21:49 +0800 (0:00:00.056) 0:00:43.636
[WARNING]: conditional statements should not include jinja2 templating delimiters such as {{ }} or {% %}. Found: {{ facts.rediscaches[0]['provisioning_state'] == 'Succeeded' }}
FAILED - RETRYING: Get facts (100 retries left).
FAILED - RETRYING: Get facts (99 retries left).
FAILED - RETRYING: Get facts (98 retries left).
FAILED - RETRYING: Get facts (97 retries left).
FAILED - RETRYING: Get facts (96 retries left).
FAILED - RETRYING: Get facts (95 retries left).
FAILED - RETRYING: Get facts (94 retries left).
FAILED - RETRYING: Get facts (93 retries left).
FAILED - RETRYING: Get facts (92 retries left).
FAILED - RETRYING: Get facts (91 retries left).
FAILED - RETRYING: Get facts (90 retries left).
ok: [localhost]
TASK [Scale up Azure Cache for Redis]
Tuesday 12 March 2019 16:33:20 +0800 (0:11:31.296) 0:12:14.933
changed: [localhost]
TASK [Get facts]
Tuesday 12 March 2019 16:33:29 +0800 (0:00:09.164) 0:12:24.097
[WARNING]: conditional statements should not include jinja2 templating delimiters such as {{ }} or {% %}. Found: {{ facts.rediscaches[0]['provisioning_state'] == 'Succeeded' }}
FAILED - RETRYING: Get facts (100 retries left).
FAILED - RETRYING: Get facts (99 retries left).
FAILED - RETRYING: Get facts (98 retries left).
FAILED - RETRYING: Get facts (97 retries left).
FAILED - RETRYING: Get facts (96 retries left).
FAILED - RETRYING: Get facts (95 retries left).
FAILED - RETRYING: Get facts (94 retries left).
FAILED - RETRYING: Get facts (93 retries left).
FAILED - RETRYING: Get facts (92 retries left).
FAILED - RETRYING: Get facts (91 retries left).
ok: [localhost]
TASK [Reboot Azure Cache for Redis]
Tuesday 12 March 2019 16:43:57 +0800 (0:10:27.740) 0:22:51.838
ok: [localhost]
TASK [Add Firewall rule]
Tuesday 12 March 2019 16:44:02 +0800 (0:00:05.432) 0:22:57.271
changed: [localhost]
TASK [Delete Azure Cache for Redis]
Tuesday 12 March 2019 16:44:08 +0800 (0:00:05.137) 0:23:02.409
changed: [localhost]
PLAY RECAP
localhost : ok=10 changed=4 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
Tuesday 12 March 2019 16:44:14 +0800 (0:00:06.217) 0:23:08.626
清理资源
将以下代码另存为
delete_rg.yml
。--- - hosts: localhost tasks: - name: Deleting resource group - "{{ name }}" azure_rm_resourcegroup: name: "{{ name }}" state: absent register: rg - debug: var: rg
使用 ansible-playbook 命令运行 playbook。 将占位符替换为要删除的资源组的名称。 将删除资源组内的所有资源。
ansible-playbook delete_rg.yml --extra-vars "name=<resource_group>"
要点:
- 由于 playbook 的
register
变量和debug
部分,因此在命令完成时,将显示结果。
- 由于 playbook 的
后续步骤
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈