private (Output <string> registryUsername, Output <string> registryPassword) GetRegistryLogin(Output <string> resourceGroupName, Output <string> registryName) { var credentials = Output.Tuple(resourceGroupName, registryName).Apply(values => ListRegistryCredentials.InvokeAsync(new ListRegistryCredentialsArgs { ResourceGroupName = values.Item1, RegistryName = values.Item2 })); var registryUsername = credentials.Apply(c => c.Username ?? ""); var registryPassword = credentials.Apply(c => Output.CreateSecret(c.Passwords.First().Value ?? "")); return(registryUsername, registryPassword); }
public MyStack() { var resourceGroup = new ResourceGroup("appservice-docker-rg"); var plan = new AppServicePlan("linux-apps", new AppServicePlanArgs { ResourceGroupName = resourceGroup.Name, Kind = "Linux", Reserved = true, Sku = new SkuDescriptionArgs { Name = "B1", Tier = "Basic" } }); // // Scenario 1: deploying an image from Docker Hub. // The example uses a HelloWorld application written in Go. // Image: https://hub.docker.com/r/microsoft/azure-appservices-go-quickstart/ // var imageInDockerHub = "microsoft/azure-appservices-go-quickstart"; var helloApp = new WebApp("hello-app", new WebAppArgs { ResourceGroupName = resourceGroup.Name, ServerFarmId = plan.Id, SiteConfig = new SiteConfigArgs { AppSettings = new[] { new NameValuePairArgs { Name = "WEBSITES_ENABLE_APP_SERVICE_STORAGE", Value = "false" } }, AlwaysOn = true, LinuxFxVersion = $"DOCKER|{imageInDockerHub}" }, HttpsOnly = true }); this.HelloEndpoint = Output.Format($"https://{helloApp.DefaultHostName}/hello"); // // Scenario 2: deploying a custom image from Azure Container Registry. // var customImage = "node-app"; var registry = new Registry("myregistry", new RegistryArgs { ResourceGroupName = resourceGroup.Name, Sku = new SkuArgs { Name = "Basic" }, AdminUserEnabled = true }); var credentials = Output.Tuple(resourceGroup.Name, registry.Name).Apply(values => ListRegistryCredentials.InvokeAsync(new ListRegistryCredentialsArgs { ResourceGroupName = values.Item1, RegistryName = values.Item2 })); var adminUsername = credentials.Apply(c => c.Username ?? ""); var adminPassword = credentials.Apply(c => Output.CreateSecret(c.Passwords.First().Value ?? "")); var myImage = new Image(customImage, new ImageArgs { ImageName = Output.Format($"{registry.LoginServer}/{customImage}:v1.0.0"), Build = new DockerBuild { Context = $"./{customImage}" }, Registry = new ImageRegistry { Server = registry.LoginServer, Username = adminUsername, Password = adminPassword }, }); var getStartedApp = new WebApp("get-started", new WebAppArgs { ResourceGroupName = resourceGroup.Name, ServerFarmId = plan.Id, SiteConfig = new SiteConfigArgs { AppSettings = new[] { new NameValuePairArgs { Name = "WEBSITES_ENABLE_APP_SERVICE_STORAGE", Value = "false" }, new NameValuePairArgs { Name = "DOCKER_REGISTRY_SERVER_URL", Value = Output.Format($"https://{registry.LoginServer}") }, new NameValuePairArgs { Name = "DOCKER_REGISTRY_SERVER_USERNAME", Value = adminUsername }, new NameValuePairArgs { Name = "DOCKER_REGISTRY_SERVER_PASSWORD", Value = adminPassword }, new NameValuePairArgs { Name = "WEBSITES_PORT", Value = "80" // Our custom image exposes port 80. Adjust for your app as needed. } }, AlwaysOn = true, LinuxFxVersion = Output.Format($"DOCKER|{myImage.ImageName}") }, HttpsOnly = true }); this.GetStartedEndpoint = Output.Format($"https://{getStartedApp.DefaultHostName}"); }
public MyStack() { var resourceGroup = new ResourceGroup("rg"); var workspace = new Workspace("loganalytics", new WorkspaceArgs { ResourceGroupName = resourceGroup.Name, Sku = new WorkspaceSkuArgs { Name = "PerGB2018" }, RetentionInDays = 30, }); var workspaceSharedKeys = Output.Tuple(resourceGroup.Name, workspace.Name).Apply(items => GetSharedKeys.InvokeAsync(new GetSharedKeysArgs { ResourceGroupName = items.Item1, WorkspaceName = items.Item2, })); var kubeEnv = new KubeEnvironment("env", new KubeEnvironmentArgs { ResourceGroupName = resourceGroup.Name, Type = "Managed", AppLogsConfiguration = new AppLogsConfigurationArgs { Destination = "log-analytics", LogAnalyticsConfiguration = new LogAnalyticsConfigurationArgs { CustomerId = workspace.CustomerId, SharedKey = workspaceSharedKeys.Apply(r => r.PrimarySharedKey) } } }); var registry = new Registry("registry", new RegistryArgs { ResourceGroupName = resourceGroup.Name, Sku = new SkuArgs { Name = "Basic" }, AdminUserEnabled = true }); var credentials = Output.Tuple(resourceGroup.Name, registry.Name).Apply(items => ListRegistryCredentials.InvokeAsync(new ListRegistryCredentialsArgs { ResourceGroupName = items.Item1, RegistryName = items.Item2 })); var adminUsername = credentials.Apply(credentials => credentials.Username); var adminPassword = credentials.Apply(credentials => credentials.Passwords[0].Value); var customImage = "node-app"; var myImage = new Image(customImage, new ImageArgs { ImageName = Output.Format($"{registry.LoginServer}/{customImage}:v1.0.0"), Build = new DockerBuild { Context = $"./{customImage}" }, Registry = new ImageRegistry { Server = registry.LoginServer, Username = adminUsername, Password = adminPassword } }); var containerApp = new ContainerApp("app", new ContainerAppArgs { ResourceGroupName = resourceGroup.Name, KubeEnvironmentId = kubeEnv.Id, Configuration = new ConfigurationArgs { Ingress = new IngressArgs { External = true, TargetPort = 80 }, Registries = { new RegistryCredentialsArgs { Server = registry.LoginServer, Username = adminUsername, PasswordSecretRef = "pwd", } }, Secrets = { new SecretArgs { Name = "pwd", Value = adminPassword } }, }, Template = new TemplateArgs { Containers = { new ContainerArgs { Name = "myapp", Image = myImage.ImageName, } } } }); this.Url = Output.Format($"https://{containerApp.Configuration.Apply(c => c.Ingress).Apply(i => i.Fqdn)}"); }