ColdFusion と GCP Storage

概要

Google Cloud Storage では、データの保存と取得をいつでも行えます。Google Cloud Storage を使用すると、コンテンツの提供、障害回復やアーカイブを目的としたデータの格納、ダウンロード可能なデータの大規模クラスターの作成などが可能です。

ColdFusion(2021 リリース)では、AWS S3 ストレージAzure BLOB ストレージをサポートしています。ColdFusion(2023 リリース)では、GCP Storage サービスを追加することでマルチクラウドサービスの機能を拡張して、様々なクラウドストレージサービスにアクセスできるようになりました。

AWS S3 と同様に、GCP Storage もバケットとオブジェクトを扱います。

  • バケット:各プロジェクトには、複数のバケット(オブジェクトを格納するためのコンテナ)を含めることができます。例えば、アプリケーションで生成するすべての画像ファイル用に写真バケットを作成し、それとは別にビデオバケットを作成するといった場合です。
  • オブジェクト:個々のファイル(例えば、holiday.png という画像など)。

はじめに

gcpstorage パッケージのインストール

パッケージ gcpstorage をインストールするには、以下の方法のいずれかを使用します。

ColdFusion Administrator

  1. ColdFusion Administrator/パッケージマネージャーに移動します。
  2. 「利用可能なパッケージ」セクションで、gcpstorage を検索します。
  3. パッケージを選択して、「インストール 」をクリックします。

インストールされたパッケージは、「利用可能なパッケージ」セクションに表示されます。

ColdFusion パッケージマネージャー

次の手順に従います。

  1. <CF_HOME>/cfusion/bin に移動します。次のコマンドを入力します。
    1. Windows:cfpm.bat
    2. Windows 以外の場合:/cfpm.sh
  2. コマンド install gcpstorage を入力します。

パッケージがインストールされるまで待ちます。

GCP Storage にアクセスするための資格情報の取得

GCP を操作する場合、資格情報を検証し、リクエストしているリソースにアクセスするための権限を持っているかどうかをチェックするために、GCP セキュリティ資格情報を指定します。

GCP は、セキュリティ資格情報を使用して、リクエストを認証および承認します。

詳しくは、GCP API キーの概要を参照してください。

クラウドサービス資格情報および設定の追加

ColdFusion には、様々なクラウドサービスにアクセスするためのオブジェクトを作成するためにハンドルを提供するメソッド getCloudService() があります。

サービスハンドルのシンタックスを次に示します。

service=getCloudService(cloudCred,cloudConfig)。ここで、

  • cloudCred:クラウドサービスの資格情報を定義します。構造体または文字列です(資格情報エイリアスとも呼ばれます)。
  • cloudConfig:クラウドサービス設定の詳細を定義します。構造体または文字列です(設定エイリアスとも呼ばれます)。

ColdFusion Administrator

資格情報の設定

ColdFusion Administrator で、データとサービス/クラウド資格情報をクリックします。 

エイリアスは、クラウドサービスおよびその設定の詳細の名前付き表現です。ColdFusion Administrator を使用して設定エイリアスを設定できます。

詳細を入力したら、「資格情報を追加」をクリックします。

設定オプションの設定

ColdFusion Administrator で、データとサービス/クラウド設定をクリックします。 

設定エイリアス、ベンダー、サービスの名前など、次の詳細を入力します。

オブジェクトの作成

GCP 資格情報および設定オプションのエイリアスを作成したら、getCloudService API を使用してオブジェクトを作成し、次のコードを CFM に含めることができます。 

storageObject= getCloudService("gcpCred", "gcpConf")

Application.cfc

GCP 資格情報および設定オプションを記載したファイルを Application.cfc で指定できます。次に例を示します。

component{
this.name =&quot;gcp&quot;
void function onApplicationStart(){
application.gcpCred = {
projectId : &quot;my-project&quot;,
credentialJsonFilePath : &quot;path-to-creds.json&quot;
};
alias.gcpConf = {
serviceName : &quot;STORAGE&quot;,
alias : &quot;gcpConfig&quot;,
retrySettings : {
initialRetryDelay : &quot;2s&quot;,
initialRpcTimeout : &quot;2s&quot;,
maxAttempts : 5 ,
maxRetryDelay : &quot;30s&quot;,
maxRpcTimeout : &quot;30s&quot;,
retryDelayMultiplier : 2 ,
rpcTimeoutMultiplier : 2,
totalTimeOut : &quot;60s&quot;
},
transportOptions : {
connectTimeout : &quot;5000&quot;,
readTimeout : &quot;5000&quot;
}
};
}
}
component{ this.name =&quot;gcp&quot; void function onApplicationStart(){ application.gcpCred = { projectId : &quot;my-project&quot;, credentialJsonFilePath : &quot;path-to-creds.json&quot; }; alias.gcpConf = { serviceName : &quot;STORAGE&quot;, alias : &quot;gcpConfig&quot;, retrySettings : { initialRetryDelay : &quot;2s&quot;, initialRpcTimeout : &quot;2s&quot;, maxAttempts : 5 , maxRetryDelay : &quot;30s&quot;, maxRpcTimeout : &quot;30s&quot;, retryDelayMultiplier : 2 , rpcTimeoutMultiplier : 2, totalTimeOut : &quot;60s&quot; }, transportOptions : { connectTimeout : &quot;5000&quot;, readTimeout : &quot;5000&quot; } }; } }
component{
    this.name =&quot;gcp&quot;
      void function onApplicationStart(){
    application.gcpCred = {
        projectId : &quot;my-project&quot;,
        credentialJsonFilePath : &quot;path-to-creds.json&quot;
    };
    alias.gcpConf = {
        serviceName : &quot;STORAGE&quot;,                      
          alias : &quot;gcpConfig&quot;,
          retrySettings : {
                   initialRetryDelay : &quot;2s&quot;,   
                   initialRpcTimeout : &quot;2s&quot;,   
                   maxAttempts : 5 ,    
                   maxRetryDelay : &quot;30s&quot;, 
                   maxRpcTimeout : &quot;30s&quot;, 
                   retryDelayMultiplier : 2 ,  
                   rpcTimeoutMultiplier : 2,  
                   totalTimeOut : &quot;60s&quot;
                  },
         transportOptions : {
                   connectTimeout : &quot;5000&quot;,   
                   readTimeout : &quot;5000&quot;  
                   }

    };
    }
}

