> ## Documentation Index
> Fetch the complete documentation index at: https://docs.squarecloud.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Gerenciando Snapshots

> Nesta seção, você aprenderá como criar, recuperar e restaurar snapshots para suas aplicações e bancos de dados usando o SDK Python.

[Client]: client

[Application]: client#application

Snapshots são backups de sua aplicação ou banco de dados em um ponto específico no tempo. Eles permitem que você restaure sua aplicação ou banco de dados para um estado anterior, se necessário. A Square Cloud fornece snapshots ilimitados com backups automáticos diários.

## Criando um snapshot de aplicação

`client.snapshot` retorna um objeto `Snapshot`.

<Tabs>
  <Tab title="Usando Client">
    ```python theme={null}
    import squarecloud as square

    client = square.Client(api_key='API_KEY')

    async def example():
        snapshot = await client.snapshot(app_id='application_id')
        
        print(snapshot.url)  # URL para download do snapshot
        print(snapshot.key)  # Identificador chave do snapshot
    ```
  </Tab>

  <Tab title="Usando Application">
    ```python theme={null}
    import squarecloud as square

    client = square.Client(api_key='API_KEY')

    async def example():
        app = await client.app('application_id')
        snapshot = await app.snapshot()
        
        print(snapshot.url)  # URL para download do snapshot
        print(snapshot.key)  # Identificador chave do snapshot
    ```
  </Tab>
</Tabs>

## Baixando um snapshot

O objeto `Snapshot` fornece um método para baixar o snapshot como um arquivo zip.

```python theme={null}
import squarecloud as square

client = square.Client(api_key='API_KEY')

async def example():
    snapshot = await client.snapshot(app_id='application_id')
    
    # Baixar snapshot para o diretório atual
    zip_file = await snapshot.download()
    
    # Baixar snapshot para diretório específico
    zip_file = await snapshot.download(path='./backups')
```

## Listando snapshots de aplicação

`client.all_app_snapshots` retorna uma lista de objetos `SnapshotInfo`.

<Tabs>
  <Tab title="Usando Client">
    ```python theme={null}
    import squarecloud as square

    client = square.Client(api_key='API_KEY')

    async def example():
        snapshots = await client.all_app_snapshots(app_id='application_id')
        
        for snapshot in snapshots:
            print(f"ID do Snapshot: {snapshot.id}")
            print(f"  Tamanho: {snapshot.size}")
            print(f"  Criado em: {snapshot.created_at}")
    ```
  </Tab>

  <Tab title="Usando Application">
    ```python theme={null}
    import squarecloud as square

    client = square.Client(api_key='API_KEY')

    async def example():
        app = await client.app('application_id')
        snapshots = await app.all_snapshots()
        
        for snapshot in snapshots:
            print(f"ID do Snapshot: {snapshot.id}")
            print(f"  Tamanho: {snapshot.size}")
            print(f"  Criado em: {snapshot.created_at}")
    ```
  </Tab>
</Tabs>

## Restaurando um snapshot

`client.restore_snapshot` retorna um objeto `Response`. Você pode restaurar snapshots tanto para aplicações quanto para bancos de dados.

```python theme={null}
import squarecloud as square

client = square.Client(api_key='API_KEY')

async def example():
    # Restaurar um snapshot de aplicação
    response = await client.restore_snapshot(
        application_type='app',
        app_id='application_id',
        snapshot_id='snapshot_id',
        version_id='version_id'
    )
    
    print(f"Snapshot restaurado: {response.status}")
    
    # Restaurar um snapshot de banco de dados
    response = await client.restore_snapshot(
        application_type='database',
        app_id='database_id',
        snapshot_id='snapshot_id',
        version_id='version_id'
    )
    
    print(f"Snapshot de banco de dados restaurado: {response.status}")
```

## Estruturas de dados do Snapshot

### Snapshot

O objeto `Snapshot` representa um snapshot criado:

| Propriedade | Tipo  | Descrição                       |
| ----------- | ----- | ------------------------------- |
| `url`       | `str` | URL para download do snapshot   |
| `key`       | `str` | Identificador único do snapshot |

### SnapshotInfo

O objeto `SnapshotInfo` representa metadados do snapshot:

| Propriedade  | Tipo  | Descrição                                   |
| ------------ | ----- | ------------------------------------------- |
| `id`         | `str` | Identificador único do snapshot             |
| `size`       | `str` | Tamanho do snapshot                         |
| `created_at` | `str` | Timestamp de criação do snapshot (ISO 8601) |

## Melhores práticas

* **Backups automáticos**: A Square Cloud cria automaticamente snapshots diários para suas aplicações e bancos de dados.
* **Snapshots ilimitados**: Crie quantos snapshots manuais precisar sem custos adicionais.
* **Período de retenção**: Snapshots são mantidos por 30 dias.
* **Tempo de restauração**: O processo de restauração leva aproximadamente 60 segundos para garantir que todos os dados estejam estáveis.
* **Testes**: Antes de restaurar um snapshot, considere criar uma nova aplicação ou banco de dados para testar o processo de restauração primeiro.

## Limites de snapshots

* **Snapshots diários por plano**: Cada plano pode gerar `(RAM / 256) * 2` snapshots por dia
  * Exemplo: Plano Hobby com 2048MB = 16 snapshots diários (480 por mês)
* **Retenção**: Todos os snapshots são mantidos dos últimos 30 dias
* **Custo**: Sem custo adicional para snapshots
