我在尝试获取秘密值时收到以下错误,
AttributeError: 'coroutine' object has no attribute 'token'
sys:1: RuntimeWarning: coroutine 'AzureCliCredential.get_token' was never awaited
代码-
#secrets.py
from azure.identity.aio import AzureCliCredential
from azure.keyvault.secrets import SecretClient
KVUri = f"https://{keyVaultName}.vault.azure.net"
credential = AzureCliCredential()
secret_client = SecretClient(vault_url=KVUri, credential=credential)
async def get_secret(name: str):
secret = await secret_client.get_secret(name)
return secret.value
#main.py
async def print_hi(name):
# Use a breakpoint in the code line below to debug your script.
print(f'Hi, {name}') # Press Ctrl+F8 to toggle the breakpoint.
secret_value = await secrets.get_secret("order-cat-appinsights-instrumentation-key")
print(f"Secret value is {secret_value}")
# Press the green button in the gutter to run the script.
if __name__ == '__main__':
asyncio.run(print_hi('PyCharm'))
# print_hi('PyCharm')
AttributeError:“coroutine”对象没有属性“token”sys:1:RuntimeWarning:coroutine“AzureCliCredential.get_token”从来没有 期待
我同意mycooyp的评论,你需要使用
azure.keyvault.secrets.aio
库来通过async
过程获取秘密。
您可以使用以下修改后的代码,使用Python SDK获取带有秘密名称的秘密值。
secret.py
from azure.identity.aio import AzureCliCredential
from azure.keyvault.secrets.aio import SecretClient
keyVaultName="xxxx"
KVUri = f"https://{keyVaultName}.vault.azure.net"
async def get_secret(name: str):
credential = AzureCliCredential()
async with SecretClient(vault_url=KVUri, credential=credential) as secret_client:
secret = await secret_client.get_secret(name)
return secret.value
main.py
import asyncio
import secret
async def print_hi(name):
print(f'Hi, {name}')
secret_value = await secret.get_secret("secret3")
print(f"Secret value is {secret_value}")
if __name__ == '__main__':
asyncio.run(print_hi('Azure'))
输出:
Hi, Azure
Secret value is Wxxxxxxx