クラウドストレージ:新しいAPI機能





最近、 新しいプラットフォームへの移行について話しました 。おかげで、クラウドストレージのパフォーマンスを向上させることができました。 リポジトリのロジックとアーキテクチャを完成させ、Goでいくつかのコンポーネントを書き直した方法を詳細に説明したため、すべてが以前よりもはるかに高速かつ安定して動作するようになりました。



同時に、すべてについては説明しませんでした。APIの作業中に、いくつかの新しい関数を起動しました。これらの関数は、皆さんにとって役立つことを願っています。



認証



リポジトリはOpenStack Swift APIを完全にサポートしています。これには多くのサードパーティクライアントがあります。



これらのクライアントとの互換性のために、Swift v1認証サポートが実装され、Keystone v2およびv3認証オプションが限定的に実装されています。 したがって、3つの認証方法がAPIで利用可能になりました。

1つ目は、以前に使用されたものとほとんど変わりません(標準を満たすために承認URIのみが変更されています)。



$ curl -i https://api.selcdn.ru/auth/v1.0 -H "X-Auth-User:[ ]" -H "X-Auth-Key:[]
      
      







2番目の方法(Keystone v2認証タイプ)は、GETではなくPOST要求を使用します。 ユーザー名とパスワードはJSON配列で渡されます:



 $ curl -i -X POST https://api.selcdn.ru/v2.0/tokens -H 'Content-type: application/json' -d '{"auth": {"passwordCredentials": {"username": [ ], "password": []}}}'
      
      







APIは、そのような要求に対する応答をJSON形式で返します。



Keysone v3認証は次のようになります。



 $ curl -i https://api.selcdn.ru/v3/auth/tokens -XPOST -d '{"auth": { "identity": { "methods": ["password"], "password": { "user": { "id": [ ], "password": []}}}}}'
      
      







Keystone APIがリポジトリに完全に実装されていないという事実に注目してください。ログインとパスワードによる認証機能のみが機能します。 Keystoneプロトコル拡張機能はサポートされていません。



リポジトリのベースアドレスも変更されました。 api.selcdn.ru/v1/SEL_XXXのようになります(XXXの代わりに、もちろんユーザーIDを置き換える必要があります)。



認証システムに関連するもう1つの変更は、一時トークンの新しいメカニズムです。 有効期間が制限された追加のトークンを生成できるようになり、厳密に定義されたコンテナにのみアクセスできるようになりました。 Amazon S3のセキュリティサービスのようなもの:



 $ curl -i -X GET https://api.selcdn.ru/v1/temptokens -H "X-Auth-Token: [  ]" -H "X-Container:[]" -H "X-ExpireAfter: 8600"
      
      







X-Auth-Tokenヘッダーにはメインユーザーの有効なトークンが含まれ、X-Containerはトークンが有効になるコンテナーを示し、X-Expire-After-トークンの有効期限(秒単位)を示します。



ファイルを操作する



新しいAPIは、ファイルを操作する機能を拡張しました。 したがって、ファイルがリポジトリに完全にダウンロードされた後、tar、.tar.gz、gzipアーカイブをバックグラウンドで解凍できます。 以前の解凍オプションでは、アーカイブを「オンザフライ」で解凍していました。 ダウンロードしたアーカイブからすべてのファイルを作成するリクエストが満たされるまで、サーバーとの接続を維持する必要がありました。 接続が切断された場合、すべてをリロードする必要がありました。



これですべてがはるかに簡単になりました。 たとえば、数千のファイルを含むアーカイブをリポジトリにアップロードする必要がある場合は、追加のクエリパラメータextract-archive-v2を指定したコンテナアドレスへのPUT要求を使用して実行できます。 アーカイブが完全に送信された後、コード201がすぐに与えられ、ストレージ側でバックグラウンドでの解凍が開始されます。



 curl -i -X PUT https://api.selcdn.ru/v1/SEL_XXX/[ ]/?extract-archive-v2=tar.bz2 -H "X-Auth-Token: []" -T "photos.tar.bz2" HTTP/1.1 100 Continue HTTP/1.1 201 Created Access-Control-Expose-Headers: X-Backend-Timestamp, Etag, Last-Modified, X-Object-Manifest, X-Timestamp Content-Length: 0 Content-Type: text/html Etag: a1adb438cb26e91228870158a2062ef2 Extract-Id: 6a62579d-9ee2-2a32-26a4-207d5a47af2a
      
      







