我试图使用python设置代码来测试azure托管身份服务,并且使用c#我可以在本地测试代码。有什么方法可以在本地测试python代码吗?
在azure appservice中启用托管身份在azure SQL server中添加应用程序用户(appservice)并赋予权限。
这是我的示例python代码连接到azure SQL与托管身份
conn = db.connect('Driver={ODBC Driver 17 for SQL Server};'
'Server=testdb.database.windows.net;'
'Database=studentdb;'
'Authentication=ActiveDirectoryIntegrated;'
)
query = pd.read_sql_query('SELECT * FROM STUDENT', conn)
frame = pd.DataFrame(query)
return func.HttpResponse(frame.to_json(orient="index"), status_code=200)
谁能帮我在本地测试这段代码?因为我没有在azure上部署这些代码和测试的权限。
你可以使用这个Moto库来测试服务。你可以像运行python脚本一样运行Lambda函数。
if __name__ == "__main__":
event = []
context = []
lambda_handler(event, context)
如果你在虚拟环境中,那么这将确保lambda函数所需的所有依赖项都正确安装。
如果您从Microsoft查看此文档,那么您将发现-
托管身份不能用于验证本地运行的应用程序。您的应用程序必须部署到支持托管身份的Azure服务。
重要的是要理解Azure中的托管身份功能仅在部署应用程序服务时才相关。
作为一种选择,你可以使用Azure.Identity
库中的DefaultAzureCredential()
,它在本地运行和部署的web应用程序时都是兼容的。你可以从官方文档中了解更多关于Azure.Identity
的工作原理。
大多数时候,我们使用Azure MSI将Azure函数中的Azure SQL与python连接起来。我们可以使用Azure MSI获得Azure AD访问令牌,然后您可以使用令牌连接Azure SQL。
一旦你在Azure Web应用程序上启用了系统分配身份并赋予SQL权限,你就可以直接从python访问数据库,如下面的代码片段所示。
import pyodbc
from logzero import loggerwith pyodbc.connect(
"Driver=" + driver + ";Server=" + server + ";PORT=1433;Database=" + database
+ ";Authentication=ActiveDirectoryMsi",
) as conn:
logger.info("Successful connection to database")
with conn.cursor() as cursor:
cursor.execute(“select @@version")).fetchall()
以下是上面使用的参数:
司机- :我们应该使用:" {ODBC Driver 17 for SQL Server} " 服务器
- : sql server上是你的数据库
- :数据库的名称
- 认证:指定连接方法"ActiveDirectoryMsi">
从Azure Web App文档中检查SQL数据库访问与托管身份,并为Azure文档配置本地Python开发环境以获取更多信息。