介绍
元数据是提供给DigitalOcean Droplet的服务,允许Droplet访问关于自身的数据,即其元数据。可用的Droplet的元数据的实例包括用户提供的
用户数据 ,Droplet的ID,数据中心区,和IP地址。 除了基本的Droplet元数据检索,元数据允许用户提供任意
用户数据以创建他们的Droplet,这可以通过CloudInit被消耗以缓解云服务器的配置。 本教程包括以下主题:
- 什么是用户数据
- 如何向用户提供用户数据
- 如何检索Droplet元数据
元数据服务及其端点的完整文档可在
DigitalOcean开发者门户网站 。
关于用户数据
用户数据是用户在其创建时间期间可以提供给Droplet的任意数据。 CloudInit可以使用用户数据,通常在首次引导云服务器期间,以root用户身份执行任务或运行脚本 - 这在配置服务器时非常有用。 CloudInit目前可用于DigitalOcean的最新CoreOS,Ubuntu 14.04和CentOS 7映像。可以为不支持CloudInit的映像定义用户数据,但不会在第一次引导时自动使用。 CloudInit接受
cloud-config
文件或可以由新的Droplet进行解释,例如打击脚本的任何脚本。 对于写作的云配置文件的帮助,请查看我们的教程:
简介云配置脚本 。
如何提供用户数据
在元数据中,可以在创建Droplet时向其提供用户数据。创建Droplet后无法修改用户数据。由于Droplet可以通过DigitalOcean控制面板或API创建,我们将向您展示如何使用这两种方法指定用户数据。 在这两个例子中,我们将创建一个Ubuntu的云服务器和包括Nginx的安装和替换的内容bash脚本
index.html
与Droplet的主机名和IP地址。这里是bash脚本,如果你想自己尝试一下:
#!/bin/bash
apt-get -y update
apt-get -y install nginx
export HOSTNAME=$(curl -s http://169.254.169.254/metadata/v1/hostname)
export PUBLIC_IPV4=$(curl -s http://169.254.169.254/metadata/v1/interfaces/public/0/ipv4/address)
echo Droplet: $HOSTNAME, IP Address: $PUBLIC_IPV4 > /usr/share/nginx/html/index.html
DigitalOcean控制面板
当创建通过DigitalOcean控制面板Droplet,你可能会在
可用设置部分提供用户数据,
用户数据输入框。 只需勾选“启用用户数据”复选框,然后将用户数据粘贴到出现的表单中。 记住要选择你可能需要的任何其他设置,如
专用网络 。
如果您不熟悉创建通过DigitalOcean控制面板Droplet,请参阅
本指南 。
DigitalOcean API
如果使用DigitalOcean API来创建你的Droplet,就可以通过指定用户数据
user_data
在Droplet创建POST请求的参数。 让我们假设,我们想在NYC3数据中心使用Ubuntu 14.04映像文件和控制面板示例中显示的用户数据创建一个名为“metadata.example.com”的512 MB小型计算机(带有专用网络)。这里是curl命令你可以运行使用DigitalOcean API来创建它的一个例子,假设用户的数据在
~/user-data.yml
:
curl -X POST "https://api.digitalocean.com/v2/droplets" \
-d'{"name":"metadata.example.com","region":"nyc3","size":"512mb","private_networking":true,"image":"ubuntu-14-04-x64","user_data":
"'"$(cat ~/user-data.yml)"'",
"ssh_keys":[ <SSH KEY IDs> ]}' \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json"
您也可以直接传递用户数据到
curl
的要求,假设你逃避任何双引号字符,就像这样:
curl -X POST "https://api.digitalocean.com/v2/droplets" \
-d'{"name":"metadata.example.com","region":"nyc3","size":"512mb","private_networking":true,"image":"ubuntu-14-04-x64","user_data":
"#!/bin/bash
apt-get -y update
apt-get -y install nginx
export HOSTNAME=$(curl -s http://169.254.169.254/metadata/v1/hostname)
export PUBLIC_IPV4=$(curl -s http://169.254.169.254/metadata/v1/interfaces/public/0/ipv4/address)
echo Droplet: $HOSTNAME, IP Address: $PUBLIC_IPV4 > /usr/share/nginx/html/index.html",
"ssh_keys":[ <SSH KEY IDs> ]}' \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json"
您必须替换为你的SSH密钥ID(S)或指纹(S)
<SSH Key ID(s)>
,并确保您的
$TOKEN
环境变量设置为你读一个/写DigitalOcean个人的访问令牌。 有关使用API的更多信息,请参见
本教程 。
如何检索Droplet元数据
Droplet元数据API覆盖在详细
DigitalOcean开发者门户网站 ,但我们将在这里展示检索元数据的几个例子。 Metadata API可以通过向以下链接本地地址发送HTTP GET请求来从Droplet查询:
http://169.254.169.254/metadata/v1/
顶级索引
下面是使用的例子
curl
命令发送一个HTTP GET请求到Droplet的元数据端点的顶层,
/metadata/v1/
:
curl http://169.254.169.254/metadata/v1/
id
hostname
user-data
vendor-data
public-keys
region
interfaces/
dns/
这打印出可用的Droplet元数据的索引,并且可以被认为像目录列表。由斜杠拖尾的项表示索引,并且不由斜杠结尾的项表示数据。
用户数据
下面是使用的例子
curl
检索Droplet的用户数据:
curl http://169.254.169.254/metadata/v1/user-data
这将返回在Droplet创建期间提供的用户数据。
公共网络接口
下面是使用的例子
curl
检索Droplet的公网IP地址:
curl http://169.254.169.254/metadata/v1/interfaces/public/0/ipv4/address
这将返回Droplet的公共IP地址。这种元数据终结,与主机名端点一起,在使用
如何提供用户数据部分创建示例的Nginx
index.html
文件。
结论
DigitalOcean的Droplet元数据服务可用于改进您的云服务器配置体验,通过允许您启动自动配置为您的需求的新Droplet。通过提供适当的用户数据,您现在可以创建在启动时安装软件,配置所述软件,甚至注册服务发现系统的Droplet,而无需与它们交互! 如果您想了解所有可用的元数据端点,检查出的
元数据文件 。 有关于使用元数据的问题或建议吗?请将它留在评论部分!