微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 Pulumi Azure Native 将 WebAppAzureStorageAccounts 连接到 WebApp

如何解决如何使用 Pulumi Azure Native 将 WebAppAzureStorageAccounts 连接到 WebApp

我正在尝试使用以下屏幕自动化可以通过 Azure 门户完成的操作。

enter image description here

我已经定义了一个 WebApp一个 WebAppAzureStorageAccounts

尝试构建 WebAppAzureStorageAccounts 时出现以下错误

error: parent resource does not exist for resource

我认为这是因为我不知道如何将 WebAppAzureStorageAccountsWebApp 相关联。

我期待在 WebApp SiteConfigArgs 上有一个名为 StorageAccountsPathMappings 之类的属性

Pulumi 版本:2.23.1
语言 C#
Pulumi.AzureNative:0.7.1

--- 更新---

一些代码片段...我包装了 Pulumi 类,这样我就可以使用带有一些可重用认值的构建器模式。所以不是你的常态。

  public class WebAppAzureStorageAccountsComponent
  {

    private readonly string ComponentName;
    public WebAppAzureStorageAccounts? WebAppAzureStorageAccounts;
    public WebAppAzureStorageAccountsArgs WebAppAzureStorageAccountsArgs;
    private bool Built;
    public CustomresourceOptions? CustomresourceOptions { get; set; }

    public WebAppAzureStorageAccountsComponent
    (
      string aComponentName,string aShareName,AzureStorageInfovalueArgs aAzureStorageInfovalueArgs,ResourceGroup aResourceGroup,StorageAccountComponent aStorageAccountComponent
    )
    {
      ComponentName = aComponentName;
      WebAppAzureStorageAccountsArgs =
        new WebAppAzureStorageAccountsArgs
        {
          Name = aComponentName,ResourceGroupName = aResourceGroup.Name,Properties = new InputMap<AzureStorageInfovalueArgs>
          {
            {
              aShareName,aAzureStorageInfovalueArgs
            }
          }
        };
    }

    [MemberNotNull(nameof(WebAppAzureStorageAccounts))]
    public WebAppAzureStorageAccounts Build()
    {
      if (Built) throw new MultipleBuildException(nameof(WebAppAzureStorageAccountsComponent));
      Built = true;

      WebAppAzureStorageAccounts =
        new WebAppAzureStorageAccounts
        (
          ComponentName,WebAppAzureStorageAccountsArgs,CustomresourceOptions
        );

      return WebAppAzureStorageAccounts;
    }
  }

以及来自 WebAppComponent 的片段

    public WebAppComponent
    (
      string aName,AppServicePlan aAppServicePlan,string aEnvironment,RegistryComponent? aRegistryComponent = null,Input<string>? aimageName = null
    )
    {
      ComponentName = aName;
      RegistryComponent = aRegistryComponent;
      Environment = aEnvironment;

      WebAppArgsBuilder =
        new WebAppArgsBuilder
        (
          ComponentName,aResourceGroup.Name
        )
        {
          Kind = "app,linux",Location = aResourceGroup.Location,ServerFarmId = aAppServicePlan.Id,};

      List<NameValuePairArgs> appSettings = BuildAppSettings();
      WebAppArgsBuilder.SiteConfigArgsBuilder.WithAppSettings(appSettings);

      if (aimageName != null)
      {
        WebAppArgsBuilder.SiteConfigArgsBuilder.LinuxFxVersion = Output.Format($"DOCKER|{aimageName}");
        WebAppArgsBuilder.Kind = "app,linux,container";
      }
    }

然后是这些组件的使用片段


      CredentialApiWebAppComponent =
        new WebAppComponent
        (
          $"credential-{AspNetCoreEnvironment}-{Brand}",AppServicePlan,ResourceGroup,AspNetCoreEnvironment,RegistryComponent,credentialImageName
        );

      CredentialApiWebAppComponent.Build();
    ...
      var TailsAzureStorageInfovalueArgs = new AzureStorageInfovalueArgs
      {
        AccessKey = StorageAccountComponent.PrimaryStorageKey!,AccountName = StorageAccountComponent.StorageAccount!.Name!,MountPath = "/tails",ShareName = "tails",Type = AzureStorageType.AzureFiles
      };

      var webAppAzureStorageAccountsComponent =
        new WebAppAzureStorageAccountsComponent
        (
          aComponentName: "TailsMapping",aShareName: "tails",aAzureStorageInfovalueArgs: TailsAzureStorageInfovalueArgs,aResourceGroup: ResourceGroup,aStorageAccountComponent: StorageAccountComponent
        );

      webAppAzureStorageAccountsComponent.Build();

WebAppAzureStorageAccounts 和 WebApp 之间没有任何引用,我在网上找不到示例。

解决方法

如果我正确阅读了您的代码,您将为 WebAppAzureStorageAccounts 资源分配一个任意名称。相反,您应该将 Name 属性分配给您的网络应用程序(父资源)的名称。这不是 Azure API 的最佳命名选择,但评论说 Name of the app.

这是应该可行的想法:

var webApp = new WebApp("myapp",new ...);
var storage = new WebAppAzureStorageAccounts("accounts",new WebAppAzureStorageAccountsArgs
    {
        Name = webApp.Name,// ...
    });

此模式类似于 Web Apps 的所有子资源,如 this example 所示。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。