home / tils / til

Menu
  • GraphQL API

til: azure_all-traffic-to-subdomain.md

This data as json

path topic title url body html shot created created_utc updated updated_utc shot_hash slug
azure_all-traffic-to-subdomain.md azure Writing an Azure Function that serves all traffic to a subdomain https://github.com/simonw/til/blob/main/azure/all-traffic-to-subdomain.md [Azure Functions](https://docs.microsoft.com/en-us/azure/azure-functions/) default to serving traffic from a path like `/api/FunctionName` - for example `https://your-subdomain.azurewebsites.net/api/MyFunction`. If you want to serve an entire website through a single function (e.g. using [Datasette](https://datasette.io/)) you need that function to we called for any traffic to that subdomain. Here's how to do that - to capture all traffic to any path under `https://your-subdomain.azurewebsites.net/`. First add the following section to your `host.json` file: ``` "extensions": { "http": { "routePrefix": "" } } ``` Then add `"route": "{*route}"` to the `function.json` file for the function that you would like to serve all traffic. Mine ended up looking like this: ```json { "scriptFile": "__init__.py", "bindings": [ { "authLevel": "Anonymous", "type": "httpTrigger", "direction": "in", "name": "req", "route": "{*route}", "methods": [ "get", "post" ] }, { "type": "http", "direction": "out", "name": "$return" } ] } ``` See https://github.com/simonw/azure-functions-datasette for an example that uses this pattern. <p><a href="https://docs.microsoft.com/en-us/azure/azure-functions/" rel="nofollow">Azure Functions</a> default to serving traffic from a path like <code>/api/FunctionName</code> - for example <code>https://your-subdomain.azurewebsites.net/api/MyFunction</code>.</p> <p>If you want to serve an entire website through a single function (e.g. using <a href="https://datasette.io/" rel="nofollow">Datasette</a>) you need that function to we called for any traffic to that subdomain.</p> <p>Here's how to do that - to capture all traffic to any path under <code>https://your-subdomain.azurewebsites.net/</code>.</p> <p>First add the following section to your <code>host.json</code> file:</p> <pre><code> "extensions": { "http": { "routePrefix": "" } } </code></pre> <p>Then add <code>"route": "{*route}"</code> to the <code>function.json</code> file for the function that you would like to serve all traffic. Mine ended up looking like this:</p> <div class="highlight highlight-source-json"><pre>{ <span class="pl-s"><span class="pl-pds">"</span>scriptFile<span class="pl-pds">"</span></span>: <span class="pl-s"><span class="pl-pds">"</span>__init__.py<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span>bindings<span class="pl-pds">"</span></span>: [ { <span class="pl-s"><span class="pl-pds">"</span>authLevel<span class="pl-pds">"</span></span>: <span class="pl-s"><span class="pl-pds">"</span>Anonymous<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span>type<span class="pl-pds">"</span></span>: <span class="pl-s"><span class="pl-pds">"</span>httpTrigger<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span>direction<span class="pl-pds">"</span></span>: <span class="pl-s"><span class="pl-pds">"</span>in<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span>name<span class="pl-pds">"</span></span>: <span class="pl-s"><span class="pl-pds">"</span>req<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span>route<span class="pl-pds">"</span></span>: <span class="pl-s"><span class="pl-pds">"</span>{*route}<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span>methods<span class="pl-pds">"</span></span>: [ <span class="pl-s"><span class="pl-pds">"</span>get<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span>post<span class="pl-pds">"</span></span> ] }, { <span class="pl-s"><span class="pl-pds">"</span>type<span class="pl-pds">"</span></span>: <span class="pl-s"><span class="pl-pds">"</span>http<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span>direction<span class="pl-pds">"</span></span>: <span class="pl-s"><span class="pl-pds">"</span>out<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span>name<span class="pl-pds">"</span></span>: <span class="pl-s"><span class="pl-pds">"</span>$return<span class="pl-pds">"</span></span> } ] }</pre></div> <p>See <a href="https://github.com/simonw/azure-functions-datasette">https://github.com/simonw/azure-functions-datasette</a> for an example that uses this pattern.</p> <Binary: 62,309 bytes> 2021-03-27T20:49:56-07:00 2021-03-28T03:49:56+00:00 2021-03-27T20:49:56-07:00 2021-03-28T03:49:56+00:00 70d46c9c26f38e5813d281c2b7c56c1d all-traffic-to-subdomain
Powered by Datasette · How this site works · Code of conduct