c# - 通过 Azure Function App 部署 Terraform 配置
问题描述
我正在尝试使用 Azure 函数部署 Terraform 配置。我为实现这一目标所做的是制作一个将 terraform.exe 作为进程执行的函数应用程序,即让 .exe 与函数本身位于同一目录中,将其作为进程调用,然后执行初始化、计划和应用阶段作为单独的过程。
这是代码:
using System;
using System.Threading;
using System.Diagnostics;
using System.ComponentModel;
using System.Net;
public static void Run(TimerInfo myTimer, ILogger log)
{
log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
string currentpath = "C:\\home\\site\\wwwroot\\TimerTrigger1\\terraform.exe";
Process proc = new Process();
proc.StartInfo.CreateNoWindow = false;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.FileName = currentpath;
proc.StartInfo.Arguments = "-chdir=C:\\home\\site\\wwwroot\\TimerTrigger1 init -no-color";
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.RedirectStandardError = true;
proc.Start();
log.LogInformation(proc.StandardOutput.ReadToEnd());
proc.WaitForExit();
proc.StartInfo.Arguments = "-chdir=C:\\home\\site\\wwwroot\\TimerTrigger1 plan -no-color";
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.RedirectStandardError = true;
proc.Start();
log.LogInformation(proc.StandardOutput.ReadToEnd());
proc.WaitForExit();
proc.StartInfo.Arguments = "-chdir=C:\\home\\site\\wwwroot\\TimerTrigger1 apply -auto-approve -no-color";
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.RedirectStandardError = true;
proc.Start();
log.LogInformation(proc.StandardOutput.ReadToEnd());
proc.WaitForExit();
}
不幸的是,我在运行它时遇到了一些问题。初始化阶段工作正常,但计划阶段是它挂起的地方。我最初考虑将状态文件存储在此处概述的远程文件中:https ://docs.microsoft.com/en-us/azure/developer/terraform/store-state-in-azure-storage 但是当我存储远程状态文件,它是空的。然后我决定首先将状态文件存储在同一目录中,即本地状态文件,但我注意到它会在每次运行时消失。
锁定文件和 .terraform 插件目录创建得很好,但状态文件是罪魁祸首,因此没有创建配置文件中的任何资源。
如果我没有清楚地解释事情,我深表歉意,我对此很陌生,所以很困惑。对此有任何帮助将不胜感激。
解决方案
推荐阅读
- python - 如何使用数组查找向量化函数
- hybris - 查询hyris中所有已发布的促销活动
- homebrew - 尝试使用 brew 安装 java11 时出错
- sql - SQL 子查询根据另一列的最大平均值显示一列的分组值
- kubernetes - Helm:values.yaml 中的变量
- react-native - Android 依赖 'com.google.android.gms:play-services-base' 的编译(16.0.1)和运行时(17.0.0)类路径有不同的版本
- android - 在高阶函数中使用 lambda 时不能删除重复项
- react-native - 由于被禁止的服务器,无法获取 GCM 令牌
- python - 使用 Python docx 在 Word 中创建拼音指南/“Ruby 文本”?
- python - python datefinder 的 find_dates 方法未返回预期结果