5
6

More than 1 year has passed since last update.

Cloud StorageにCSVファイルがアップロードされたらCloud SQLにインポートするCloud Functionsを作成したときに苦戦した箇所のメモ

Last updated at Posted at 2022-05-25

概要

Google Cloud PlatformでCloud StorageにCSVファイルがアップロードされたらCloud SQL上のテーブルにインポートされるようにしたいと思い、Cloud Functionsで関数を作成してみました。
その際に個人的に苦戦した箇所のメモです。

なお、今回 Cloud SQL は MySQL8.0, Cloud Functions は Python3.7を使用しました。

ソース

main.py
def importDs(self, request):
    from pprint import pprint
    import googleapiclient.discovery
    from oauth2client.client import GoogleCredentials

    credentials = GoogleCredentials.get_application_default()
    service = googleapiclient.discovery.build('sqladmin', 'v1beta4', credentials=credentials, cache_discovery=False)

    project = 'プロジェクト名'
    instance = 'Cloud SQLのインスタンス名'
    instances_import_request_body = {
        "importContext": {
            "uri": "gs://バケット名/フォルダパス/CSVファイル名.csv",
            "database": 'データベース名',
            "kind": "sql#importContext",
            "fileType": "CSV",
            "csvImportOptions": {
                "table": "users",
                "columns": [
                    "カラム名1",
                    "カラム名2"
                ]
            }
        }
    }

    request = service.instances().import_(project=project, instance=instance, body=instances_import_request_body)
    response = request.execute()
    pprint(response)

苦戦した箇所

引数の設定

修正後

def importDs(self, request):

修正前

def importDs(request):

修正前のような形で書いていたらTypeErrorが発生したので、下記記事を参考に引数を追加しました。

buildの引数

ImportErrorが発生したため、下記記事を参考に引数に「cache_discovery=False」を追加しました。

service = googleapiclient.discovery.build('sqladmin', 'v1beta4', credentials=credentials, cache_discovery=False)

権限の設定

実行時にパーミッションエラーが出たため、下記記事を参考に権限付与しました。

参考

Cloud Functionsのソース作成及びトラブルシューティング時に、下記のページを参照しました。

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6