GitHub Copilot Customization Explained for Beginners: Instructions, Prompt Files, Skills, Agents, and Hooks Introduction If you've recently started using GitHub Copilot, you've probably come across terms like Instructions , Prompt Files , Skills , Agents , and Hooks . At first glance, they all seem to do the same thing—they tell Copilot what to do. So why does GitHub have five different customization features? The answer is simple: each feature solves a different problem. Think of GitHub Copilot as a new developer joining your team. On their first day, you don't just hand them code. You explain your coding standards, give them reusable templates, teach them specialized knowledge, assign them a role, and automate repetitive tasks. That's exactly how GitHub Copilot customization works. In this article, you'll learn what each feature does, when to use it, and how they all work together. By the end, you'll know which feature to start with and which ones can wait un...
Azure WebJob using .NET Core
- Get link
- X
- Other Apps
Background
WebJobs is a feature of Azure App Service that enables you to run a program or script in the same
context as a web app, API app, or mobile app. There is no additional cost to
use WebJobs if you are running under the existing web app.
WebJobs is not something new to Azure or .NET , there’s even
a default Azure WebJob template in VS 2017 but for .NET framework. No VS template
exists for Azure WebJob in .NET Core but that doesn’t stop us using .NET Core
for WebJob. Creating WebJob in .NET Core is not hard but need to incorporate certain
tweaks using HostBuilder and WebJobs SDK version 3.x. I have tried to incorporate
end to end process with sample code snippet for Timer Trigger using .NET Core.
.NET Core with WebJobs SDK versions 3.x
Version 3.x adds support for .NET Core.
Visual Studio tooling for .NET Core (3.x) projects differs from
tooling for .NET Framework (2.x) projects. With 2.x you
can still implement in .NET Core but with 3.x it simplifies and we can get some
core benefits of .NET Core like DI, IHost, logging etc. In version 2.x, you use
the JobHost object where uou create a host instance in
your code and write code to customize its behavior.
Version 2.x
static void Main(string[] args)
{
var _storageConn = ConfigurationManager
.ConnectionStrings["MyStorageConnection"].ConnectionString;
JobHostConfiguration config = new
JobHostConfiguration();
config.StorageConnectionString =
_storageConn;
//config.DashboardConnectionString
= _dashboardConn;
JobHost host = new JobHost(config);
host.RunAndBlock();
}
Version
3.x
static void Main()
{
var builder = new HostBuilder();
builder.UseEnvironment("development");
builder.ConfigureWebJobs(b =>
{
b.AddAzureStorageCoreServices();
});
var host = builder.Build();
using (host)
{
host.Run();
}
}
Project setup in Visual Studio 2019
To start development of an Azure WebJob, you need to create
a new .NET Core Console Application.
To make this project ready for Azure WebJob implemenation we
need to install few of Nuget packages.
Install-Package Microsoft.Azure.WebJobs
Install-Package Microsoft.Azure.WebJobs.Extensions
Install-Package Microsoft.Azure.WebJobs.Extensions.Storage
Install-Package Microsoft.Extensions.Hosting
Add appsettings.json file with basic configuration of the
Webjob and file should contain connection string of the storage account of use
{
"ConnectionStrings":
{
"AzureWebJobsStorage":
"<<Azure Storage Account connection string>>"
}
}
Startup changes
As part of 3.x SDK we need to initialise the WebJob host
system and some basic configuration. As part of demo we are demonstrating TimerTrigger
for which we have built in extension method named “AddTimers” which needs to be
added as part of ConfigureWebJobs. ConfigureServices is where we configure the services we
want our application to run, registering services with the ServiceCollection.
Registration is performed using extension methods on the ServiceCollection and
once complete, enabling DI in our application.
public static async Task Main()
{
var builder = new
HostBuilder()
.UseEnvironment("Development")
.ConfigureWebJobs(b =>
{
b.AddAzureStorageCoreServices()
.AddTimers();
})
.ConfigureAppConfiguration(config =>
{
config.AddJsonFile("appsettings.json", optional: true);
config.AddEnvironmentVariables();
})
.ConfigureLogging((context,
logging) =>
{
logging.AddConfiguration(context.Configuration.GetSection("Logging"));
logging.AddConsole();
})
.ConfigureServices((context,
services) =>
{
//If you want to read configuration value from Appsetting json
file.
var configuration = context.Configuration;
// add some sample services to demonstrate job class DI
services.AddScoped<IDemo, Demo>();
})
.UseConsoleLifetime();
var host = builder.Build();
using (host)
{
await host.RunAsync();
}
}
Triggers
Timer trigger function snippet can be found below
public class Functions
{
private readonly IDemo _demo;
public Functions(IDemo demo)
{
_demo = demo;
}
public async Task
TimerTrigger([TimerTrigger("0 */5 * * * *", RunOnStartup = true)] TimerInfo timerInfo, CancellationToken cancellationToken)
{
//Some logic
goes here...
_demo.SomeAction();
}
}
If we see in the trigger function makes use of DI (Demo
object) injected as part of constructor.
Popular posts from this blog
Tidy up - Unused Project and Nuget package reference using Visual Studio 2019
If you are a Developer/Architect using Visual Studio as IDE for your development activities, this blog post will be of your interest. During the Ignite 2021 conference, Microsoft released Visual Studio 2019 v16.9 and v16.10 Preview 1. As part of version 16.10 Preview 1, one of the cool features they introduced is to "Remove Unused References..." for any Projects and Nuget packages that are not in use. At the time of writing this blog post, we have Visual Studio Version 16.10.0 (official release) which includes this new feature. As part of development, we generally get carried away and introduce new Nuget package references to your project and add new references to your Projects. By the end of development, you will not be 100% sure which are not being referenced and unused which means you will leave those unused project references in your application. Now you might be wondering what's the big deal in it since it doesn't harm. The advantage of removing unused project r...
Azure Front Door vs Azure Traffic Manager?
In my previous blog post, we looked in detail Azure Front Door (AFD) . In this blog post, let's compare Azure Front Door (AFD) with another popular Azure service named Azure Traffic Manager (ATM). Prior to AFD most of the applications made use of ATM in their architecture now with AFD being available it's good to understand in which scenarios these individual services are ideal. Azure Front Door (AFD) Azure Front Door Service (AFD) a scalable and secure entry point for the fast delivery of your global applications. Azure Front Door allows you to transform your global (multi-region) applications into robust, high-performance applications, APIs, and content. Azure Traffic Manager (ATM) Azure Traffic Manager is a DNS-based traffic load balancer for geographically distributed Datacenters. Traffic Manager uses DNS to direct traffic to endpoint based on the traffic routing method and health of the endpoints. Similarities between AFD and ATM Both Azure Services support Multi-...
Authenticate Azure Functions - API Keys
In this blog post, we will see one of the ways to secure your Azure Functions using API keys. Security plays a key role as part of SDLC (Software Development Life Cycle) doesn't matter whether it's exposed to the client/public or even if it's internal. There are multiple ways to secure your Azure Functions like API Keys, Certificate, API Mgmt, App Service Authentication, etc. If you are new to the Cloud and Azure Functions but want to make a start with minimal effort and less setup of Infrastructure, then API Keys is the ideal choice. Azure Functions allows you to secure HTTP-triggered functions by API access key in the request. As part of creating new Azure Functions, we can select the Authorization Level enum value. If we set the Authorisation level to Anonymous, no security applied which means no authentication applied for the endpoint. Authorization Level - Function By setting the Authorisation level to Function each Azure Functions require a specific API key to Au...
Comments
Post a Comment