Configuração e utilização do RStudio e Shiny Server na AWS

Thiago Pires | FGV

20 de agosto, 2018

Computação em nuvem

Computação em nuvem

É o fornecimento de serviços de computação – servidores, armazenamento, bancos de dados, rede, software, análise e muito mais – pela Internet (“a nuvem”).

Alguns dos benefícios

  • Redução de custos
  • Fácil manutenção
  • Acessibilidade e facibilidade de colaboração
  • Escalabilidade
  • Segurança

Fonte: 10 motivos para aderir à nuvem e dar adeus ao servidor

AWS

Amazon Web Services

A Amazon Web Services (AWS) é uma plataforma de serviços em nuvem segura, oferecendo poder computacional, armazenamento de banco de dados, distribuição de conteúdo e outras funcionalidades.

Abrir uma conta

Opção gratuíta para 12 meses

  • Nível gratuíto: https://aws.amazon.com/pt/free/
  • Siga as instruções online para abertura de conta.
  • Parte do procedimento de cadastro envolve uma chamada telefônica e a digitação de um PIN usando o teclado do telefone.

Amazon EC2

Configuração da máquina

Escolher uma máquina

Escolher o tipo de máquina

Detalhes na configuração

Detalhes avançados

#!/bin/bash

#install R
sudo amazon-linux-extras install R3.4

#install RStudio-Server (2018-07-19)
sudo wget https://download2.rstudio.org/rstudio-server-rhel-1.1.456-x86_64.rpm
sudo yum install -y --nogpgcheck rstudio-server-rhel-1.1.456-x86_64.rpm
sudo rm rstudio-server-rhel-1.1.456-x86_64.rpm

#install Shiny and Shiny-Server (2018-07-19)
sudo -i R -e "install.packages(c('shiny', 'rmarkdown', 'plumber'), repos = 'https://cran.fiocruz.br/')"
sudo wget https://download3.rstudio.org/centos6.3/x86_64/shiny-server-1.5.7.907-rh6-x86_64.rpm
sudo yum install -y --nogpgcheck shiny-server-1.5.7.907-rh6-x86_64.rpm
sudo rm shiny-server-1.5.7.907-rh6-x86_64.rpm

#add user(s)
useradd usuário
echo usuário:senha | chpasswd

#permission to folder
sudo chmod 777 /srv/shiny-server

Detalhes avançados (Ubuntu)

#install R
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install r-base-core r-base-dev libcurl4-openssl-dev libssl-dev libxml2-dev

#updated R
sudo add-apt-repository "deb http://cran.rstudio.com/bin/linux/ubuntu $(lsb_release -sc)/"
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E084DAB9
sudo add-apt-repository ppa:marutter/rdev
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install r-base

#install Shiny and Shiny-Server (2018-07-19)
sudo -i R -e "install.packages(c('shiny', 'rmarkdown', 'plumber', 'gtrendsR', 'dplyr', 'flexdashboard', 'xts', 'dygraphs', 'tbl2xts', 'aws.s3'), repos = 'https://cran.fiocruz.br/')"
wget https://download3.rstudio.org/ubuntu-14.04/x86_64/shiny-server-1.5.7.907-amd64.deb
sudo dpkg -i shiny-server-1.5.7.907-amd64.deb
sudo rm shiny-server-1.5.7.907-amd64.deb

#permission to folder
sudo chmod 777 /srv/shiny-server

OBS: Este script não está automático como o anterior. Os comandos deverão ser inseridos depois de ser iniciada a máquina na nuvem.

Armazenamento

Controle de tráfego na máquina

Portas de acesso

Criação de uma chave para conexão segura

Máquina funcionando

Em Public DNS (IPv4) está o endereço de acesso à máquina. O usuário é o ec2-user.

Acessando à máquina através do git-bash

ssh ec2-user@ec2-34-219-66-250.us-west-2.compute.amazonaws.com -i thop.pem

Informações e controle da máquina pelo celular

R,
RStudio Server e
Shiny Server

RStudio e Shiny Server

  • Para acessar o RStudio Server no browser:
http://ec2-54-202-207-158.us-west-2.compute.amazonaws.com:8787
  • Para acessar o Shiny Server:
http://ec2-54-202-207-158.us-west-2.compute.amazonaws.com:3838
  • Para acessar uma aplicação específica:
http://ec2-54-202-207-158.us-west-2.compute.amazonaws.com:3838/sample-apps/hello/

Plumber

Configurações necessárias

  • Verificar as portas em funcionamento na máquina:
netstat -ant
  • Colocar a porta de acesso à API: :8000

Criando uma API

Arquivo plumber.R

#' Return the sum of two numbers
#' @param a The first number to add
#' @param b The second number to add
#' @get /sum
#' @html
function(a, b){
  paste("<html><h1>=", as.numeric(a) + as.numeric(b), "<html><h1>")
}

Baixar arquivo plumber.R na máquina

wget https://gist.githubusercontent.com/th1460/5651ece3822f958c018150db6506b1f4/raw/e47b27570a2a04c74192d177f500d3040db05d75/plumber.R

Inicializar a API no terminal

R -e 'pr <- plumber::plumb("plumber.R"); pr$run(host = "0.0.0.0", port = 8000)'

Acessando a API

Digitando no browser o host a porta e os argumentos de acesso à API:

http://ec2-54-200-63-187.us-west-2.compute.amazonaws.com:8000/sum?a=145&b=189

Amazon S3

Armazenamento de objetos

Autorizações para clientes

Para dar acessos específicos. É necessária esta etapa para criar o id e senha de acessos para utlizar o AWS CLI.

Instalando cliente e configurando

sudo apt-get install awscli

aws configure

sudo aws s3 cp s3://th1460/shiny_dengue.Rmd /srv/shiny-server/sample-apps/gtrendsR/shiny_dengue.Rmd

library(aws.s3)

require(aws.s3)

Sys.setenv("AWS_ACCESS_KEY_ID" = "AKIAJINKOTYFNMTNTRLQ",
           "AWS_SECRET_ACCESS_KEY" = "hsxs3k1ayEr7ruRTLge6HQukpKolJxSGorCTJcOv")

# lista de buckets
bucketlist()

# upload dados no S3
s3saveRDS(x = dados, bucket = "th1460", object = "dados.rds")

# ler dados do S3
s3readRDS(object = "dados.rds", bucket = "th1460")

# deletar dados
delete_object(object = "dados.rds", bucket = "th1460")

Aplicação

th1460.github.io