Palestra Puccamp – Cloud Computing Fundamentals

Olá pessoal, tudo bem?

No último sabádo tive o prazer de palestrar para o curso de Pós Graduação de Industria 4.0 na Puc Campinas.

Agradeço ao Leandro Xastre pela convite e oportunidade e ao Sinésio Knupfer pela indicação.

Os slides utilizados na minha palestra, sobre Cloud Computing Fundamentals você confere logo abaixo:

Muito obrigado e até a próxima.

Conteúdo Gratuito Certificação AZ-900

Olá pessoal tudo bem?

Vou compilar nesse post uma série de vídeos publicados no canal Coding Night a respeito da Certificação AZ-900, incluindo um simulado completo para a prova.

Mesmo que você não tenha interesse em tirar a provar o contéudo em si da uma visão bastante abrangente sobre Cloud e também sobre o Azure.

Playslist do Conteúdo: Conceitos Básicos de Cloud Computing e do Azure + Certificação AZ-900 – YouTube

Simulado: Simulado Online Gratuito AZ-900 e com certificado: teste seus conhecimentos sobre Azure e cloud! – YouTube

Espero que tenham gostado e até a próxima.

Obrigado!

Azure Free Books

Olá pessoal,

Nesse post vou listar alguns livros gratuitos sobre Azure para download.

O primeiro deles é o The Developer’s Guide to Microsoft Azure que se encontra gratuito nesse link.

O segundo deles é o Azure for Architects que se encontra gratuito nesse link.

O terceiro deles é o Azure Serverless Computing Cookbook que se encontra gratuito nesse link.

O quarto deles na verdade é um bundle sobre Kubernetes. Nesse link encontram-se 3 livros: Hands-On Kubernetes on Azure, Designing Distributed Systems e The Azure Cloud Native Architecture Mapbook.

E por último, porém não menos importante, Hands-On Linux Administration on Azure que pode ser encontrado nesse link.

Esperam que tenham gostado e até a próxima.

Obrigado.

SOLID Principles

Olá pessoal, tudo bem?

