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.

SFTP support for Azure Blob Storage - Azure Storage
Blob storage now supports the SSH File Transfer Protocol (SFTP).

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.

Azure Storage Blobs Pricing | Microsoft Azure
See pricing details for Azure Blob storage, an enterprise-grade cloud storage service for data storage. No upfront costs. Pay as you go. Try for FREE.

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.

Connect to Azure Blob Storage using SFTP - Azure Storage
Learn how to enable SFTP support for Azure Blob Storage so that you can directly connect to your Azure Storage account by using an SFTP client.

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.

  1. Definimos dois horários para executar o Logic App todos os dias, em um horário habilitamos e no outro desabilitamos.
  2. Definimos o valor da variável baseado no horário da execução.
  3. 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!

💡
Podemos te ajudar com uma revisão 100% gratuita do seu ambiente cloud.
Share this post