Exemplo n.º 1
0
 public static Output <string> SignedBlobReadUrl(ZipBlob blob, Account account)
 {
     return(Output
            .All <string>(account.Name, account.PrimaryConnectionString, blob.StorageContainerName, blob.Name)
            .Apply(async values =>
     {
         var sas = await DataSource.GetAccountBlobContainerSAS(
             new GetAccountBlobContainerSASArgs
         {
             ConnectionString = values[1],
             ContainerName = values[2],
             Start = "2019-01-01",
             Expiry = "2100-01-01",
             Permissions = new GetAccountBlobContainerSASPermissions
             {
                 Read = true,
                 Write = false,
                 Delete = false,
                 List = false,
                 Add = false,
                 Create = false,
             },
         }
             );
         return $"https://{values[0]}.blob.core.windows.net/{values[2]}/{values[3]}{sas}";
     }));
 }
Exemplo n.º 2
0
    public MyStack()
    {
        var resourceGroup = new Azure.Core.ResourceGroup(Settings.ResourceGroupName);

        var storageAccount = new Azure.Storage.Account(Settings.StorageAccountName, new Azure.Storage.AccountArgs
        {
            ResourceGroupName      = resourceGroup.Name,
            AccountReplicationType = "LRS",
            AccountTier            = "Standard"
        });

        var plan = new Azure.AppService.Plan(Settings.ConsumptionPlanName, new Azure.AppService.PlanArgs
        {
            ResourceGroupName = resourceGroup.Name,
            Kind = "FunctionApp",
            Sku  = new Azure.AppService.Inputs.PlanSkuArgs
            {
                Tier = "Dynamic",
                Size = "Y1"
            }
        });

        var container = new Azure.Storage.Container(Settings.ZipsContainerName, new Azure.Storage.ContainerArgs
        {
            StorageAccountName  = storageAccount.Name,
            ContainerAccessType = "private"
        });

        var blob = new Azure.Storage.ZipBlob(Settings.ZipBlobName, new Azure.Storage.ZipBlobArgs
        {
            StorageAccountName   = storageAccount.Name,
            StorageContainerName = container.Name,
            Type    = "block",
            Content = new FileArchive("./functions")
        });

        var codeBlobUrl = Azure.Storage.SharedAccessSignature.SignedBlobReadUrl(blob, storageAccount);

        var app = new Azure.AppService.FunctionApp(Settings.FunctionAppName, new Azure.AppService.FunctionAppArgs
        {
            ResourceGroupName       = resourceGroup.Name,
            AppServicePlanId        = plan.Id,
            StorageConnectionString = storageAccount.PrimaryConnectionString,
            Version     = "~2",
            AppSettings =
            {
                { "FUNCTIONS_WORKER_RUNTIME",     "node"      },
                { "WEBSITE_NODE_DEFAULT_VERSION", "10.14.1"   },
                { "WEBSITE_RUN_FROM_PACKAGE",     codeBlobUrl }
            }
        });

        this.Endpoint = Output.Format($"https://{app.DefaultHostname}/api/hello");
    }
Exemplo n.º 3
0
    static Task <int> Main(string[] args)
    {
        return(Deployment.RunAsync(() =>
        {
            var config = new Config();
            var botName = config.Require("botName");

            var resourceGroup = new ResourceGroup("botservice-rg");

            var storageAccount = new Storage.Account("sa", new Storage.AccountArgs
            {
                ResourceGroupName = resourceGroup.Name,
                AccountReplicationType = "LRS",
                AccountTier = "Standard"
            });

            var appServicePlan = new Plan("asp", new PlanArgs
            {
                ResourceGroupName = resourceGroup.Name,
                Kind = "App",
                Sku = new PlanSkuArgs
                {
                    Tier = "Basic",
                    Size = "B1"
                },
            });

            var container = new Storage.Container("zips", new Storage.ContainerArgs
            {
                StorageAccountName = storageAccount.Name,
                ContainerAccessType = "private",
            });

            var blob = new Storage.ZipBlob("zip", new Storage.ZipBlobArgs
            {
                StorageAccountName = storageAccount.Name,
                StorageContainerName = container.Name,
                Type = "block",
                Content = new FileArchive("bot/publish")
            });

            var codeBlobUrl = SharedAccessSignature.SignedBlobReadUrl(blob, storageAccount);

            var appInsights = new Insights("ai", new InsightsArgs
            {
                ApplicationType = "web",
                ResourceGroupName = resourceGroup.Name
            });

            var appInsightApiKey = new ApiKey("ai", new ApiKeyArgs
            {
                ApplicationInsightsId = appInsights.Id,
                ReadPermissions = "api",
            });

            var luis = new Cognitive.Account("cs", new Cognitive.AccountArgs
            {
                Kind = "CognitiveServices", // includes LUIS
                ResourceGroupName = resourceGroup.Name,
                Sku = new AccountSkuArgs {
                    Name = "S0", Tier = "Standard"
                }
            });

            var msa = new Application("msapp", new ApplicationArgs
            {
                Oauth2AllowImplicitFlow = false,
                AvailableToOtherTenants = true,
                PublicClient = true
            });

            var pwd = new RandomPassword("password", new RandomPasswordArgs
            {
                Length = 16,
                MinNumeric = 1,
                MinSpecial = 1,
                MinUpper = 1,
                MinLower = 1
            });

            var msaSecret = new ApplicationPassword("msasecret", new ApplicationPasswordArgs
            {
                ApplicationObjectId = msa.ObjectId,
                EndDateRelative = "8640h",
                Value = pwd.Result
            });

            var app = new AppService("app", new AppServiceArgs
            {
                ResourceGroupName = resourceGroup.Name,
                AppServicePlanId = appServicePlan.Id,
                AppSettings =
                {
                    { "WEBSITE_RUN_FROM_PACKAGE", codeBlobUrl           },
                    { "MicrosoftAppId",           msa.ApplicationId     },
                    { "MicrosoftAppPassword",     msaSecret.Value       },
                    { "LuisApiKey",               luis.PrimaryAccessKey },
                },
                HttpsOnly = true
            });

            var bot = new WebApp(botName, new WebAppArgs
            {
                DisplayName = botName,
                MicrosoftAppId = msa.ApplicationId,
                ResourceGroupName = resourceGroup.Name,
                Sku = "F0",
                Location = "global",
                Endpoint = Output.Format($"https://{app.DefaultSiteHostname}/api/messages"),
                DeveloperAppInsightsApiKey = appInsightApiKey.Key,
                DeveloperAppInsightsApplicationId = appInsights.AppId,
                DeveloperAppInsightsKey = appInsights.InstrumentationKey
            });

            return new Dictionary <string, object>
            {
                { "Bot Endpoint", bot.Endpoint },
                { "MicrosoftAppId", msa.ApplicationId },
                { "MicrosoftAppPassword", msaSecret.Value }
            };
        }));
    }