2022年5月18日水曜日

(Python) nifcloud と botocore を共存させる方法

(Python) nifcloud と botocore を共存させる方法

概要

nifcloud が botocore にパッチを当てているため使うたびに reload で切り替える必要がある

環境

  • Python 3.10.2
  • nifcloud 1.0.3
  • botocore 1.21.43

サンプルコード

nifcloud が import されている状態で nifcloud を再度 reload しようとすると無限ループになるので botocore のときに nifcloud に戻すように条件分岐する必要がある

import importlib

import botocore
import nifcloud

# nifcloud モードへ
if botocore.session.Session().user_agent_name != 'nifcloud':
    importlib.reload(nifcloud.session)
    importlib.reload(nifcloud.loaders)
from nifcloud import session

client = session.get_session().create_client(
    "computing",
    region_name="jp-east-1",
    nifcloud_access_key_id="xxx",
    nifcloud_secret_access_key="xxx")
client.describe_instances()

# botocore モードへ
importlib.reload(botocore.session)
importlib.reload(botocore.loaders)
from botocore import session

client = session.get_session().create_client(
    's3',
    aws_access_key_id='xxx',
    aws_secret_access_key='xxx',
)
client.list_buckets()

# 再度 nifcloud モードへ
if botocore.session.Session().user_agent_name != 'nifcloud':
    importlib.reload(nifcloud.session)
    importlib.reload(nifcloud.loaders)
from nifcloud import session

client = session.get_session().create_client(
    "computing",
    region_name="jp-east-1",
    nifcloud_access_key_id="xxx",
    nifcloud_secret_access_key="xxx")
client.describe_instances()

同一プロセスないで両方使う場合は上記のようにしないとダメなようです
面倒な場合は別プロセスにしても OK です

0 件のコメント:

コメントを投稿