# AWS guide
## RStudio Server na VM
- Acesse: https://www.louisaslett.com/RStudio_AMI/
- Clique no link referente à South America, São Paulo (Ou no mesmo local onde os dados são salvos)
Isso irá abrir uma página para criação de uma nova instância EC2 pré configurada para utilizar o RStudio server.
- Defina o nome da máquina
- Escolha as configurações de processador e memória (Recomendado: r5ad.large ou c5ad.2xlarge)
- Em par de chaves, escolha ou crie um novo para se conectar via SSH no futuro.
- Em configurações de rede, deixe marcada a opção de tráfego por SSH.
- Marque também as opções de acesso HTTP e HTTPS
- Por fim, clique em Executar instância.
O último passo acima gera uma página com o aviso "Execução da instância iniciada com êxito (<link>)". Clique no link para ir ao console de gerenciamento da instância. Aguarde sair do status "Inicializando" antes de prosseguir.
- Clique no id da instância, isto irá levar à uma aba com mais informações.
- Copie o Endereço IPv4 público e cole no navegador.
- Faça o login
- Usuário: rstudio
- Senha: ID da instância
- Siga os passos apresentados no Welcome.R para definir uma nova senha
- Lembre-se de desligar (Interromper) a máquina quando terminar.
## Shiny server
O procedimento acima também instala o shiny server na VM. Para utilização basta salvar os aplicativos shiny no diretório `Home/ShinyApps` e acessá-los como o seguiente exemplo:
- http://177.71.194.171/shiny/rstudio/sample-apps/hello/
Onde `sample-apps/hello` está em `Home/ShinyApps`
### Conexão com dados do S3
Biblioteca: aws.s3
Configure o acesso usando as chaves, conforme o código abaixo.
```
Sys.setenv("AWS_ACCESS_KEY_ID" = "mykey",
"AWS_SECRET_ACCESS_KEY" = mysecretkey")
```
Para gerar estas chaves vá em Security credentials> Criar chave de acesso.
#### Leitura e Escrita na S3 pela VM usando o R
As principais funções são ```s3read_using``` e ```s3write_using```
**Exemplo**
```
library(aws.s3)
library(tidyverse)
Sys.setenv("AWS_ACCESS_KEY_ID" = "AKIAXF3SHUYFOEEP5YXQ",
"AWS_SECRET_ACCESS_KEY" = "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")
bucket_exists(
bucket = "s3://caio1910/",
region = "sa-east-1"
)
df = s3read_using(FUN=read.csv,
object="datasets/iris/Iris.csv",
sep = ",",
header=T,
bucket = "s3://caio1910/",
opts = list(region = "sa-east-1"))
df %>% head()
```
#### Intalação do Python e Pyspark
- Instale a versão mais recente do python ```sudo apt install python3```
- Siga os seguintes passos para configurar um ambiente virtual: https://support.posit.co/hc/en-us/articles/360023654474-Installing-and-Configuring-Python-with-RStudio
- Antes de instalar qualquer pacote é preciso ativar o enviroment: ```source my_env/bin/activate```
- Vá ao diretório do projeto usando ```cd``` e rode o comando do intem acima no terminal.
- Instale o pyspark: ```pip install pyspark```
- Teste executando:
```
from pyspark.sql import SparkSession
spark = SparkSession.builder.config("spark.driver.memory", "5g").getOrCreate()
spark.sparkContext._conf.getAll()
```
#### Leitura e Escrita na S3 pela VM usando o Pyspark
https://davidlindelof.com/reading-s3-data-from-a-local-pyspark-session/
# Glue
## Data Catalog
- Copie a URI do S3 da pasta que deseja catalogar (Obs: Deixe apenas arquivos da mesma tabela na pasta)
- Acesse o AWS Glue pelo buscador > Crawlers
- Create crawler
- Especifique o nome e a descrição deste crawler
- Clique em add a data source
- Cole a URI do S3 em s3 path
- Clique em add an S3 data source
- Next
- Crie uma nova IAM role
- Next
- Em Add database crie a base de dados que irá conter as tabelas do S3
- Volte para a pagina anterior, recarregue o seletor e selecione a base de dados que criou.
- Defina a frequência que o crawler irá rodar para fezer o mapeamento das tabelas.
- Next
- Confira as especificações e clique em Create crawler.
- Clique em Run crawler e aguarde ele identificar as tabelas.
- Vá para Databases e clique na base de dados que você criou para visualizá-las.
Pronto, agora o Glue já catalogou os dados disponíveis no S3 e os deixou mapeados para que outras ferramentas possam acessar.
# Athena
- Acesse o Athena pelo buscador > query editor
- Selecionando o Database você verá todas as tabelas catalogadas pelo data catalog.
- Você verá a mensagem "Before you run your first query, you need to set up a query result location in Amazon S3."
- Clique em Edit settings.
- Informe o caminho onde os resultados das queries serão salvos. (Obs: devem estar na mesma região)
- Crie a query desejada
- Ao salvar a query os resultados também estarão salvos no diretório indicado anteriormente e você também pode baixá-los diretamente.
## Conexão da VM ao Athena
Acesse a VM via SSH, para isso siga os passos:
- Clique em "Conectar" no canto superior direito. Na aba Cliente SSH você verá um exemplo com o comando usado na conexão, rode no terminal da máquina local substituindo ubuntu por rstudio, nome padrão do usuário da VM.
- Insira a senha do usuário rstudio para se conectar.
Siga os passos abaixo para habilitar a conexão com o Athena. Mas atenção, pode ser necessário esperar a VM finalizar alguns processos de atualização, é possível acompanhar a evolução com o ```htop```, prossiga quando nada estiver rodando.
Caso não queira esperar pelas atualizações, execute:
```sudo dpkg-reconfigure -plow unattended-upgrades```
e escolha a opção de não realizar o download automático. Em seguida reinicie a VM e se reconecte. Neste caso o ```htop``` deve indicar que não há nada mais sendo executado. Prossiga com os passos abaixo rodando uma linha de cada vez para instalar o rJava
```
sudo apt-get install -y default-jre
sudo apt-get install -y default-jdk
sudo R CMD javareconf
```
Abra uma seção do R pelo terminal e instale os pacotes necessários, para isso execute:
```
R
install.packages("rJava")
install.packages("RJDBC")
install.packages("AWR.Athena")
install.packages("DBI")
```
Agora se conect na VM pelo Rstudio server para executar os demais passos.
- Carregue os pacotes: rJava, RJDBC, tidyverse, AWR.Athena e DBI.
- Configure o acesso usando as chaves, conforme o código abaixo.
```
Sys.setenv("AWS_ACCESS_KEY_ID" = "mykey",
"AWS_SECRET_ACCESS_KEY" = mysecretkey")
```
- Crie uma conexão com o seguinte comando:
```
con <- dbConnect(AWR.Athena::Athena(),
region='REGIAO DOS DADOS',
S3OutputLocation='CAMINHO ESPECIFICADO NO ATHENA PARA SALVAR AS QUERIES',
Schema='default')
```
- Você pode ver as tabelas disponíveis com o comando ```dbListTables(con)```
- Execute suas queries com a função ```dbGetQuery(con, "QUERY")```
#### Exemplo
```
library(tidyverse)
library(rJava)
library(RJDBC)
library(AWR.Athena)
library(DBI)
Sys.setenv("AWS_ACCESS_KEY_ID" = "AKIAXF3SHUYFOEEP5YXQ",
"AWS_SECRET_ACCESS_KEY" = "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")
con <- dbConnect(AWR.Athena::Athena(), region='sa-east-1', S3OutputLocation='s3://caio1910/queries/', Schema='default')
dbListTables(con)
dbGetQuery(con, "SELECT * FROM datasets.iris limit 10")
```