回答にあるヘッダーExtract-Idに注意してください。 これにより、開梱操作がどの段階にあるかを知ることができます。



 $ curl -i https://api.selcdn.ru/v1/extract-archive/[Extract-Id] -H "X-Auth-Token: []" HTTP/1.1 200 OK Number Files Created: 1185 Response Body: Response Status: 201 Created Errors:
      
      







この場合、コード200の答えは、展開操作が正常に完了したことを意味します。 Number Files Createdパラメーターは、アーカイブから抽出されたファイルの数を指定します。



新機能



このAPIには、特にユーザー管理、ドメイン、証明書、CDNの操作など、多くの新機能があります。 以下でそれらについて詳しく説明します。



ユーザー管理



以前は、コントロールパネルからのみユーザーを追加および削除できました。 これは、APIへの標準HTTPリクエストを介して実行できます。



次のようにユーザーのリストを表示します。



 $ curl -i -XGET https://api.selcd.ru/v1/users[?format=json] -H "X-Auth-Token: []"
      
      







新しいユーザーの作成は、リクエストを使用して実行されます。



 $ curl -i -XPUT https://api.selcd.ru/v1/users/new_user -H "X-Auth-Token: []" -H "X-Auth-Key: 123456" -H "X-User-ACL-Containers-W: container1, container2, container3" -H "X-User-ACL-Containers-R: container4" -H "X-User-Store-Password: yes" -H "X-User-Active: on"
      
      







ユーザー権利管理を拡張するためのリクエストを繰り返し受け取りました。 これらのリクエストを実行しましたが、これはリクエストのちょうど与えられた例から見ることができます:ヘッダーX-User-ACL-Containers-WとX-User-ACL-Containers-Rに注意してください。 最初は新しいユーザーが情報を書き込むことができるコンテナーを示し、2番目は読み取り専用になるコンテナーを示します。



X-Auth-Keyヘッダーは、作成されるユーザーのパスワードを示します。 X-User-Store-Passwordは、コントロールパネルの[Selectelサーバーにパスワードを保存する]オプションに相当します。 値がonのX-User-Activeヘッダーは、新しいユーザーがアクティブであることを示します。



次のように、すでに作成されたユーザーのデータを変更できます。



 $ curl -i -XPOST https://api.selcd.ru/v1/users/new_user -H "X-Auth-Token: []" -H "X-Auth-Key: 123456" -H "X-User-ACL-Containers-W: container1, container4" -H "X-User-ACL-Containers-R: container4" -H "X-User-Store-Password: yes" -H "X-User-Active: on"
      
      







ユーザーの削除は、DELETEリクエストを使用して行われます。



 $ curl -i -XDELETE https://selcdn.ru/users/[ ] -H "X-Auth-Token: []"
      
      







プライマリユーザーの場合、パスワードのみを変更できます。 これは、 api.selcd.ru / v1 / users [プライマリユーザー名]へのX-Auth-Keyヘッダーを含む POST要求を使用して行われます。



ドメイン管理



以前は、ドメインの操作は、グラフィカルインターフェイスを介してのみ可能でした。 これで、すべての操作をAPIを介して実行できます。



たとえば、ここでは、コンテナにバインドされているすべてのドメインのリストを表示できます。



 $ curl -i https://api.selcdn.ru/v1/domains -H "X-Auth-Token: []"
      
      







X-Add-Container-Domainsヘッダーを持つ対応するコンテナーにPOSTリクエストを使用してドメインをアタッチできます。



 $ curl -i https://api.selcdn.ru/v1/SEL_XXX/{container_name} -XPOST -H "X-Add-Container-Domains: domain1.ru" -H "X-Auth-Token: []"
      
      







ドメインを削除するには、同様のリクエストが使用されます。ドメイン名のみがX-Remove-Container-Domainsヘッダーで渡されます。



 $ curl -i https://api.selcdn.ru/v1/SEL_XXX/{container_name} -XPOST -H "X-Remove-Container-Domains: domain1.ru" -H "X-Auth-Token: []"
      
      







