O suporte a SSH File Transfer Protocol (SFTP) tem sido muito utilizado desde o seu lançamento. Aqui na AzureBrasil temos alguns clientes que utilizam o modelo para simplificar o envio de arquivos dos clientes para o sistema.
O problema é que ha alguns meses o recurso passou a ser cobrado e existe até uma recomendação na documentação oficial para só deixar o SFTP habilitado quando estiver em uso, na data que escrevo o artigo (2023-07-20) o preço é de $0.30/hora aproximadamente ~$219/mês considerando a média atual do dólar de R$5,00 temos aproximadamente ~R$1.095,00 reais pelo simples fato de deixarmos o recurso habilitado 24/7.
Automatizando o SFTP com Logic Apps
Na própria documentação temos exemplos de como fazer o enable/disable viar portal, powershell e azure cli.
Como eu não queria criar uma automação só para executar o script eu decidi fazer com logic apps.
Consultando a documentação tudo o que precisamos fazer é um PATCH request para a propriedade isSftpEnabled que conseguimos controlar o comportamento.
- Definimos dois horários para executar o Logic App todos os dias, em um horário habilitamos e no outro desabilitamos.
- Definimos o valor da variável baseado no horário da execução.
- Executamos a chamada HTTP com autenticação via Managed Identity.
Ao invés de mostrar o passo a passo vou deixar o código do Logic App como referência, basta copiar e colar no Logic App code view e customizar as variáveis necessárias.
{
"definition": {
"$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
"actions": {
"HTTP": {
"inputs": {
"authentication": {
"audience": "https://management.azure.com",
"type": "ManagedServiceIdentity"
},
"body": {
"properties": {
"isSftpEnabled": "@variables('operation')"
}
},
"method": "PATCH",
"uri": "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{storageAccountName}?api-version=2022-09-01"
},
"runAfter": {
"Initialize_variable": [
"Succeeded"
]
},
"type": "Http"
},
"Initialize_variable": {
"inputs": {
"variables": [
{
"name": "operation",
"type": "boolean",
"value": "@if(equals(variables('xpto'), '08'), false, true)"
}
]
},
"runAfter": {
"Initialize_variable_2": [
"Succeeded"
]
},
"type": "InitializeVariable"
},
"Initialize_variable_2": {
"inputs": {
"variables": [
{
"name": "xpto",
"type": "string",
"value": "@{convertFromUtc(utcNow(), 'E. South America Standard Time', 'HH')}"
}
]
},
"runAfter": {},
"type": "InitializeVariable"
}
},
"contentVersion": "1.0.0.0",
"outputs": {},
"parameters": {},
"triggers": {
"Recurrence": {
"evaluatedRecurrence": {
"frequency": "Day",
"interval": 1,
"schedule": {
"hours": [
"6",
"8"
],
"minutes": [
30
]
},
"timeZone": "E. South America Standard Time"
},
"recurrence": {
"frequency": "Day",
"interval": 1,
"schedule": {
"hours": [
"6",
"8"
],
"minutes": [
30
]
},
"timeZone": "E. South America Standard Time"
},
"type": "Recurrence"
}
}
},
"parameters": {}
}
Pronto, com o Logic App criado podemos habilitar/desabilitar o sFTP quando desejarmos.
[]s e até a próxima!