Organização das atividades
Trello: https://trello.com/b/E6gW1Jf8
Documentação de apoio e links úteis:
https://developer.spotify.com/documentation/web-api
https://github.com/psf/requests
https://requests.readthedocs.io/en/latest/
https://cloud.google.com/colab/docs/create-console-quickstart
https://cloud.google.com/colab/pricing?hl=pt-br
https://cloud.google.com/billing/docs/how-to/budgets?hl=pt-br
https://cloud.google.com/dataflow/docs/tutorials/dataflow-stream-to-bigquery?hl=pt-br
https://cloud.google.com/dataflow/docs?hl=pt-br
https://cloud.google.com/dataflow/docs/overview?hl=pt-br
Instalação Airflow https://www.astronomer.io/docs/astro/cli/install-cli?tab=windowswithwinget#install-the-astro-cli
https://www.astronomer.io/docs/learn/get-started-with-airflow
https://github.com/psf/requests
1. Criação do Dataset para armazenamento das tabelas:
2. Criação de uma service account e download da chave gerada:
[2.1] Para execução da extração de dados da API do Spotify e ingestão no BigQuery é necessária a utilização de uma service account com permissões adequadas.
-
Passo a passo para criação da service account:
a. No Google Cloud Platform localizar nos serviços a opção ‘IAM & Admin’ > Service Accounts.
b. Crie uma service account e atribua permissões como BigQuery Data Editor (ou BigQuery Admin para mais permissões), Storage Admin e Storage Object Viewer.
[2.2] Selecione a service account criada e na opção ‘KEYS’ crie uma nova chave e realize o download do arquivo JSON. Para minha execução nomeei o arquivo como chave_sa.json.
3. Configuração do bucket no Google Cloud Storage
[3.1] Bucket criado para armazenamento do arquivo de chave de service account gerado no passo 2.
[3.2] Upload do arquivo chave_sa.json para o bucket
4. Configuração das Credenciais da API do Spotify no Secret Manager.
[4.1] Conta criada no o Spotify Developer Dashboard
a. Aplicativo criado e acesso no https://developer.spotify.com/dashboard/ea4e9cace9284eca946515cac09ce737/settings
b. Credenciais client_id e cliente_secret obtidas e armazenadas em um arquivo .json no seguinte formato. Para minha execução utilizei o nome spotify-credentials.
{
"client_id": "SEU_CLIENT_ID",
"client_secret": "SEU_CLIENT_SECRET"
}
[4.2] No Secret Manager do GCP selecionar opção ‘Create Secret' e ‘Upload File’ onde selecionei o arquivo .json spotify-credentials. Também realizei o upload da minha chave de service account porém para conexão da service account utilizarei na execução consultando o arquivo via Cloud Storage.
Obs: Também é possível versionar os arquivos criados caso seja necessária uma atualização das credenciais.
5. Considerações finais
Com a criação do dataset para armazenamento, service account com chave e as permissões necessárias concedidas e credenciamento na API do Spotify realizados com sucesso podemos seguir para o desenvolvimento do código Python que irá executar a extração de dados. Para melhor visualização abrir o arquivo spotify_podcasts.ipynb com os comentários do que é realizado em cada etapa.
-
Para execução utilizei o Colab Enterprise no GCP, uma funcionalidade disponível no Vertex AI (Importante: para execução do script é necessária a habilitação do billing no projeto e é gerado custo para o usuário).
-
Existem diversas opções para carregar o notebook de execução, para os testes do desenvolvimento utilizei as opções de criar um notebook, importar do Google Cloud Storage e importar localmente da sua máquina.
-
Versionamento: No próprio notebook existe a opção ‘Revision History’ onde caso todas as alterações sejam realizadas diretamente no mesmo notebook conseguimos verificar as modificações com horário de execução, conforme exemplo abaixo em que realizei um teste se o caminho para acesso das credenciais configuradas no Secret Manager estava correto. Particularmente prefiro o versionamento via Github pela facilidade de outros desenvolvedores poderem verificar as mudanças realizadas.
Importante - O passo a passo criado para execução hoje é realizado manualmente, existe a opção de agendarmos a execução do notebook porém a melhor alternativa seria automatizar toda a execução via Cloud Composer, utilizando o Apache Aiflow para criação e orquestração de dags com configuração de horário de execução, conexão com API e ingestão dos dados no BigQuery ou criar um pipeline no Dataflow para transformação, agregação e demais tratamentos necessários, ingestão de dados via Pub/Sub e gravação no BigQuery. Devido aos custos associados à ativação da API do Cloud Composer optei por apresentar a solução manual que pode facilmente ser adaptada para uma solução automatizada.
Observação: Consegui criar o processo de ingestão via Cloud Function, vincular um tópico do Pub/Sub como trigger porém a ingestão com sucesso foi realizada somente para a tabela 5. Quando a correção for finalizada e ingestão das três tabelas solicitadas realizada com sucesso atualizarei o código (main.py e requirements.txt) na pasta function_source nesse repositório.
Permissões adicionadas para execução da Cloud Function utilizando tópico do Pub/Sub como trigger: