Scheijgrond.com

Ik Google mijzelf

Update Juni 2024

API connection probleem en powershell script om het op te lossen

Door diverse redenen waaronder het "spontaan" wijzigen van het domein van de URL van een API connection in Azure hadden we de behoefte om het Top Level domain van de api connection URL toe te voegen aan een private DNS zone. Dit wilden we vanuit de devops pipelines laten doen en om dat te regelen hadden we een mooi stukje powershell toegevoegd aan de pipeline. Je hebt wel een windows vm nodig voor deze build stappen.

- task: AzureCLI@2 
 displayName: 'Retrieve API Connection URL and set in zone' 
 inputs: 
    azureSubscription: ${{parameters.serviceConnection}} 
    scriptType: pscore 
    scriptLocation: inlineScript 
    #Script explained 
    # 1. Get the API connection 
    # 2. Get the connectionRunTimeURL of the api connection 
   # 3. Create an URI of the URL to retrieve the host 
    # 4. Retrieve the actual final URL --> The A Record of the API connection 
    # 5. Get the Host the Url is pointing to. ASSUMPTION this is in a private DNS zone that is present in the resource group. 
    # 6. Get the Top Level Domain to verify 
    # 7. Get the actual name to add as cname 
    # 8. create the record in the private dns zone. 
    inlineScript: | 
        $response= az rest --method get --uri https://management.azure.com/subscriptions/${{parameters.subscriptionId}}/resourceGroups/${{parameters.resourceGroupNameOfConnection}}/providers/Microsoft.Web/connections/${{parameters.apiConnectionName}}?api-version=2018-07-01-preview    ; 
        $connectionRunTimeUrl= ($response | ConvertFrom-Json).properties.connectionRuntimeUrl; 
        $uri = New-object System.Uri($connectionRunTimeUrl); 
        $apiconnectionUrl = Resolve-DnsName $uri.Host | where-object {$_.QueryType -eq 'A'} | Select-Object -Expand Name; 
        $firstHost = Resolve-DnsName $uri.Host | where-object {$_.QueryType -eq 'CNAME' -and $_.Name -eq $uri.Host} | Select-Object -Expand NameHost; 
        $firstHostTLD = $firstHost.Split('.')[-2..-1] -join '.'; 
        $firstHostCname = $firstHost.Split('.')[-99..-3] -join '.';  
        az network private-dns record-set cname set-record --resource-group ${{parameters.resourceGroupNameOfDNSZone}} --zone-name ${firstHostTLD} --record-set-name ${firstHostCname} --cname ${apiconnectionUrl} 

Bicep connectionstrings

SAS tokens voor storage containers ophalen via bicep. Dit hadden we nodig om grote wsdls in te kunnen laden in API management.

resource storageAccount 'Microsoft.Storage/storageAccounts@2021-04-01' existing = { 
name: storageAccountName 
} 

resource blobContainer 'Microsoft.Storage/storageAccounts/blobServices/containers@2021-04-01' = { 
name: '${storageAccount.name}/default/${storageContainer}' 
dependsOn: [ 
    storageAccount 
] 
} 
output myContainerUploadSAS string = storageAccount.listServiceSAS('2021-04-01',{ 
canonicalizedResource: '/blob/${storageAccount.name}/${storageContainer}' 
signedResource: 'c' 
signedProtocol: 'https' 
signedPermission: 'rwdl' 
signedServices: 'b' 
signedExpiry: add1Hour 
}).serviceSasToken 

Hergebruiken in een module

module container './wsdl-container.bicep' = { 
name: '${storageAccountName}-${storageContainer}' 
params:{ 
    storageContainer: storageContainer 
    storageAccountName: storageAccountName 
} 
} 
// This url needs to be reachable for APIM a SAS key is generated. 
var urlToContainer = 'https://${storageAccountName}.blob.core.windows.net/${storageContainer}/{somefile}?${container.outputs.myContainerUploadSAS}' 

Tracked properties toevoegen aan Logic App Workbook

Microsoft heeft de logging en telemetry verbeterd voor logic apps. Hier moet wel de host.json file voor aangepast worden, maar dan wordt het mogelijk voor nog betere logging en zelfs het opnieuw uitvoeren van gefaalde runs. Het was alleen nog maar een kwestie van tracked properties toevoegen aan de workbook en werkwijze die hier staat beschreven op de (Azure Integratie blog)[https://techcommunity.microsoft.com/t5/azure-integration-services-blog/a-workbook-for-logic-app-standard-run-history-and-resubmitting/ba-p/4121919] en de informatie werd ineens bruikbaar voor functioneel beheer en niet alleen maar voor de techneuten.

SAP en Encoding of talen

We integreren vaak met SAP en soms krijgen we geen antwoord terug en soms krijgen we een antwoord terug met rare tekens. Dat kan verschillende oorzaken hebben. Allereerst als we geen antwoord terug krijgen kan dat met de taalinstelling te maken hebben. Vanuit een andere applicatie of browser kan een API aanroep een taal meekrijgen. Als dat niet gebeurd wordt vaak Engels als default genomen. Als SAP dan niet ingesteld staat om een Engels document terug te geven krijg je geen antwoord. Dus moet soms een taal geforceerd worden in de aanroep op te zorgen dat het werkt.

Als er onbegrijpelijke teksten terug komen dan kan het zijn dat er een verkeerd conttent-type (compressie) terug gestuurd wordt. Dat kan zijn dat Azure API management SAP niet begrijpt. Dan kan het zetten van het geaccepteerde contenttype op GZIP een oplossing zijn.