AWS: Realizei os cursos de Sales Acredditation, que abrange conceitos básicos da nuvem, seu valor comercial e como lidar com objeções de clientes. Também realizei o curso de Cloud Economics, que lista os benefícios econômicos que os cliente tem com o uso da Nuvem. Também realizei as 12 tarefas do AWS Cloud Quest: Cloud Practitioner, que demonstram de forma prática como usar alguns dos diversos serviços da AWS.
AWS S3: Aprendi como armazenar e manipular arquivos em um bucket do S3, e como ele pode ser utilizado com fonte ou destino de vários serviços da AWS.
AWS Athena: Aprendi como criar um banco de dados e tabelas e populá-los com dados salvos no S3. Além de salvar os resultados das queries tambem no S3.
AWS Lambda: Aprendi como criar funções lambda e como utilizar layers para utilizar bibliotecas personalizadas, a partir de um arquivo zip salvo no S3.
boto3: Aprendi como conectar e manipular os serviços AWS com a bibliteca boto3, diretamente de um script Python.
O objetivo do exercício é explorar as capacidades do AWS S3, serviço de armazenamento da AWS. O serviço armazenará um site estático, que disponibiliza um arquivo csv para download.
O objetivo do exercício é utilizar o serviço para criar um banco de dados, que terá uma tabela para armazenar os dados do csv salvo no bucket do primeiro exercício, e executar uma consulta.
O objetivo do exercício é utilizar o serviço para criar uma função que processa os dados do csv salvo no bucket, utilizando uma layer de uma imagem docker criada localmente e armazenada em um bucket do S3.
O objetivo do exercício é excluir os dados relacionados aos exercícios anteriores, para não gerar custos desnecessários.
No serviço S3, criei um bucket chamado site1.com, na região us-east-1.
Acessei o bucket criado, navegando até a opção Static website hosting na aba propriedades e cliquei em editar. Cliquei na opção para ativar o hosting, e defini o nome do documento raiz do site (index.html), e o de erro (error.html).
Após salvar as configurações, copiei o endpoint do site e testei no navegador.
Acessei o bucket, navegando até a opção Block public access na aba permissões e cliquei em editar. Desativei a opção de bloqueio de acesso público e cliquei em salvar.
Na aba permissões do bucket, naveguei até Bucket Policy e cliquei em editar. Colei o código disponibilizado e modifiquei com o nome do bucket, e cliquei em salvar.
Baixei os arquivos index.html e nomes.csv disponibilizados, salvando o arquivo csv dentro de uma pasta chamada dados, e fiz o upload de ambos para o bucket.
Criei um arquivo de erros, com o mesmo nome que atribuí na etapa 2 (erros.html), e fiz o upload para o bucket.
Para testar o site, copiei novamente o endereço do endpoint da etapa 3, desta vez com o site acessível.
Clicando no link para baixar o csv, o arquivo é baixado
Primeiramente, chequei se o arquivo csv do exercício 1 está no bucket. Também analisei o arquivo e os seus dados.
Criei uma pasta dentro do bucket chamada queries, para armazenar os resultados das consultas.
Acessei o serviço Athena e cliquei em configurações. Adicionei o caminho para a pasta queries no bucket do S3.
Acessei o editor de consultas do Athena, e executei o código para criar um banco de dados chamado meubanco. Depois, selecionei o banco criado na aba "Database" à esquerda.
Para criar uma tabela, utilizei o seguinte comando.
CREATE EXTERNAL TABLE IF NOT EXISTS meubanco.nomes (
nome STRING,
sexo STRING,
total INT,
ano INT
) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES (
'serialization.format' = ',',
'field.delim' = ','
)
LOCATION 's3://site1.com/dados/'A tabela possui os mesmos campos do csv salvo no bucket. A cláusula LOCATION busca o arquivo no bucket e preenche a tabela com os dados.
Para testar os dados, utilizei a consulta disponibilizada.
select nome from nomedobanco.nomedatabela where ano = 1999 order by total limit 15;O resultado da consulta fica salvo como um csv na pasta queries do bucket. Acessando, o resultado é esse:
🔗CSV
A consulta proposta pede para listar os 3 nomes mais usados em cada década desde o 1950 até hoje. O código é o seguinte:
SELECT decada, nome, sexo, "total na decada"
FROM (
SELECT
(ano - ano % 10) AS decada,
nome,
sexo,
SUM(total) AS "total na decada",
ROW_NUMBER() OVER (PARTITION BY (ano - ano % 10) ORDER BY SUM(total) DESC) AS rank
FROM meubanco.nomes
WHERE ano >= 1950
GROUP BY nome, sexo, (ano - ano % 10)
) ranked
WHERE rank <= 3
ORDER BY decada, rank;Acessando a pasta queries no bucket, o resultado é esse:
🔗CSV
Acessei o serviço Lambda, e criei uma nova função chamada funcao1, especificando o Python 3.9 em "Runtime".
Acessei o editor de funções e alterei o código pelo que foi disponibilizado, para acessar o S3. Depos cliquei em Deploy para atualizar a função.
Criei um teste chamado teste1 para testar a função, obtendo o erro relacionado ao Lambda não possuir a biblioteca Pandas.
Para criar uma layer e utilizar a biblioteca Pandas no Lambda, criei uma nova pasta local e um Dockerfile com o código disponibilizado, que utiliza uma imagem do linux específica da Amazon, instala o Python na versão 3.9 e comprime os dados. Executei o comando docker build -t amazonlinuxpython39 . para criar a imagem.
Executei docker run -it amazonlinuxpython39 bash para acessar o shell do container, e executei os comandos disponibilizados para criar a pasta python e a estrutura de diretórios.
Depois, executei pip3 install pandas -t . para baixar as bibliotecas e suas dependências para a pasta python criada anteriormente.
Depois, executei zip -r minha-camada-pandas.zip . para compactar os arquivos. Depois, listei os containers para descobrir o id, e o copiei para a máquina local.
Fiz o upload do arquivo compactado para um bucket no S3.
No serviço Lambda, criei a layer chamada PandasLayer, passando a URL de objeto do arquivo do S3. Especifiquei a arquitetura e a versão 3.9 do Python.
Na função Lambda, adicionei a Layer criada.
Para a função funcionar, precisei aumentar o tamanho da memória e o tempo limite da Lambda nas configurações. Aumentei a memória para 512 MB e o tempo limite para 10 segundos.
Com tudo configurado, testei novamente a função, dessa vez tendo o resultado esperado.
Excluí a função Lambda criada, e o Log Group e a Role dela.
Excluí a tabela e o banco de dados criados no Athena.
Excluí o arquivo zip criado para o exercício Lambda, e também o bucket em que estava armazenado.
Excluí os objetos relacionados ao site estático do Lab AWS S3, e também a pasta queries do Lab AWS Athena. Depois excluí o bucket onde os arquivos estavam armazenados.















































