FirecrackerのMMDS(microVM Metadata Service)を試してみる
ども、ゲストの大瀧です。
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の簡単な使い方をご紹介しました。素朴な実装なので、クラウドとの連携など簡単に実現できそうですよね。
なお、今回ご紹介した内容は近日中にマージされるであろう、以下のドキュメント案が元になっています。合わせてご覧ください。