Scaleway 指南
简介
Scaleway 是一个由 community.general 集合支持的云提供商,通过一组插件和模块。这些模块是
community.general.scaleway_compute:管理 Scaleway 上的服务器。您可以使用此模块创建、重启和删除服务器。
community.general.scaleway_sshkey:从文件或值向 Packet 基础架构添加公钥 SSH 密钥。每个随后创建的设备都将在 .ssh/authorized_keys 中安装此公钥。
community.general.scaleway_volume:管理 Scaleway 上的卷。
插件是
注意
本指南假设您熟悉 Ansible 及其工作原理。如果您不熟悉,请在开始之前查看 ansible_documentation。
要求
Scaleway 模块和清单脚本使用 Scaleway REST API 连接到 Scaleway API。要使用模块和清单脚本,您需要一个 Scaleway API 令牌。您可以通过 Scaleway 控制台的凭据页面生成 API 令牌。验证自己的身份的最简单方法是在环境变量中设置 Scaleway API 令牌
$ export SCW_TOKEN=00000000-1111-2222-3333-444444444444
如果您不希望导出您的 API 令牌,您可以使用 api_token
参数将其作为参数传递给模块。
如果您想在本教程中使用新的 SSH 密钥对,您可以将其生成到 ./id_rsa
和 ./id_rsa.pub
,如下所示
$ ssh-keygen -t rsa -f ./id_rsa
如果您想使用现有的密钥对,只需将私钥和公钥复制到剧本目录中即可。
如何添加 SSH 密钥?
连接到 Scaleway 计算节点使用安全外壳。SSH 密钥存储在帐户级别,这意味着您可以在多个节点中重复使用相同的 SSH 密钥。配置 Scaleway 计算资源的第一步是至少配置一个 SSH 密钥。
community.general.scaleway_sshkey 是一个管理 Scaleway 帐户上的 SSH 密钥的模块。您可以通过在剧本中包含以下任务来将 SSH 密钥添加到您的帐户
- name: "Add SSH key"
community.general.scaleway_sshkey:
ssh_pub_key: "ssh-rsa AAAA..."
state: "present"
ssh_pub_key
参数包含您的 ssh 公钥作为字符串。以下是剧本中的示例
- name: Test SSH key lifecycle on a Scaleway account
hosts: localhost
gather_facts: false
environment:
SCW_API_KEY: ""
tasks:
- community.general.scaleway_sshkey:
ssh_pub_key: "ssh-rsa AAAAB...424242 [email protected]"
state: present
register: result
- ansible.builtin.assert:
that:
- result is success and result is changed
如何创建计算实例?
现在我们已经配置了一个 SSH 密钥,下一步是启动服务器! community.general.scaleway_compute 是一个可以创建、更新和删除 Scaleway 计算实例的模块
- name: Create a server
community.general.scaleway_compute:
name: foobar
state: present
image: 00000000-1111-2222-3333-444444444444
organization: 00000000-1111-2222-3333-444444444444
region: ams1
commercial_type: START1-S
以下是上面显示的示例的参数详细信息
name
是实例的名称(将在您的 Web 控制台中显示的名称)。image
是您要使用的系统映像的 UUID。每个可用区都提供了所有映像的列表。organization
表示您的帐户所附加到的组织。region
表示您的实例所在的可用区(对于此示例,为par1
和ams1
)。commercial_type
表示商业产品的名称。您可以查看 Scaleway 定价页面,以找到适合您的实例。
请查看此简短的剧本,以查看使用 scaleway_compute
的工作示例
- name: Test compute instance lifecycle on a Scaleway account
hosts: localhost
gather_facts: false
environment:
SCW_API_KEY: ""
tasks:
- name: Create a server
register: server_creation_task
community.general.scaleway_compute:
name: foobar
state: present
image: 00000000-1111-2222-3333-444444444444
organization: 00000000-1111-2222-3333-444444444444
region: ams1
commercial_type: START1-S
wait: true
- ansible.builtin.debug:
var: server_creation_task
- ansible.builtin.assert:
that:
- server_creation_task is success
- server_creation_task is changed
- name: Run it
community.general.scaleway_compute:
name: foobar
state: running
image: 00000000-1111-2222-3333-444444444444
organization: 00000000-1111-2222-3333-444444444444
region: ams1
commercial_type: START1-S
wait: true
tags:
- web_server
register: server_run_task
- ansible.builtin.debug:
var: server_run_task
- ansible.builtin.assert:
that:
- server_run_task is success
- server_run_task is changed
动态清单插件
Ansible 附带 community.general.scaleway。您现在可以通过此插件获取 Scaleway 资源的完整清单,并根据不同的参数进行过滤(目前支持 regions
和 tags
)。
让我们创建一个示例!假设我们要获取所有带有标签 web_server 的主机。创建一个名为 scaleway_inventory.yml
的文件,内容如下
plugin: community.general.scaleway
regions:
- ams1
- par1
tags:
- web_server
此清单表示我们想要获取 ams1
和 par1
区域中带有标签 web_server
的所有主机。配置此文件后,您可以使用以下命令获取信息
$ ansible-inventory --list -i scaleway_inventory.yml
输出将是
{
"_meta": {
"hostvars": {
"dd8e3ae9-0c7c-459e-bc7b-aba8bfa1bb8d": {
"ansible_verbosity": 6,
"arch": "x86_64",
"commercial_type": "START1-S",
"hostname": "foobar",
"ipv4": "192.0.2.1",
"organization": "00000000-1111-2222-3333-444444444444",
"state": "running",
"tags": [
"web_server"
]
}
}
},
"all": {
"children": [
"ams1",
"par1",
"ungrouped",
"web_server"
]
},
"ams1": {},
"par1": {
"hosts": [
"dd8e3ae9-0c7c-459e-bc7b-aba8bfa1bb8d"
]
},
"ungrouped": {},
"web_server": {
"hosts": [
"dd8e3ae9-0c7c-459e-bc7b-aba8bfa1bb8d"
]
}
}
正如您所见,我们得到了不同的主机组。par1
和 ams1
是基于位置的分组。web_server
是基于标签的分组。
如果未定义过滤器参数,插件会假设需要所有可能的值。这意味着对于您的 Scaleway 计算节点上存在的每个标签,都会创建一个基于每个标签的分组。
Scaleway S3 对象存储
对象存储 允许您存储任何类型的对象(文档、图像、视频等)。由于 Scaleway API 与 S3 兼容,因此 Ansible 通过 amazon.aws 模块原生支持它:amazon.aws.s3_bucket, amazon.aws.s3_object。
您可以在 scaleway_s3 集成测试中找到许多示例。
- hosts: myserver
vars:
scaleway_region: nl-ams
s3_url: https://s3.nl-ams.scw.cloud
environment:
# AWS_ACCESS_KEY matches your scaleway organization id available at https://cloud.scaleway.com/#/account
AWS_ACCESS_KEY: 00000000-1111-2222-3333-444444444444
# AWS_SECRET_KEY matches a secret token that you can retrieve at https://cloud.scaleway.com/#/credentials
AWS_SECRET_KEY: aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
module_defaults:
group/amazon.aws.aws:
s3_url: '{{ s3_url }}'
region: '{{ scaleway_region }}'
tasks:
# use a fact instead of a variable, otherwise template is evaluate each time variable is used
- ansible.builtin.set_fact:
bucket_name: "{{ 99999999 | random | to_uuid }}"
# "requester_pays:" is mandatory because Scaleway does not implement related API
# another way is to use amazon.aws.s3_object and "mode: create" !
- amazon.aws.s3_bucket:
name: '{{ bucket_name }}'
requester_pays:
- name: Another way to create the bucket
amazon.aws.s3_object:
bucket: '{{ bucket_name }}'
mode: create
encrypt: false
register: bucket_creation_check
- name: add something in the bucket
amazon.aws.s3_object:
mode: put
bucket: '{{ bucket_name }}'
src: /tmp/test.txt # needs to be created before
object: test.txt
encrypt: false # server side encryption must be disabled