オブジェクトを作成します。次のスニペットを参考にしてください。

storageObject = getCloudService(application.gcpCred, application.gcpConf)

CFM ページ上

CFM ページでは、以下に示す 4 とおりの方法のいずれかで GCP 資格情報および設定オプションを指定できます。

資格情報エイリアスと設定エイリアス

GCP 資格情報および設定オプション用のエイリアスを(Application.cfc または Administrator で)作成したら、次に示すように、getCloudService ハンドルでそれらのエイリアスを使用できます。

エイリアスの作成場所を、Application.cfc か Administrator のどちらかで指定します。

<cfscript>
// 資格情報エイリアスと設定エイリアスを ColdFusion Administrator で定義
storageObject=getCloudService(&quot;gcpCred&quot;,&quot;gcpConf&quot;)
// 以下にコードを記述
...........
</cfscript>
<cfscript> // 資格情報エイリアスと設定エイリアスを ColdFusion Administrator で定義 storageObject=getCloudService(&quot;gcpCred&quot;,&quot;gcpConf&quot;) // 以下にコードを記述 ........... </cfscript>
<cfscript> 
  // 資格情報エイリアスと設定エイリアスを ColdFusion Administrator で定義 
  storageObject=getCloudService(&quot;gcpCred&quot;,&quot;gcpConf&quot;) 
  // 以下にコードを記述 
  ........... 
</cfscript>

資格情報エイリアスと設定構造体

<cfscript>
// サービス資格情報エイリアスとサービス設定用構造体を使用
gcpConf = {
&quot;alias&quot;:&quot;gcpConf&quot;,
&quot;serviceName&quot; : &quot;STORAGE&quot;
}
storageObject= getCloudService(&quot;gcpCred&quot;, gcpConf)
// 以下にコードを記述
.....................
</cfscript>
<cfscript> // サービス資格情報エイリアスとサービス設定用構造体を使用 gcpConf = { &quot;alias&quot;:&quot;gcpConf&quot;, &quot;serviceName&quot; : &quot;STORAGE&quot; } storageObject= getCloudService(&quot;gcpCred&quot;, gcpConf) // 以下にコードを記述 ..................... </cfscript>
<cfscript> 
    // サービス資格情報エイリアスとサービス設定用構造体を使用 
    gcpConf = { 
            &quot;alias&quot;:&quot;gcpConf&quot;, 
            &quot;serviceName&quot; : &quot;STORAGE&quot;
          
    } 
    storageObject= getCloudService(&quot;gcpCred&quot;, gcpConf) 
   
    // 以下にコードを記述 
    ..................... 
</cfscript>

設定エイリアスと資格情報構造体

<cfscript>
// サービス設定エイリアスとサービス資格情報用構造体を使用
// GCP 資格情報
gcpCreds = {
&quot;vendorName&quot;:&quot;GCP&quot;,
&quot;alias&quot;: &quot;gcpCred&quot;,
&quot;projectId&quot;:&quot;1234&quot;,
&quot; credentialJsonFilePath &quot;: &quot;file path&quot;
}
storageObject= getCloudService(gcpCreds, &quot;gcpConf&quot;)
// 以下にコードを記述
.....................................
</cfscript>
<cfscript> // サービス設定エイリアスとサービス資格情報用構造体を使用 // GCP 資格情報 gcpCreds = { &quot;vendorName&quot;:&quot;GCP&quot;, &quot;alias&quot;: &quot;gcpCred&quot;, &quot;projectId&quot;:&quot;1234&quot;, &quot; credentialJsonFilePath &quot;: &quot;file path&quot; } storageObject= getCloudService(gcpCreds, &quot;gcpConf&quot;) // 以下にコードを記述 ..................................... </cfscript>
<cfscript> 
    // サービス設定エイリアスとサービス資格情報用構造体を使用 
    // GCP 資格情報 
    gcpCreds = { 
      &quot;vendorName&quot;:&quot;GCP&quot;, 
      &quot;alias&quot;: &quot;gcpCred&quot;, 
      &quot;projectId&quot;:&quot;1234&quot;, 
      &quot; credentialJsonFilePath &quot;: &quot;file path&quot;
    } 
    storageObject= getCloudService(gcpCreds, &quot;gcpConf&quot;) 
    // 以下にコードを記述 
    ..................................... 
