O Cloud Storage permite à sua aplicação publicar objetos de dados grandes, como ficheiros de vídeo ou de imagem, e permite aos seus utilizadores carregar ficheiros de dados grandes. No tempo de execução do Python 2, o App Engine fornece a sua própria biblioteca cliente para escrever e ler objetos no Cloud Storage. Esta biblioteca do App Engine não está disponível em tempos de execução do App Engine mais recentes, incluindo o tempo de execução do Python 3.
Se a sua app Python 2 usar a biblioteca GoogleAppEngineCloudStorageClient
, tem de migrar para a biblioteca cliente Google Cloud para o Cloud Storage antes de poder executar a app no tempo de execução do Python 3. Tenha em atenção que só precisa de migrar a sua app para usar uma nova biblioteca de cliente. Todos os objetos de dados e autorizações nos
seus contentores do Cloud Storage existentes permanecem inalterados, e pode aceder
aos seus contentores existentes através da nova biblioteca de cliente.
Comparação entre o App Engine e as bibliotecas cliente da Google Cloud
Semelhanças:
A biblioteca cliente do Google Cloud suporta todas as funcionalidades do Cloud Storage ativadas pela biblioteca cliente do App Engine, como ler, escrever, remover e listar objetos. A migração deve exigir apenas pequenas alterações ao seu código.
A biblioteca cliente da nuvem também suporta funcionalidades adicionais, como a criação e a etiquetagem de contentores, e a obtenção de versões mais antigas de objetos.
Diferenças:
Na biblioteca do App Engine, a função que obtém uma lista de objetos funciona de forma assíncrona. A biblioteca de cliente do Google Cloud não fornece uma função assíncrona para listar objetos, embora possa usar a paginação e iterar através de um pequeno conjunto de objetos.
A biblioteca de cliente do App Engine requer que use listas de controlo de acesso (ACL) para controlar o acesso a contentores e objetos. No entanto, o Cloud Storage e a biblioteca de cliente da nuvem suportam dois sistemas para conceder aos utilizadores autorização para aceder aos seus contentores e objetos: as ACLs e o acesso de nível de contentor uniforme. O acesso de nível de contentor uniforme oferece uma experiência de controlo de acesso mais simples e consistente em todos os seus recursos na nuvem.
Todas as ACLs que usou com a biblioteca cliente do App Engine permanecem em vigor para os seus contentores existentes após a migração para a biblioteca cliente da Google Cloud, e pode continuar a usar ACLs, se necessário.
Se o acesso uniforme ao nível do contentor satisfizer as suas necessidades, recomendamos que use este sistema mais simples para todos os novos contentores que criar. Embora possa converter contentores existentes para usar o acesso uniforme ao nível do contentor, isto pode exigir alterações significativas à forma como a sua app protege o acesso aos respetivos objetos de armazenamento.
Exemplos de código:
Operações de armazenamento básicas com as APIs App Engine
Operações de armazenamento básicas com a biblioteca cliente do Google Cloud para o Cloud Storage
Antes de começar a migrar
Se ainda não o fez, configure o seu ambiente de desenvolvimento Python para usar uma versão do Python compatível com o Google Cloude instale ferramentas de teste para criar ambientes Python isolados.
Compreender as autorizações do Cloud Storage
Por predefinição, a conta de serviço predefinida criada automaticamente da sua app tem privilégios de leitura e escrita nos contentores do seu projeto e tem direitos totais sobre os objetos que cria, antes e depois da migração.
Se usou uma conta de serviço ou uma conta de utilizador diferente para proteger o acesso aos seus contentores e objetos do Cloud Storage, certifique-se de que continua a usar as mesmas contas e técnicas de autenticação antes e depois da migração.
Vista geral do processo de migração
Para migrar a sua app Python para usar a biblioteca cliente do Google Cloud para o Cloud Storage em vez da biblioteca cliente do App Engine:
Instale a biblioteca cliente do Google Cloud para o Cloud Storage.
Atualize o seu código para usar a biblioteca de cliente da nuvem.
Teste as atualizações.
Implemente a sua app no App Engine.
Instalar a biblioteca cliente da nuvem para o Cloud Storage
Para disponibilizar a biblioteca cliente do Google Cloud para o Cloud Storage à sua app quando é executada no App Engine:
Atualize o ficheiro
app.yaml
:- Se usar as bibliotecas cliente da Google Cloud, adicione as versões mais recentes das bibliotecas
grpcio
esetuptools
. - Adicione a biblioteca
ssl
, uma vez que é necessária para o Cloud Storage.
Segue-se um exemplo de um ficheiro
app.yaml
:runtime: python27 threadsafe: yes api_version: 1 libraries: - name: grpcio version: 1.0.0 - name: setuptools version: 36.6.0 - name: ssl version: latest
Algumas bibliotecas cliente não precisam da biblioteca SSL. Se não incluir a biblioteca SSL para uma biblioteca de cliente que a necessite, é apresentado um erro de SSL no Explorador de registos quando a sua app recebe um pedido.
- Se usar as bibliotecas cliente da Google Cloud, adicione as versões mais recentes das bibliotecas
Atualize o ficheiro
requirements.txt
adicionando as bibliotecas de cliente da nuvem para o Cloud Storage à sua lista de dependências:google-cloud-storage==1.24.1
Recomendamos que use a versão 1.24.1 da biblioteca cliente do Cloud Storage, uma vez que suporta apps Python 2.7.
Em seguida, execute
pip install -t lib -r requirements.txt
para atualizar a lista de bibliotecas disponíveis para a sua app.Para apps Python 2, se a sua app estiver a usar bibliotecas incorporadas ou copiadas, tem de especificar esses caminhos no ficheiro
appengine_config.py
:import pkg_resources from google.appengine.ext import vendor # Set PATH to your libraries folder. PATH = 'lib' # Add libraries installed in the PATH folder. vendor.add(PATH) # Add libraries to pkg_resources working set to find the distribution. pkg_resources.working_set.add_entry(PATH)
O ficheiro
appengine_config.py
no exemplo anterior pressupõe que a pastalib
está localizada no diretório de trabalho atual. Se não puder garantir quelib
está sempre no diretório de trabalho atual, especifique o caminho completo para a pastalib
. Por exemplo:import os path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib')
Atualizar o código para usar a biblioteca de cliente da nuvem
Criar um cliente do Cloud Storage
Para usar a biblioteca cliente da Google Cloud para o Cloud Storage, crie um Client
objeto. O cliente contém credenciais e outros
dados necessários para estabelecer ligação ao Cloud Storage. Por exemplo:
from google.cloud import storage
client = storage.Client()
No cenário de autorização predefinido descrito anteriormente, o cliente do Cloud Storage contém credenciais da conta de serviço predefinida do App Engine, que está autorizada a interagir com os contentores e os objetos do seu projeto. Se não estiver a trabalhar neste cenário predefinido, consulte as Credenciais predefinidas da aplicação (ADC) para obter informações sobre como fornecer credenciais.
Usar métodos da biblioteca cliente do Google Cloud
A tabela seguinte resume os métodos da biblioteca cliente da nuvem a usar quando implementar funcionalidades específicas do Cloud Storage.
Funcionalidade do Cloud Storage | Métodos de cliente na nuvem |
Liste objetos num contentor | Client.list_blobs
Veja um exemplo de código simples e um exemplo de emulação do modo de diretório. Para percorrer a lista de objetos, use a propriedade |
Gravar no armazenamento | blob.upload_from_file
blob.upload_from_filename
blob.upload_from_string
Veja um exemplo de código. |
Especifique LCAs (Listas de controlo de acesso) | Para aplicar uma ACL
predefinida, use o parâmetro predefined_acl quando
criar
um contentor ou criar um objeto.
Para um controlo mais detalhado, use |
Ler a partir do armazenamento | blob.download_to_file
blob.download_to_filename
blob.download_as_string
Veja um exemplo de código. |
Elimine um objeto |
blob.delete
Veja um exemplo de código. |
Copie um objeto | bucket.copy_blob
Veja um exemplo de código. |
Leia os metadados de um objeto | blob.propertyname
e blob.metadata
Veja um exemplo de código. |
Testar as atualizações
Pode testar as atualizações da sua app num ambiente local, mas todos os pedidos do Cloud Storage têm de ser enviados através da Internet para um contentor do Cloud Storage real. Nem o App Engine nem o Cloud Storage fornecem um emulador do Cloud Storage.
Para mais informações sobre os testes de apps Python 2, consulte o artigo Usar o servidor de desenvolvimento local.
Para mais informações sobre os testes de apps Python 3, consulte o artigo Testar e implementar a sua aplicação.
Implementar a sua app
Quando tiver tudo pronto para implementar a sua app, deve:
Se a app for executada sem erros, use a divisão de tráfego para aumentar gradualmente o tráfego para a app atualizada. Monitorize atentamente a app para detetar problemas antes de encaminhar mais tráfego para a app atualizada.