マークダウンテキストタイルに画像 URL をハードコードすることで、Looker ダッシュボードに画像を追加できます。(後述の参考サイト①参照)
Lookerダッシュボードに表示する画像をCloud Storageで保管することで、複数のダッシュボードで同じ画像を再利用でき、細かい権限設定ができるため、画像を安全に管理することができます。
Cloud StorageのURLには、以下の3種類があります。
Lookerダッシュボード上の画像を表示する場合、上記3つのURLには以下のメリットとデメリットがあります。
種類 | メリット | デメリット |
承認済みURL |
・特定のユーザーまたはグループにのみアクセスを許可するため、セキュリティが高い |
・画像を表示するユーザーにGoogleアカウントが必要 ・Cloud Storageのアクセス制御ポリシーの設定が必要 |
署名付きURL |
・画像を表示するユーザーのGoogleアカウントが不要 ・URLに有効期限が設定できる |
・URLが知られると誰でもアクセスできる ・有効期間が過ぎるとURLが失効する |
公開URL |
・画像を表示するユーザーのGoogleアカウントが不要 |
・URLが知られると誰でもアクセスできる |
承認済みURLが最も安全なため推奨となりますが、Googleアカウント数の制限等により、署名付きURLまたは公開URLを採用する場合は、VPC Service ControlでIPアドレスによるアクセス制限をかけることをお勧めします。(後述の参考サイト②参照)
本記事では、署名付きURLを使用してLookerダッシュボードに画像を表示する方法について説明します。
Cloud Storage, BigQuery, Lookerの基礎知識がある人
署名付きURLを使用してLookerダッシュボードに画像を表示する流れは以下の通りです。
後述の参考サイト④⑤の通りに、Cloudリソース接続とオブジェクトテーブルを作成します。
以下の設定が完了していることを前提とします。
Cloud Storageのバケットを作成します。([BUCKET_NAME_1]は適宜設定してください)
$ gsutil mb gs://[BUCKET_NAME_1]
バケット作成後、適宜画像ファイルを作成したバケットにアップロードしてください。
本記事では以下の画像ファイルをCloud Storageバケットにアップロードしました。
オブジェクトテーブルの作成に必要である、BigQuery Connection APIを有効にします。
$ gcloud services enable bigqueryconnection.googleapis.com
Cloud リソース接続を作成します。
$ bq mk --connection --location=us-central1 --connection_type=CLOUD_RESOURCE my-connection
Cloud リソース接続が作成されました。
Cloud リソース接続を作成すると、BigQuery により一意のシステムサービスアカウント(上記画像のサービスアカウントID)が作成され、Cloud リソース接続に関連付けられます。
作成されたサービスアカウントにバケットのStorageオブジェクト閲覧者の役割を付与します。([MEMBER]はサービスアカウントID、[BUCKET_NAME_1]は作成したCloud Storageバケット名を設定してください。)
$ gsutil iam ch serviceAccount:[MEMBER]:objectViewer gs://[BUCKET_NAME_1]
BigQueryのクエリエディタで以下を実行し、オブジェクトテーブルを作成します。([PROJECT_ID].[BQ_DATASET].[TABLE_NAME]は適宜設定してください)
CREATE EXTERNAL TABLE `[PROJECT_ID].[BQ_DATASET].[TABLE_NAME]`
WITH CONNECTION `us-central1.my-connection`
OPTIONS(
object_metadata = 'SIMPLE',
uris = ['gs://[BUCKET_NAME_1]/hoge/*.png', 'gs://[BUCKET_NAME_2]/hoge/*.png'],
max_staleness = INTERVAL 1 DAY,
metadata_cache_mode = 'AUTOMATIC'
);
上記クエリの設定値の説明は以下の通りです。
オブジェクトテーブルが作成されました。
オブジェクトテーブルに対してクエリしてみると、Cloud Storageオブジェクトのメタデータが取得できます。
SELECT * FROM test.gcs_table;
Cloud Storageオブジェ句テーブルの作成が完了しました。
続いて、Lookerの設定を行います。
view: gcs_table {
sql_table_name: `test.gcs_table` ;;
dimension: content_type {
type: string
sql: ${TABLE}.content_type ;;
}
dimension: generation {
type: number
sql: ${TABLE}.generation ;;
}
dimension: md5_hash {
type: string
sql: ${TABLE}.md5_hash ;;
}
dimension: metadata {
hidden: yes
sql: ${TABLE}.metadata ;;
}
dimension: size {
type: number
sql: ${TABLE}.size ;;
}
dimension_group: updated {
type: time
timeframes: [raw, time, date, week, month, quarter, year]
sql: ${TABLE}.updated ;;
}
dimension: uri {
type: string
sql: ${TABLE}.uri ;;
}
measure: count {
type: count
}
}
view: gcs_table_signed_url {
derived_table: {
sql: SELECT
uri,
signed_url
FROM EXTERNAL_OBJECT_TRANSFORM(TABLE test.gcs_table, ['SIGNED_URL'])
;;
}
dimension: uri {
type: string
sql: ${TABLE}.uri ;;
}
dimension: signed_url {
type: string
sql: ${TABLE}.signed_url ;;
}
dimension: image {
type: string
sql: ${TABLE}.signed_url ;;
html: <img src= height=auto width="100%">;;
}
}
derived_table で署名付きURLの生成をし、dimension: imageで画像を埋め込んでいます。
このとき、生成される署名付き URL は、発行から6 時間後に期限切れになります。
modelを作成します。
connection: "[PROJECT_ID]"
# include all the views
include: "/views/**/*.view.lkml"
datagroup:[LOOKER_PROJECT]_default_datagroup {
# sql_trigger: SELECT MAX(id) FROM etl_log;;
max_cache_age: "1 hour"
}
persist_with: [LOOKER_PROJECT]_default_datagroup
explore: gcs_table {
join: gcs_table_signed_url {
type: left_outer
relationship: one_to_many
sql_on: ${gcs_table_signed_url.uri} = ${uri};;
}
}
Exploreでディメンションを「Image」「Signed URL」「URI」を選択し、実行ボタンを押下することで、署名付きURLの画像が表示されることが確認できました。(画像表示の都合上、ビジュアリゼーションは 単一レコード に設定しております。)
Exploreからダッシュボードを作成します。
キャッシュを消去して更新すると、署名付きURL(Signed URL)が更新されていることが確認できます。
Google Storageの署名付きURLを使用して、Lookerダッシュボードに画像を表示することができました。
署名付きURLを使用することで、有効期限が設定されるため、公開URLよりは安全にファイルを管理することができ、承認済みURLのような権限管理は不要となります。
Google Cloud、Google Workspaceに関する お問い合わせはこちら
XIMIX(サイミクス)は商標登録出願中です