如何在Azure Functions中包含依赖文件并从GitHub导入资源
本地打包依赖文件的操作步骤
这是稳定性最高、最适合入门用户的方案,无额外配置门槛:
- 项目文件放置:在本地PowerShell Azure Function项目根目录,新建名为
Dependencies的文件夹,把需要引用的额外.ps1脚本、AES密钥文件全部放入该文件夹,参考项目结构如下:
你的Function项目根目录/ ├── 你的函数名文件夹/ │ └── run.ps1 # 函数执行入口脚本 ├── Dependencies/ │ ├── externalscript.ps1 # 需要导入的外部PowerShell脚本 │ └── aeskey.key # AES加密用的密钥文件 ├── host.json ├── local.settings.json └── requirements.psd1
- 脚本内引用写法:不要写本地电脑的硬编码路径,用PowerShell内置的
$PSScriptRoot变量获取当前脚本所在目录,拼接相对路径即可,在run.ps1中添加如下引用代码:
# 导入外部PowerShell脚本 . "$PSScriptRoot/../Dependencies/externalscript.ps1" # 读取AES密钥内容 $aesKeyValue = Get-Content "$PSScriptRoot/../Dependencies/aeskey.key" -Encoding Byte
- 发布注意:用VS Code或者Azure Functions Core Tools发布项目时,目录下所有文件会自动打包上传到Azure,不需要额外配置,依赖不会丢失。
- 安全提示:AES密钥属于敏感凭证,不建议直接明文放在代码包里,正式环境可以把密钥存到Function的加密应用配置,或者对接密钥管理服务读取,降低泄露风险。
从GitHub动态拉取依赖的实现方式
该方案完全支持,不需要把依赖文件放进项目包,但稳定性弱于本地打包方案,更适合测试场景使用:
- 前置要求:存放依赖的GitHub文件要开启公开访问权限;如果是私有仓库,需要提前生成有仓库读取权限的访问令牌,把令牌存在Function的应用配置里,禁止硬编码在脚本中。
- 实现逻辑:函数启动时,先把GitHub上的依赖文件下载到Function实例的临时目录,再加载引用即可,参考代码如下:
# 拼接临时目录下的文件存放路径 $tempScriptPath = Join-Path $env:TEMP "externalscript.ps1" $tempAesPath = Join-Path $env:TEMP "aeskey.key" # 下载GitHub上的依赖文件,把Uri替换成你自己的GitHub文件原始访问地址 Invoke-WebRequest -Uri "你的GitHub脚本文件原始访问地址" -OutFile $tempScriptPath Invoke-WebRequest -Uri "你的GitHub AES密钥文件原始访问地址" -OutFile $tempAesPath # 加载脚本、读取密钥 . $tempScriptPath $aesKeyValue = Get-Content $tempAesPath -Encoding Byte
- 如果拉取私有仓库的文件,给请求添加认证头即可:
$requestHeaders = @{ Authorization = "Bearer $env:GITHUB_ACCESS_TOKEN" } Invoke-WebRequest -Uri "你的私有仓库文件地址" -Headers $requestHeaders -OutFile $tempScriptPath
- 注意事项:该方式每次函数冷启动都会发起网络请求拉取文件,会增加函数启动耗时,如果网络访问波动会直接导致函数运行失败,生产环境不推荐使用。
内容的提问来源于stack exchange,提问作者Tushar Bandi
相关产品推荐
相关产品推荐

