ConoHa のオブジェクトストレージの一時的なオブジェクト公開 URL (Temporary URL)を PHP を使って生成する

ConoHa ObjectStorage Temporary url API document

ConoHa のオブジェクトストレージには、一時的にオブジェクトを公開する場合に便利な Temporary URL 機能があります。

この機能を使うメリットは、下記が挙げられます。

  • web publishing と違って全体に公開する必要が無い
  • 指定した期間が過ぎると無効化される
  • キー、時間、オブジェクト名から URL を生成するので、URL を改ざんされてもアクセスできない

オブジェクトストレージ自体は、接続元 IP 制限などはありませんが、一段挟むことでそのようなことも実現可能です。

URL を生成する処理について、API リファレンスには、Python のサンプルしか載っていませんでしたが、ウェブサイト内で呼び出す場合、PHP の方が使い勝手が良いので、作成してみました。

“ConoHa のオブジェクトストレージの一時的なオブジェクト公開 URL (Temporary URL)を PHP を使って生成する” の続きを読む

GitLab のバックアップを ConoHa のオブジェクトストレージに自動的に保存する方法(11.9 版)

CloudBerry Explorer で ConoHa のオブジェクトストレージに保存した GitLab のバックアップを確認

以前、下記の記事を公開しましたが、最新版だと変更が入っているようで、改めて記事を公開します。

今回は、ConoHa のテンプレートイメージを作った GitLab と、11.9 のバックアップを、ConoHa のオブジェクトストレージに保存する設定がどのように変わったか紹介します。

“GitLab のバックアップを ConoHa のオブジェクトストレージに自動的に保存する方法(11.9 版)” の続きを読む

GitLab のバックアップを ConoHa のオブジェクトストレージに自動的に保存する方法

ConoHa で GitLab のイメージを使用

2019/04/08:バージョン 11.9 以降では手順が少し変わっていますのでブログ記事を公開しました。


自分だけの設計図共有サイトを作れる、GitLab
最近、標準でバックアップ機能を備えていることを知りました。

バックアップ先として、下記が書かれています。

GitLab imports cloud drivers for AWS, Google, OpenStack Swift, Rackspace and Aliyun as well. A local driver is also available.

このブログでもお世話になっている、ConoHa のオブジェクトストレージは OpenStack Swift ですので、ちょうど利用できそうです。

ただ、公式サイトには Amazon S3、Digital Ocean、Google Cloud Storage の設定例は記載されているのですが、肝心の OpenStack の方法が書いておらず…

そこで今回は、ConoHa のテンプレートイメージを作った GitLab のバックアップを、ConoHa のオブジェクトストレージに保存する機能を紹介します。
“GitLab のバックアップを ConoHa のオブジェクトストレージに自動的に保存する方法” の続きを読む

ConoHaのオブジェクトストレージをPowerShellで使ってみた ~その2・ファイルの送受信

はじめに

前回の記事では、PowerShellとC#を用いてトークンを含むJSONデータの取得まで出来ました。
今回は、PowerShellにおいて、JSONデータからのトークンの抽出、コンテナリストの確認、オブジェクトリストの確認、オブジェクトのアップロード、オブジェクトのダウンロードについて紹介します。

