Droplet Metadata简介

更新CloudInit链接和元数据是提供给DigitalOcean Droplet,使Droplet访问有关自身数据的服务,即它的元数据。可用的Droplet的元数据的实例包括用户提供的用户数据,墨Droplet的ID,数据中心区,...

介绍

元数据是提供给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,而无需与它们交互! 如果您想了解所有可用的元数据端点,检查出的元数据文件 。 有关于使用元数据的问题或建议吗?请将它留在评论部分!