private static DataFactoryManagementClient GetDataFactoryClient(DataFactoryClientConfiguration configuration) { var context = new AuthenticationContext($"https://login.windows.net/{configuration.TenantId}"); var clientCredential = new ClientCredential(configuration.ClientId, configuration.ClientSecret); var result = context.AcquireTokenAsync("https://management.azure.com/", clientCredential).Result; ServiceClientCredentials credentials = new TokenCredentials(result.AccessToken); return(new DataFactoryManagementClient(credentials) { SubscriptionId = configuration.SubscriptionId }); }
private static bool TriggerDataFactoryReleasePipeline(DataFactoryClientConfiguration configuration, ILogger logger, PublishReleaseDataMessage message) { var parameters = BuildPipelineParameters(message); var client = GetDataFactoryClient(configuration); var runResponse = client.Pipelines.CreateRunWithHttpMessagesAsync(configuration.ResourceGroupName, configuration.DataFactoryName, configuration.PipelineName, parameters: parameters).Result; logger.LogInformation( $"Pipeline status code: {runResponse.Response.StatusCode}, run Id: {runResponse.Body.RunId}"); return(runResponse.Response.IsSuccessStatusCode); }
public async Task PublishReleaseData( [QueueTrigger(PublishReleaseDataQueue)] PublishReleaseDataMessage message, ExecutionContext executionContext, ILogger logger) { logger.LogInformation("{0} triggered: {1}", executionContext.FunctionName, message); try { // Azure Data Factory isn't emulated for running in a local environment // It also has an overhead to run which isn't necessary if there are no data files var runDataFactory = !EnvironmentUtils.IsLocalEnvironment() && await ReleaseHasAnyDataFiles(message.ReleaseId); if (runDataFactory) { var clientConfiguration = new DataFactoryClientConfiguration(_configuration); var success = TriggerDataFactoryReleasePipeline(clientConfiguration, logger, message); await UpdateStage(message, success?Started : Failed); } else { await SimulateDataFactoryReleasePipeline(message); await UpdateStage(message, Complete); } } catch (Exception e) { logger.LogError(e, "Exception occured while executing {0}", executionContext.FunctionName); await UpdateStage(message, Failed, new ReleasePublishingStatusLogMessage($"Exception in data stage: {e.Message}")); } logger.LogInformation("{0} completed", executionContext.FunctionName); }
// ReSharper disable once UnusedMember.Global public async Task PublishReleaseData( [QueueTrigger(PublishReleaseDataQueue)] PublishReleaseDataMessage message, ExecutionContext executionContext, ILogger logger) { logger.LogInformation($"{executionContext.FunctionName} triggered: {message}"); if (PublisherUtils.IsDevelopment()) { // Skip the ADF Pipeline if running locally // If the Release is immediate then trigger publishing the content // This usually happens when the ADF Pipeline is complete if (await _releaseStatusService.IsImmediate(message.ReleaseId, message.ReleaseStatusId)) { await _queueService.QueuePublishReleaseContentMessageAsync(message.ReleaseId, message.ReleaseStatusId); } await UpdateStage(message, Complete); } else { try { var clientConfiguration = new DataFactoryClientConfiguration(_configuration); var success = TriggerDataFactoryReleasePipeline(clientConfiguration, logger, message); await UpdateStage(message, success?Started : Failed); } catch (Exception e) { logger.LogError(e, $"Exception occured while executing {executionContext.FunctionName}"); await UpdateStage(message, Failed, new ReleaseStatusLogMessage($"Exception in data stage: {e.Message}")); } } logger.LogInformation($"{executionContext.FunctionName} completed"); }