</cfscript>

資格情報構造体と設定構造体

<cfscript>
// クラウド資格情報用構造体とクラウド設定用構造体を使用
gcpCreds = {
&quot;vendorName&quot;:&quot;GCP&quot;,
&quot;alias&quot;: &quot;gcpCred&quot;,
&quot;projectId&quot;:&quot;1234&quot;,
&quot; credentialJsonFilePath &quot;: &quot;file path&quot;
}
gcpConf = {
&quot;alias&quot;:&quot;gcpConf&quot;,
&quot;serviceName&quot; : &quot;STORAGE&quot;,
&quot;clientOverrideConfig&quot;:{
&quot;retryPolicy&quot;:{
&quot;numRetries&quot;:4
}
},
&quot;httpClientConfig&quot;:{
&quot;maxConnections&quot;:50
}
}
storageObject= getCloudService(gcpCreds, gcpConf)
// 以下にコードを記述
...................................................................
</cfscript>
<cfscript> // クラウド資格情報用構造体とクラウド設定用構造体を使用 gcpCreds = { &quot;vendorName&quot;:&quot;GCP&quot;, &quot;alias&quot;: &quot;gcpCred&quot;, &quot;projectId&quot;:&quot;1234&quot;, &quot; credentialJsonFilePath &quot;: &quot;file path&quot; } gcpConf = { &quot;alias&quot;:&quot;gcpConf&quot;, &quot;serviceName&quot; : &quot;STORAGE&quot;, &quot;clientOverrideConfig&quot;:{ &quot;retryPolicy&quot;:{ &quot;numRetries&quot;:4 } }, &quot;httpClientConfig&quot;:{ &quot;maxConnections&quot;:50 } } storageObject= getCloudService(gcpCreds, gcpConf) // 以下にコードを記述 ................................................................... </cfscript>
<cfscript> 
  // クラウド資格情報用構造体とクラウド設定用構造体を使用 
 gcpCreds = { 
      &quot;vendorName&quot;:&quot;GCP&quot;, 
      &quot;alias&quot;: &quot;gcpCred&quot;, 
      &quot;projectId&quot;:&quot;1234&quot;, 
      &quot; credentialJsonFilePath &quot;: &quot;file path&quot;
    }
    gcpConf = { 
            &quot;alias&quot;:&quot;gcpConf&quot;, 
            &quot;serviceName&quot; : &quot;STORAGE&quot;, 
            &quot;clientOverrideConfig&quot;:{ 
                &quot;retryPolicy&quot;:{ 
                  &quot;numRetries&quot;:4 
                } 
            }, 
            &quot;httpClientConfig&quot;:{ 
                &quot;maxConnections&quot;:50 
            } 
      }
  storageObject= getCloudService(gcpCreds, gcpConf) 
   
  // 以下にコードを記述 
  ................................................................... 
</cfscript>

CFSetup を使用した認証情報と設定の追加

追加:

  • cloudconfiguration:add cloudconfigutaion alias=gcp_config serviceName=STORAGE <cf_alias_name>
  • cloudconfiguration:add cloudconfigutaion alias=gcp_config serviceName=STORAGE maxRpcTimeout=50s retryDelayMultiplier=5 maxAttempts=8 maxRetryDelay=40s rpcTimeoutMultiplier=3 totalTimeout=50s <cf_alias_name>
  • cloudcredential:add cloudcredential vendorName=”GCP” alias=<cloudcredential_alias> projectId=<project_id> credentialJSONFilePath=<credential_JSON_File_Path> <cf_alias_name>

表示:

  • cloudconfiguration:show cloudconfiguration <cf_alias_name>
  • cloudcredential:show cloudcredential <cloudcredential_name>

設定:

  • cloudconfiguration:set cloudconfiguration <cloudconfiguration_name> initialRetryDelay=2s initialRpcTimeout=40s maxAttempts=5 maxRetryDelay=30s maxRpcTimeout=40s retryDelayMultiplier=3 rpcTimeoutMultiplier=2 totalTimeout=40s <cf_alias_name>
  • cloudcredential:set cloudcredential <cloudcredential_name> projectId=<project_id> credentialJSONFilePath=<credential_JSON_File_Path> <cf_alias_name>

取得:

  • cloudconfiguration:get cloudconfiguration <cloudconfiguration_name> <cf_alias_name>
  • cloudcredential:get cloudcredential <cloudcredential_name> <cf_alias_name>

ストレージオブジェクト用の API

バケットオブジェクト用の API

ヘルプをすばやく簡単に入手

新規ユーザーの場合