コンテナにバインドされたドメインのリストを完全に変更するには、このコンテナのアドレスにPOSTリクエストを実行し、X-Container-Domainsヘッダーの更新されたリストを転送する必要があります。



 $ curl -i https://api.selcdn.ru/SEL_XXX/[ ] -H "X-Auth-Token: []" -XPOST -H "X-ontainer-Domains: domain1.ru domain2.ru"
      
      







複数のドメインがコンテナにアタッチされており、それらを削除する必要がある場合、X-Container-Domainsヘッダーで番号0を単に渡すことができます。



 $ curl -i https://.selcdn.ru/[ ] -H "X-Auth-Token: []" -XPOST -H "X-ontainer-Domains: 0"
      
      





ログリクエスト



APIを使用して、指定した期間、ユーザーコンテナーへのネットワークアクセスのログを要求できます。



 $ curl -i -XPOST https://api.selcdn.ru/v1/logs -H "X-Auth-Token: []" -H "X-Start-Time: 2016-02-02 09:00:00" -H "X-End-Time: 2016-05-02 12:00:00" -H "X-Limit: 10000"
      
      







X-Start-TimeおよびX-End-Timeヘッダーは、ご想像のとおり、期間の始まりと終わりを示します。



オプションのX-Limitヘッダーは、このリクエストで発行されるログエントリの最大数を示します(デフォルトでは、指定した時間間隔ですべてのログを受信します)。



選択が完了すると、リポジトリにプライベートコンテナログが自動的に作成され、そこにログが配置されます。



SSL証明書管理



もう1つの新機能は、SSL証明書管理です。 グラフィカルインターフェイスとAPIの両方で証明書を操作できます。



ここでは、たとえば、コンテナにバインドされているすべての証明書のリストを表示できます。



 $ curl -i https://api.selcdn.ru/v1/ssl -XGET -H "X-Auth-Token: []"
      
      







証明書に関する情報を表示するには、フォームのリクエストが使用されます。



 $ curl -i https://api.selcdn.ru/v1/ssl/{cert_name} -XGET -H "X-Auth-Token: []"
      
      







証明書を追加する要求は次のようになります。



 $ curl -i https://api.selcdn.ru/v1/ssl/{cert_name} -XPUT -H "X-Auth-Token: []"
      
      







証明書名({cert_name})は001_cert1の形式で送信されます。番号はユーザーのユーザー名で、2番目のコンポーネントは任意の名前です。 証明書名は相互に重複できません。 証明書自体と秘密鍵は、単一のファイルとしてリクエスト本文で送信されます。



証明書を削除するには、次の形式のDELETEリクエストを送信する必要があります。



 $ curl -I https://api.selcdn.ru/v1/ssl/001_cert1 -H "X-Auth-Token: []" -XDELETE
      
      







CDNを使用する



APIに登場し、CDNを操作する機能。 キャッシュをクリアするためのリクエストを送信できます(以前は、これはグラフィカルインターフェースを介してのみ実行できました)。また、これらのリクエストの実行ステータスを表示できます。



CDNキャッシュは、PURGE要求を使用してクリアされます。



 $ curl -i -X PURGE https://api.selcdn.ru/v1/cdn -H "X-Auth-Token: []" -d 'https://api.selcdn.ru/v1/SEL_XXX/container1/file1\nhttps://XXX.selcdn.ru/container1/file1'
      
      







現在、高速パージでakamai ccu v3を使用しています。このようなリクエストを送信した後、キャッシュは約5秒以内にクリアされるはずです。 リクエストへの応答は次のようになります。



 {"estimatedSeconds": 5, "purgeId": "0bb4d6fa-4ce4-11e6-b75e-9fdde8cfe544", "supportId": "17PY1468845301403318-210404544", "httpStatus": 201, "detail": "Request accepted"}
      
      







おわりに



この記事では、クラウドストレージAPIの新機能について説明しました。 すぐに、ストレージの改善作業が継続されます。 また、機能の改善と拡張を希望する場合は、この投稿へのコメントをお読みください。 最も興味深いアイデアに注意して、それを実装してみます。



All Articles