この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
ども、ゲストの大瀧です。
FirecrackerにはホストからmicroVMに情報を伝達する仕組みとしてMMDS(microVM Metadata Service)があり、Amazon EC2のインスタンスメタデータと同様にmicroVMからアクセスできます。本ブログでは簡単な使い方と試してみた様子をご紹介します。
microVMのセットアップ
MMDSはネットワーク機能なのでmicroVMにゲストNICが必要です。ゲストNICの追加と活性化はこちらのブログを参考にしてください。ゲストNICの作成時のリクエストボディーに"allow_mmds_requests": true
とすることでMMDSにアクセス出来るようになります。
sudo curl --unix-socket /tmp/firecracker.sock -i \
-X PUT 'http://localhost/network-interfaces/eth0' \
-H 'Accept: application/json' -H 'Content-Type: applicaion/json' \
-d '{
"iface_id": "eth0",
"host_dev_name": "veth0",
"allow_mmds_requests": true
}'
MMDSで提供するデータはREST APIのPUT /mmds
にJSON形式で登録します。以下のような感じです。
sudo curl --unix-socket /tmp/firecracker.sock -i \
-X PUT 'http://localhost/mmds' \
-H 'Accept: application/json' -H 'Content-Type: application/json' \
-d '{
"latest": {
"meta-data": {
"ami-id": "ami-12345678",
"reservation-id": "r-fea54097",
"local-hostname": "ip-10-251-50-12.ec2.internal",
"public-hostname": "ec2-203-0-113-25.compute-1.amazonaws.com",
"network": {
"interfaces": {
"macs": {
"02:29:96:8f:6a:2d": {
"device-number": "13345342",
"local-hostname": "localhost",
"subnet-id": "subnet-be9b61d"
}
}
}
}
}
}
}'
HTTP/1.1 204 No Content
Date: Tue, 25 Dec 2018 02:25:47 GMT
MMDSの取得
microVMからは169.254.169.254
へのHTTPリクエストでMMDSにアクセスします。パスは設定時のJSONに対応するので、たとえば
{
"latest": {
"meta-data": {
"local-hostname": "ip-10-251-50-12.ec2.internal"
}
}
}
にアクセスする場合、URLは
https://169.254.169.254/latest/meta-data/local-hostname
となります。
localhost:~# curl 169.254.169.254/latest/meta-data/local-hostname
ip-10-251-50-12.ec2.internallocalhost:~#
こんな感じで取れます。シンプルですね。
MMDSの更新
MMDSをセットするREST APIはPUT /mmds
でしたが、このAPIではクレデンシャル情報など後からメタデータを更新するときにJSON全体を更新しなければなりません。代わりに、差分のみリクエストに含めて更新するためのAPIPATCH /mmds
もあります。以下のような感じです。
sudo curl --unix-socket /tmp/firecracker.sock -i \
-X PATCH 'http://localhost/mmds' \
-H 'Accept: application/json' -H 'Content-Type: application/json' \
-d '{
"latest": {
"meta-data": {
"local-hostname": "server1.internal"
}
}
}'
HTTP/1.1 204 No Content
Date: Tue, 25 Dec 2018 02:28:04 GMT
microVMからアクセスすると...
localhost:~# curl 169.254.169.254/latest/meta-data/local-hostname
server1.internallocalhost:~#
正しく更新されていますね。
まとめ
FirecrackerのメタデータサービスMMDSの簡単な使い方をご紹介しました。素朴な実装なので、クラウドとの連携など簡単に実現できそうですよね。
なお、今回ご紹介した内容は近日中にマージされるであろう、以下のドキュメント案が元になっています。合わせてご覧ください。