首页 > 解决方案 > 通过 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 插件目录创建得很好,但状态文件是罪魁祸首,因此没有创建配置文件中的任何资源。

函数应用工作目录

如果我没有清楚地解释事情,我深表歉意,我对此很陌生,所以很困惑。对此有任何帮助将不胜感激。

标签: c#azureterraformterraform-provider-azureazure-function-app

解决方案


推荐阅读