💬

Cloud Workflowから、Cloud Storage内部のファイルをテキストデータとして読み込む

2024/09/15に公開

概要

  • Cloud Workflow 内に「長いSQL」を書く必要がある場合、当然だがシンタックスハイライトが効かないなどで可読性が下がる
  • そこでSQLファイル自体を、Cloud Storage 内に置いておき、そのファイルを Cloud Workflow 内で読み込めれば可読性が上がると考えた
  • しかし少しコツが必要だったので、メモしておく

結論

  • Google APIsのstorage.v1.objects.getalt: 'media' を指定することで、ファイルの中身を「バイナリとして」取得できる
  • 取得したバイナリをテキストに変換して使う

コード

  • 以下のワークフローを構築して
main:
  params: [event]
  steps:
    - init:
        assign:
          - projectId: ${event.projectId}
          - bucket: ${event.bucket}
    - log_event:
        call: sys.log
        args:
          data: ${event}
    - read_sql_from_gcs:
        call: googleapis.storage.v1.objects.get
        args:
          bucket: ${bucket}
          object: 'sample.sql' # 読み込むファイル名
          alt: 'media' # これを指定することで、ファイルの中身を「バイナリとして」取得できる
        result: aggregate_query # 取得したバイナリを格納する変数

    # あとは任意のステップで文字列として使う
    - aggregate_votes:
        call: googleapis.bigquery.v2.jobs.insert
        args:
          projectId: ${projectId}
          body:
            configuration:
              query:
                query: ${text.decode(aggregate_query)} # 使う時にバイナリをテキストに変換する

GitHubで編集を提案

Discussion