今回のサンプルから、PowerShell 3.0以降で動作します。Windows 8以降の方は問題ありませんが、Vistaや7でバージョンが古い場合は最新版をインストールしてください。(Windows 7→4.0、Vista→3.0

参考リンク

まず、公式サイトでの概要や説明のページを紹介します。

次に、ConoHaのオブジェクトストレージ利用者のブログです。

前回の記事のコメント

前回の記事にTonghyun Kim様よりコメントをいただきました。

Powershellなら、Invoke-RestMethodはどうでしょう。

今回は、今後更新するであろうC#のコードと同じHttpWebRequestを利用していますが、Invoke-RestMethodを使用するとシンプルになりそうなので、そちらを使ったサンプルも公開したいなと思います。

サンプルコード

※予めコンテナ「test」を作成してください。
今回、PowerShellのfunctionを使用したり、echoではなく正式なWrite-Outputを使用するなど、追加した機能以外においても変化しています。
ConvertFrom-JsonはJSONを扱うことがあれば、覚えておいて損は無いと思います。

トークンは24時間有効なので、デバッグなどであればコード中に書き込み、トークン取得を省略することも出来ます。

# 関数の定義

# API認証をおこないトークンを取得します
function getToken([string] $tenantname, [string] $username, [string] $password, [string] $authurl){
    $req = [Net.HttpWebRequest]::Create($tokensurl)
    $req.Method = "POST"
    $req.ContentType="application/json";
    $req.Accept = "application/json";
    # 認証情報の送信
    $datastr = "{""auth"": {""tenantName"": """ + $tenantname + """, ""passwordCredentials"": {""username"": """ + $username + """, ""password"": """ + $password + """}}}";
    $data = [System.Text.Encoding]::ASCII.GetBytes($datastr);
    $reqStream = $req.GetRequestStream();
        $reqStream.Write($data, 0, $data.Length);
    $reqStream.Close();
    # トークンの受信
    $res = $req.GetResponse();
        $resStream = $res.GetResponseStream();
            $sr = new-object System.IO.StreamReader($resStream, [System.Text.Encoding]::ASCII);
                $result = $sr.ReadToEnd();
            $sr.Close();
        $resStream.Close();
    $res.Close();
    # JSONからTokenの取得
    $tokens = $result | ConvertFrom-Json
    $token  = $tokens.access.token.id;
    return $token
}

# コンテナリストの確認
function getContainer([string]$token, [string] $endpoint){
    $req = [Net.HttpWebRequest]::Create($endpoint)
    $req.Method = "GET"
    $req.Headers.Add("X-Auth-Token: "+$token)
    $res = $req.GetResponse();
        $resStream = $res.GetResponseStream();
            $sr = new-object System.IO.StreamReader($resStream, [System.Text.Encoding]::ASCII);
                $result = $sr.ReadToEnd();
            $sr.Close();
        $resStream.Close();
    $res.Close()
    Write-OutPut "コンテナリスト"
    Write-OutPut $result
}

# オブジェクトリストの確認
function getObjectList([string]$containerName, [string]$token, [string] $endpoint){
    $req = [Net.HttpWebRequest]::Create($endpoint+"/"+$containerName)
    $req.Method = "GET"
    $req.Headers.Add("X-Auth-Token: "+$token)
    $res = $req.GetResponse()
        $resStream = $res.GetResponseStream()
            $sr = new-object System.IO.StreamReader($resStream, [System.Text.Encoding]::ASCII)
                $result = $sr.ReadToEnd()
            $sr.Close()
        $resStream.Close()
    $res.Close()
    Write-OutPut "ttt のオブジェクトリスト"
    Write-OutPut $result
}

# オブジェクトのアップロード
function putObject([byte[]]$data, [string]$fileName, [string]$containerName, [string]$token, [string]$endpoint){
    $req = [Net.HttpWebRequest]::Create($endpoint+"/"+$containerName+"/"+$fileName)
    $req.Method = "PUT"
    $req.Headers.Add("X-Auth-Token: "+$token)
    $req.SendChunked = "true" # Content-Length 省略のため
    $reqStream = $req.GetRequestStream();
        $reqStream.Write($data, 0, $data.Length);
    $reqStream.Close();
}

# オブジェクトのダウンロード
function getObject([string]$fileName, [string]$containerName, [string]$token, [string]$endpoint){
    $req = [Net.HttpWebRequest]::Create($endpoint+"/"+$containerName+"/"+$fileName)
    Write-OutPut $req.RequestUri
    $req.Method = "GET"
    $req.Headers.Add("X-Auth-Token: "+$token)
    $res = $req.GetResponse()
        $resStream = $res.GetResponseStream()
            $sr = new-object System.IO.StreamReader($resStream, [System.Text.Encoding]::ASCII)
                $result = $sr.ReadToEnd()
            $sr.Close()
        $resStream.Close()
    $res.Close()
    Write-OutPut "ファイルの内容"
    Write-OutPut $result
}

# Public
function postContainerReadPublic([string]$containerName,[string]$token, [string] $endpoint){
    $req = [Net.HttpWebRequest]::Create($endpoint+"/"+$containerName)
    $req.Method = "POST"
    $req.Headers.Add("X-Auth-Token: "+$token)
    $req.Headers.Add("X-Container-Read: .r:*,.rlistings")
    $res = $req.GetResponse();
        $resStream = $res.GetResponseStream();
            $sr = new-object System.IO.StreamReader($resStream, [System.Text.Encoding]::ASCII);
                $result = $sr.ReadToEnd();
            $sr.Close();
        $resStream.Close();
    $res.Close()
    Write-OutPut "Result "
    Write-OutPut $result
}

# ユーザー設定
# 入力するAPI情報は https://www.conoha.jp/guide/guide.php?g=46
$authurl = "API Auth URL"
$tokensurl = $authurl + "/tokens"
$tenantname = "テナント名"
$username =  "ユーザー名"
$password = "パスワード"
$endpoint = "オブジェクトストレージエンドポイント"
# 24時間有効なので、デバッグ時はこちらに入力すると良いかも
$token = ""

# トークンの取得
if($token -eq "") {
    $token = getToken $tenantname $username $password $authurl
    Write-OutPut "getToken"
    Write-OutPut $token
}
# コンテナリストの確認
getContainer $token $endpoint
# オブジェクトリストの確認
getObjectList "test" $token $endpoint
# オブジェクトのアップロード
[byte[]]$upData = 0x43,0x6f,0x6e,0x6f,0x48,0x61
putObject $upData "conoha.txt" "test" $token $endpoint
# オブジェクトのダウンロード
getObject "conoha.txt" "test" $token $endpoint

# Public
#postContainerReadPublic "test" $token $endpoint

バイナリ形式のデータもアップロードできるかの確認のため、あえてbyte[]で書いています。

このサンプルコードにおいて、Publicと書かれた部分は、コンテナの属性を変更して誰でも読み取り可能にするコードです。
通常ならコードにあるとおり、ダウンロードにも認証が必要ですが、コンテナ単位で一般公開用、プライベート用が変更可能です。
ConoHaなら転送量の制限がないので、気にせずに公開することが出来ます。

ConoHaのオブジェクトストレージをPowerShell(+C#)で使ってみた ~その1・認証編

9月3日、GMOインターネットのConoHaからオブジェクトストレージがリリースされたので、さっそく登録してみました。

はじめに

※オブジェクトストレージは初めて使い、PowerShellのスクリプトも初めて使用するため、詳しい人にとっては物足りない記事だと思います。
※基盤ソフトウェアとしてOpenStack Swiftを使用しているとのことですので、同じソフトウェアなら応用できる可能性もありますが未確認です。

まず、公式サイトでの概要や説明のページを紹介します。

上級者はもちろん、右上の言語をJapaneseからConoHaに変えてログイン。
https://www.conoha.jp/conoha からアクセスすると変更の手間がかかりません。
conohatop

“ConoHaのオブジェクトストレージをPowerShell(+C#)で使ってみた ~その1・認証編” の続きを読む