问题描述
我正在尝试使用以下屏幕自动化可以通过 Azure 门户完成的操作。
我已经定义了一个 WebApp 和一个 WebAppAzureStorageAccounts
尝试构建 WebAppAzureStorageAccounts
时出现以下错误:
error: parent resource does not exist for resource
我认为这是因为我不知道如何将 WebAppAzureStorageAccounts
与 WebApp
相关联。
我期待在 WebApp SiteConfigArgs 上有一个名为 StorageAccounts
或 PathMappings
之类的属性
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 所示。