Componentes de integração para construção de arquiteturas de soluções utilizando ambientes cloud
Project description
Table of content
Sobre cloudgeass
Em um cenário tecnológico onde soluções baseadas em cloud são cada vez mais comuns, imaginem o quão vantajoso seria se tivéssemos alguns componentes prontos para facilitar o desenvolvimento de sistemas, arquiteturas ou até mesmo auxiliar em operações simples do dia a dia. Imerso na ideia de tornar algumas etapas de construção simples, surge o cloudgeass: um pacote Python contendo elementos previamente desenvolvidos visando facilitar o intermédio entre scripts e ferramentas cloud.
Mesmo que exemplos práticos sejam fornecidos ao longo desta documentação, é preciso entender o pacote cloudgeass como um simples centralizador e fornecedor de classes, módulos ou funções prontas para que os usuários possam se servir em meio a operações envolvendo serviços da cloud. Com as funcionalidades aqui desenvolvidas é possível, por exemplo, criar um bucket s3 de forma automática, ou mesmo realizar o upload, em um dado bucket, de todos os objetos contidos em um diretório local. Em uma outra gama de serviços cloud, também é possível criar layers lambda a partir de uma única execução de função no módulo serverless.py. Ao longo do tempo, uma gama maior de operações poderão ser encapsuladas e fornecidas aos usuários do pacote, sempre com a premissa de simplificar e automatizar as operações.
Instalação do Pacote
Com o ambiente virtual python ativo, para a instalação do pacote cloudgeass via pip, basta executar o comando abaixo:
pip install cloudgeass
Com isso, todo o ferramental disponível na última versão do pacote poderá ser usufruído. Vale citar que o pacote cloudeass possui, como principal dependência, o SDK Python boto3
com um vasto ferramental de operações na AWS utilizando python. Assim, as dependências do pacote são:
boto3
: SDK python para operações na AWSpandas
: poderosa ferramenta para a manipulação de dados em python
Funcionalidades Disponíveis
Como mencionado anteriormente, o pacote conta com alguns módulos essenciais para a realização de operações em serviços cloud a partir da linguagem Python. Focado, em um primeiro momento, em soluções AWS, cloudgeass entrega dois principais módulos de componentes úteis: s3.py
e serverless.py
.
Módulo s3
De forma intuitiva, o módulo s3 contempla funcionalidades focadas no serviço Simple Storage Service da AWS. Como principal componente, encontra-se a classe JimmyBuckets com uma série de métodos capazes de realizar as operações mais comuns em buckets do s3, desde a instância de um recurso e um client a partir do boto3 até operações de criação de buckets, upload e download de objetos ou mesmo diretórios completos. Como grande vantagem de utilização, as funcionalidades contidas na classe JimmyBuckets contam com uma vasta documentação e um acompanhamento de logs ao longo das operações, permitindo assim com que o usuário realize uma série de ações na AWS executando apenas uma única linhas de código.
Detalhando um pouco mais as features disponíveis dentro da classe JimmyBuckets, a tabela abaixo pode servir de referência para consultas e validação de operações. Para visualizar um exemplo prático de utilização, basta acessar a seção de utilização ou então os scripts de testes desenvolvidos para validar e testar, de forma bem detalhada, algumas das operações presentes na classe.
Método | Descrição |
---|---|
jbuckets.list_buckets() |
Lista todos os buckets presentes na conta de utilização da AWS |
jbuckets.list_bucket_objects() |
Lista todos os objetos (chaves) presentes em um determinado bucket |
jbuckets.delete_bucket() |
Deleta um bucket já existente com a opção de esvaziá-lo antes |
jbuckets.create_bucket() |
Cria um novo bucket com possibilidade de configurar opções de privacidade e ACL |
jbuckets.upload_object() |
Realiza o upload de um objeto salvo localmente ou lido em memória |
jbuckets.upload_directory() |
Realiza o upload de todos os arquivos presentes em um diretório alvo, mantendo a mesma estrutura de pastas locais através de prefixos no s3 |
jbuckets.download_all_objects() |
Realiza o download de todos os objetos presentes em um bucket, mantendo a mesma estrutura de prefixos no s3 através de pastas locais |
jbuckets.read_object() |
Realiza a leitura de um objeto presente no s3, retornando um conteúdo binário que pode ser trabalhado posteriormente pelo código |
jbuckets.object_to_df() |
Mirando dados em formato tabular (arquivos csv ou txt), realiza a leitura de um objeto no s3 direto em um formato de DataFrame do pandas |
Módulo serverless
Neste módulo criado recentemente, são alocados recursos e encapsulados códigos capazes de atuar com o serviço lambda presente na AWS. Baseado em funções e não em classes, aqui será possível encontrar elementos capazes de criar layers a serem utilizados em funções lambda de forma automática e sustentável, permitindo assim com que o usuário realize toda a preparação local das dependências a partir de um arquivo requirements.txt
gerado manualmente ou automaticamente a partir de um ambiente virtual de trabalho. Para ilustrar algumas possibilidades, a tabela abaixo pode servir de referência inicial de consulta. Para maiores detalhes, é possível consumir o contéudo da seção de utilização ou então o scripts de testes específico do módulo serverless.
Método | Descrição |
---|---|
create_layer_path() |
Cria um diretório reconhecível pelo runtime do lambda para leitura das dependências python |
get_packages() |
Coleta as dependências via requirements.txt fornecido ou via venv e realiza a instalação direcionada das mesmas no diretório do layer |
upload_layer_to_bucket() |
Transforma o diretório do layer em um arquivo .zip e realiza o upload do conteúdo em um bucket s3 para posterior associação a funções lambda |
build_lambda_layer() |
Encapsula todas as operações acima citadas em um bloco único, partindo do início e resultando em um layer zipado presente no s3 |
Utilização Prática
O snippet abaixo ilustra algumas operações detalhadas nas tabelas de cada módulo, permitindo assim uma visão prática sobre como utilizar os recursos do pacote cloudgeass. Para uma maior riqueza de detalhes, recomenda-se visualizar scripts mais detalhados presentes no diretório de testes deste repositório.
# Importando bibliotecas
from cloudgeass.aws.s3 import JimmyBuckets
import os
# Instanciando classe e criando bucket, caso inexistente
jbuckets = JimmyBuckets(region=REGION)
# Coletando buckets existentes e aplicando drop + create
account_buckets = jbuckets.list_buckets()
if BUCKET_NAME not in account_buckets:
jbuckets.create_bucket(bucket_name=BUCKET_NAME)
# Realizando o upload de objeto no bucket
jbuckets.upload_object(
file=os.path.join(os.getcwd(), 'requirements.txt'),
bucket_name='bucket_teste',
key='test_folder/requirements.txt'
)
# Realizando o upload de todos os arquivos em um diretório
jbuckets.upload_directory(
directory=os.getcwd(),
bucket_name='bucket_teste'
)
# Baixando todos os objetos presentes em um bucket
jbuckets.download_all_objects(
bucket_name='bucket_teste',
prefix='',
local_dir=os.path.join(os.getcwd(), 'tmp'),
verbose=True
)
Em um exemplo básico de criação de layers lambda, o snippet abaixo traz a execução de uma única função capaz de encapsular todo o procedimento:
# Importando bibliotecas
from clougeass.aws.serverless import build_lambda_layer
# Criando layer
build_lambda_layer(
layer_path=os.path.join(os.getcwd(), 'lambda_layer/python'),
bucket_name='layes_lambda',
prefix='layer_teste/'
)
Ao longo do tempo, novas funcionalidades poderão ser implementadas conforme novos conhecimentos forem sendo agregados.
Contatos
- LinkedIn: https://www.linkedin.com/in/thiago-panini/
- Outros pacotes desenvolvidos: https://github.com/ThiagoPanini
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for cloudgeass-0.0.8-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 663d1a04d79a08d69aa313f699e6ea5716fca4778481ff0c826c8e4b51ab98a7 |
|
MD5 | 5be460a3eb2bee97ef12267229af5c0c |
|
BLAKE2b-256 | e8ecd64cb2119612f589f017b0f9309f8667ec307e4c02eb3c482b0656edae6f |