Nesse post vou colocar alguns exemplos (todos escritos em C#) dos princípios SOLID do Uncle Bob.

S – Single Responsibility Principle

Em breve…

O – Open Closed Principle

Você deve ser capaz de estender um comportamento de uma classe sem a necessidade de modificá-lo.

Exemplo prático

L – Liskov Substitution Principle

As classes derivadas devem ser substituíveis por suas classes bases.

Exemplo prático

I – Interface Segregation Principle

Crie interfaces granulares a específicas para os seus clientes.

Exemplo prático

D – Dependency Inversion Principle

Abstrações não devem depender de detalhes. Os detalhes devem depender das abstrações.

Exemplo prático

Espero que tenham gostado e até a próxima.

Obrigado!

Azure Architecture Icons

Olá pessoal, tudo bem?

Quantas vezes nós não deparamos com a dificuldade em encontrar os ícones corretos para montar um diagrama de Arquitetura do Azure?

A Microsoft lançou recentemente um pacote de ícones do Azure para download em SVG através desse link.

Deixo aqui também o convite para acessar o Azure Architecture Center, aqui você pode encontrar muito conteúdo legal sobre Azure.

Espero que tenha gostado da dica e até a próxima.

Obrigado!

Azure Labs – Workshop Online Gratuito: End-to-end Development Microsoft Cloud

Olá pessoal, tudo bem?

Na última quarta-feira dia 21 participei do Azure Labs. Nesse workshop, primeiramente, demonstrei uma visão geral do poder do Azure para o desenvolvedor de software e logo na sequência falei sobre todos os serviços do Azure Storage e como eles podem lhe ajudar no seu dia-a-dia de desenvolvedor. Por fim, também atuei de moderador no chat tirando dúvidas relacionadas ao Azure.

Vale mencionar que tivemos um público excepcional nesse workshop chegando a quase 300 pessoas simultâneas.

E para quem tiver interesse no código utilizado sobre Azure Storage, ele pode ser acessado através desse link.

Abaixo algumas imagens do workshop:

Azure Overview

Azure Storage

Moderador do Chat

JunDevelopers Summit 2020

Olá pessoal,

Nesse sábado 12/09 participei do JunDevelopers Summit 2020, evento em que palestrei sobre a Construção de uma aplicação escalável e de baixo custo no Azure utilizando Azure Storage e Azure Functions.

Para que quiser baixar o código fonte utilizado na palestra, é só clicar nesse link.

Os slides utilizados na minha palestra, você confere logo abaixo:

E o vídeo aqui:

Deixo aqui meus agradecimentos a todos que puderam participar.

Até a próxima!

Redimensionando imagens com Azure Functions e Azure Storage

Olá pessoal, tudo bem? Nesse post vamos aprender como fazer um redimensionamento de imagens altamente escalável e muito simples utilizando Azure Functions e Azure Storage.

Primeiramente vamos criar uma conta de Storage no Azure e na sequência 2 containers no serviço de Blob. O primeiro container vai se chamar images (onde nossa Function vai monitorar), e o segundo vai se chamar thumbnails (onde salvaremos a nossa imagem redimensionada).

Dica: Caso esteja utilizando o sistema operacional Windows, você pode utilizar o Azure Storage Emulator para simular o serviço de Storage do Azure.

Logo depois de criarmos o serviço de Storage (seja no Azure ou simulando localmente através do Azure Storage Emulator), vamos abrir o Terminal (Ctrl + ‘) do Visual Studio Code, e digitarmos:

func init

Note que vão aparecer 4 opções de seleção, nesse caso, selecione a opção “dotnet”, e então, espere que termine a criação do nosso Function App.

Logo depois, nosso próximo passo será o de criar nossa Azure Function, e para isso, utilize o comando abaixo:

func new

Agora, dentre as diversas opções de Azure Functions, vamos escolher o tipo BlobTrigger e daremos a ela o nome de ImageResizerTrigger.

Seguindo, abra o arquivo .csproj do seu projeto e adicione o package da SixLabors.ImageSharp nele, igual a linha abaixo:

<PackageReference Include="SixLabors.ImageSharp" Version="1.0.0-rc0001" />

Na sequência o Visual Studio Code pedirá para que você faça um Restore na aplicação.

Assim que o Restore finalizar, abra o arquivo ImageResizerTrigger.cs e substitua-o com o código abaixo:

public static void Run([BlobTrigger("images/{name}", Connection = "AzureWebJobsStorage")]Stream myBlob, string name, 
            [Blob("thumbnails/{name}", FileAccess.Write)] Stream outputBlob, ILogger log)
        {
            log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes");

            using (var image = Image.Load(myBlob))
            {
                var resizeOptions = new ResizeOptions
                {
                    Size = new Size(640, 480),
                    Compand = true,
                    Mode = ResizeMode.Max
                };

                image.Mutate(ctx => ctx.Resize(resizeOptions));
                image.Save(outputBlob, new JpegEncoder { Quality = 80 });
            }
        }

Dessa forma, note no nosso código, que a nossa Azure Function estará sempre olhando para o container images, e seu “output” será sempre no container thumbnails.

Importante: A propriedade Connection esta “setada” com o valor: AzureWebJobsStorage. Esse valor na verdade esta contido no arquivo local.settings.json e você deverá colocar a string de conexão do seu Storage no mesmo.

Assim, faça o upload de uma imagem no container images e note que a imagem será automaticamente redimensionada e salva no container thumbnails, conforme nós queríamos.

Por fim, caso tenha interesse em mais conteúdos relacionados a Azure Functions e Azure Storage, convido você a dar uma olhada na série: Criando um CRUD Serverless com Azure Functions.

Espero que tenham gostado e até a próxima. Obrigado!

Criando um CRUD Serverless com Azure Functions – Parte 4

Olá pessoal, tudo bem? Neste post derradeiro sobre como criar um CRUD Serverless com Azure Functions, vamos aprender como orquestrar nossas API’s utilizando o Azure API Management. O intuito desse post não é explicar em detalhes esse serviço, mas sim em focar como podemos deixar nossas API’s mais seguras.

Primeiramente, acesse o https://portal.azure.com e clique em Create a Resource, e logo na sequência na barra de busca pesquise por API Management.

Preencha as informações necessárias e aguarde a criação do serviço terminar (isso leva em média 20 minutos). Agora nosso próximo passo será importar nossas API’s e para isso na barra esquerda clique em API’s e em seguida selecione Function App. No modal que aparecer clique em Browse, depois em Function App e então selecione a aplicação Serverless que publicamos na parte 3 do artigo, e após o preenchimento dos dados clique em Create.

Observe que você pode criar um sufixo para a chamada das API’s editando o campo API URL suffix. Outro ponto interessante é que ele nos mostra todas as nossas API’s (HttpTriggers) e quais desejamos importar (por padrão todas vem selecionadas).

Dessa forma, terminada a importação, vamos adicionar um “Produto” para a nossa API. Por padrão temos duas opções: Starter e Unlimited, tendo a possibilidade criarmos um customizado também caso necessário.

Após selecionado o produto, vamos clicar em Developer portal e logo abaixo do nome de login (provavelmente ADMINISTRATOR), selecione a opção Profile. Note que clicando nessa opção apareceram os dois produtos disponíveis (Starter e Unlimited) como duas Keys para cada um. Essas keys serão fundamentais para que nossas API’s funcionem pois sem elas, se tentarmos acessa-las aparecerá o seguinte erro:

{
  "statusCode": 401,
  "message": "Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription."
}

Então nosso próximo passo será autorizar a chamada das nossas API’s e para isso será necessário passar um Header da requisição chamado Ocp-Apim-Subscription-Key e como valor a Key do produto em questão. Note que se você fizer a chamada de alguma API ela vai funcionar perfeitamente.

Agora vamos implementar algumas Policies para nossa aplicação. Habilitaremos o CORS, na sequência as chamadas para um determinado range de IP’s e por fim restringir um numero abusivo de chamadas as nossas API’s em um pequeno espaço de tempo.

Para isso selecione nosso conjunto de API’s e clique em base nas opções de Inbound processing e em seguida adicione o código abaixo para habilitar o CORS (lembre-se que todo o código deve ser colocado dentro da tag de inbound):

<cors>
    <allowed-origins>
        <origin>{SUA_URL}</origin>
    </allowed-origins>
    <allowed-methods>
        <method>*</method>
    </allowed-methods>
    <allowed-headers>
        <header>*</header>
    </allowed-headers>
    <expose-headers>
        <header>*</header>
    </expose-headers>
</cors>

Agora vamos liberar apenas um range de IP:

<ip-filter action="allow">
    <address-range from="<IP_INICIO>" to="<IP_FIM>" />
</ip-filter>

Por último, com o código abaixo, restringiremos por 15 segundos o acesso as nossas API’s caso alguém acesse alguma delas 3 vezes seguidas em sequência.

<rate-limit-by-key calls="3" renewal-period="15" counter-key="@(context.Request.IpAddress)" increment-condition="@(context.Response.StatusCode == 200)" />

Bom pessoal e assim finalizamos nossa série Criando um CRUD Serverless com Azure Functions.

E para finalizar deixo aqui um convite.

Que tal aprender mais sobre Docker, Kubernetes e a implementação de soluções baseadas em containers utilizando o Microsoft Azure, em um workshop que acontecerá durante um sábado todo (dia 04/04) em São Paulo Capital e implementando um case na prática?

Acesse então o link a seguir para efetuar sua inscrição (já incluso camiseta, emissão de certificado e almoço para os participantes) com o desconto: http://bit.ly/anp-docker-blog-ericson

Espero que tenham gostado e até a próxima.

Obrigado!