Compartilhar via


Azure Function – Gerar Token SAS

Imagine vocês usando o Cloud Storage para armazenar os dados não estruturados (arquivos) da sua aplicação, e pretende fazer upload para o Azure direto da a sua aplicação Client, além de ser mais rápido lhe faria economizar recursos de processamento, pois os bytes do arquivo não precisaria ser trafegados até a sua aplicação para que em seguida a sua aplicação utilize o Azure Storage SDK para enviar o conteúdo para a sua conta de armazenamento, porém, deixar a sua conta de armazenamento aberto direto para o público também não é recomendado. Neste cenário o Serverless pode ser um grande aliado, a seguir o passo-a-passo irá lhe guiar para criar uma Função que gerar Token  SAS  (Assinaturas de Acesso Compartilhado) de acesso temporário que lhe permite fazer o Upload direto para o Azure Storage, toda vez que for requisitado a função irá gerar um token único e descartável, segue os passo:

  1. Acesso o http://portal.azure.com/ (se você ainda não tem conta crie uma veja aqui), após autenticar, pesquise por Funções, Seleciona a opção “Aplicativo de Função”, será aberta uma janela ao lado em seguida clique no botão “Criar”.https://raw.githubusercontent.com/Ulili/artigos/master/PublicacaoArtigos/Nuvens/Serverless/Azure-SASTokenGenerator/2-%20Criar.jpg
  2. Será aberta Formulário de criação da Função com os seguintes campos:
    1. Nome do aplicativo: nome único no azure para a hospedagem da sua aplicação, será complementado com o sufixo .azurewebsites.net para compor a URL base das sua aplicação que ficará assim https://[Nome do aplicativo].azurewebsites.net  
    2. Assinatura: sua assinatura de cobrança/Centro de custo;
    3. Grupo de recursos: é uma coleção de recursos que compartilha o mesmo ciclo de vida, permissões e políticas.
    4. Plano de hospedagem: atualmente são dois planos que a Microsoft disponibilizou são eles: O plano de Consumo permite-lhe pagar por execução e alocar dinamicamente os recursos baseados no carregamento de seu aplicativo e Os Planos do Serviço de Aplicativo permitem-lhe usar uma alocação de capacidade predefinida com escala e custos previsíveis.
    5. Localização: zona (datacenter) do Azure onde será hospedada.
    6. Armazenamento: É necessária uma conta de armazenamento (Cloud Storage) que oferece suporte a Blob, Fila e Armazenamento de Tabela. Ao usar um plano de Consumo, as definições de função são armazenadas no Armazenamento de Arquivos.
    7. Application Insights: ajuda você a detectar e diagnosticar problemas de qualidade em seus aplicativos, além de permitir a você entender o que os usuários realmente fazem com o seu aplicativo.                                           https://raw.githubusercontent.com/Ulili/artigos/master/PublicacaoArtigos/Nuvens/Serverless/Azure-SASTokenGenerator/3%20-%20Formulario.jpg
  3. Após preencher o formulário com as suas opções, será criada a sua aplicação Serverless, depois de alguns minutos estará pronto para uso, para o primeiro contato com a sua aplicação, clique nela ao abrir, crlica no + a direita da opção Functions, será aberta uma janela com orientações para criar a primeira Função, selecione uma linguagem para criar uma espécie de “Hello World” conforme mostra a imagem a baixo.https://raw.githubusercontent.com/Ulili/artigos/master/PublicacaoArtigos/Nuvens/Serverless/Azure-SASTokenGenerator/4%20-%20CriarFuncao.jpg
  4. Após criar a sua primeira Função, acesse-o clicando nele para visualizar e editar o código direto no portal, nesta demonstração escolhi C# + Http foi criada uma função que aguarda uma requisição podendo ter parâmetro “name” e verifica se o parâmetro foi enviado caso sim é concatenado ao “Hello” e enviada na resposta da requisição.                                                                     https://raw.githubusercontent.com/Ulili/artigos/master/PublicacaoArtigos/Nuvens/Serverless/Azure-SASTokenGenerator/5%20-%20PrimeiroCodigo.jpg
  5. Já com a nossa primeira função “Hello World” no ar, vamos criar a função que gere o Token de acesso aos recursos SaaS. Clique de novo no + a direita do Functions, aparecerá uma tela com os templates de Functions com as opções de Linguagem e cenários, o Azure disponibilizou dezenas de templates para lhe facilitar na construção de Functions para vários cenários e diferentes linguagens, para o nosso passo-a-passo vamos usar um para gerar Token SAS. Selecione cenário “samples”, em seguida rola o scroll até encontrar a opção “SAS Token Generator”https://raw.githubusercontent.com/Ulili/artigos/master/PublicacaoArtigos/Nuvens/Serverless/Azure-SASTokenGenerator/6%20-%20CriarSample.jpg
  6. Após selecionar o seu template, será aberta um formulário à baixo com as seguintes opções:
    1. Name your function: nome da sua função, será usada para compor a Endpoint da função.
    2. Authorization level: com as opções de nível de acesso podendo ser Function, Admin e Anonymous. As duas primeiras você poderá gerar key de acesso que força a autorização das requisições que dorneceram a key gerada já o Anonymous deixa o acesso aberto para público em geral.
    3. Storage account connection: conexão que será usada para conectar ao Storage.                                https://raw.githubusercontent.com/Ulili/artigos/master/PublicacaoArtigos/Nuvens/Serverless/Azure-SASTokenGenerator/7%20-%20SasToken.jpg
  7. Sua função já está pronta para ser usada, mas, antes de começar a usar podemos dar uma olhada no código, de repente alterar mensagem de erro ou efetuar alguma customização. O nome que você deu a sua função aparecerá no menu de arvore das funções a esquerda, selecione-o e veja o código conforme mostra a imagem.                                                                                                     https://raw.githubusercontent.com/Ulili/artigos/master/PublicacaoArtigos/Nuvens/Serverless/Azure-SASTokenGenerator/9%20-%20SasTokenComplete.jpg
  8. Com a função pronta para o uso, vamos configurar a Key de acesso, Clique na seta (>) ao lado do nome da sua função para expandir, em seguida selecione a opção “Manage” será aberta a tela conforme mostra a imagem, onde você poderá criar novas key ou copiar a key pré-configurada.https://raw.githubusercontent.com/Ulili/artigos/master/PublicacaoArtigos/Nuvens/Serverless/Azure-SASTokenGenerator/10%20-%20GenerateKey.jpg
  9. Com tudo pronto vamos fazer o uso da nossa Função, para usar a função o portal disponibiliza a opção que gere a URL de requisição já com as Key de Acesso, para isso: clique de novo no nome da função, selecione a opção “Get function URL”                 https://raw.githubusercontent.com/Ulili/artigos/master/PublicacaoArtigos/Nuvens/Serverless/Azure-SASTokenGenerator/11-%20GenerateURL.jpghttps://raw.githubusercontent.com/Ulili/artigos/master/PublicacaoArtigos/Nuvens/Serverless/Azure-SASTokenGenerator/11-%20GenerateURL-b.jpg
  10. Já com a URL podemos usá-lo para fazer a requisição para a nossa Função, mas, antes disso podemos fazer um teste da função no próprio portal, onde será gerada um request de teste que lhe servirá de exemplo, você pode posteriormente mudar as opções do request para ajustar a sua necessidade, basicamente você informa os parâmetros ContainerName e Permission, nome do container de Storage que você pretende acessar e a permissão desejada podendo cominar Read,Write,Create separados por vírgula.                                                                                 https://raw.githubusercontent.com/Ulili/artigos/master/PublicacaoArtigos/Nuvens/Serverless/Azure-SASTokenGenerator/12%20-%20ExecutarFuncao.jpghttps://raw.githubusercontent.com/Ulili/artigos/master/PublicacaoArtigos/Nuvens/Serverless/Azure-SASTokenGenerator/12%20-%20ExecutarFuncao-b.jpg
  11. Com tudo pronto podemos fazer as requisições externas usando Postman para obter o token conforme mostra a imagem, o resultado da requisição é um token que poderá ser usada para consumir recursos do Azure Storage, neste artigo aqui exploraremos como usar o token gerado para fazer Upload para o Azure Storage.                                                                                            https://raw.githubusercontent.com/Ulili/artigos/master/PublicacaoArtigos/Nuvens/Serverless/Azure-SASTokenGenerator/13%20-%20RequisicaoExterna.jpg
  12. A função já está pronto para o uso, é possível explorar mais opções como permissão, CORS, e etc. Para uma boa pratica vamos acessar o console associar um repositório GIT e fazer o commit para versionar a nossa função. Para isso clique no nome da função em seguida selecione a tab “Platform features” e clique a opção console.                                                                                                                      https://raw.githubusercontent.com/Ulili/artigos/master/PublicacaoArtigos/Nuvens/Serverless/Azure-SASTokenGenerator/14%20-PlatformFeatures.jpg
  13. O Azure já disponibiliza o console com o GIT, faça o uso dos comandos GIT para versionar o seu código no seu repositório.  https://raw.githubusercontent.com/Ulili/artigos/master/PublicacaoArtigos/Nuvens/Serverless/Azure-SASTokenGenerator/15%20-%20ConsoleGit.jpg

Explore as possibilidades que o Serverless nos oferece e faça o bom proveito desta tecnologia maravilhosa. Segue o link do Github.com onde você pode encontrar todos os códigos deste passo-a-passo e as imagens.
 

Código fonte: https://github.com/Ulili/FuncoesServerLess

Imagens: https://github.com/Ulili/artigos/tree/master/PublicacaoArtigos/Nuvens/Serverless/Azure-SASTokenGenerator