Olá, Felipe! Tudo bem?
Sobre o bug no script da function que trata do deploy do lambda, você está certo ao identificar que o bloco try está incompleto, faltando o fechamento com o except e a chamada real para registrar as partições no Glue Catalog.
O problema aqui é que a função monta a lista partition_inputs, mas nunca chega a usar essa lista para criar ou atualizar as partições via boto3. Sem essa etapa final, o lambda quebra porque o interpretador Python espera encontrar um except (ou finally) logo depois do try, e isso não existe no código atual.
Ajuste seu código assim:
import boto3
glue_client = boto3.client("glue")
def register_glue_partitions(output_name: str, partitions: set[tuple[int, int]]) -> None:
try:
if not partitions:
return
location_base = f"s3://{S3_BUCKET}/silver/{output_name}"
partition_inputs = []
for year, month in partitions:
partition_inputs.append(
{
"Values": [str(year), str(month)],
"StorageDescriptor": {
"Location": f"{location_base}/year={year}/month={month:02d}/",
"InputFormat": "org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat",
"OutputFormat": "org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat",
"SerdeInfo": {
"SerializationLibrary": "org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe",
},
},
}
)
response = glue_client.batch_create_partition(
DatabaseName="seu_database",
TableName=output_name,
PartitionInputList=partition_inputs,
)
erros = response.get("Errors", [])
if erros:
print(f"Falhas ao registrar particoes: {erros}")
else:
print(f"Particoes registradas com sucesso para {output_name}")
except Exception as erro:
print(f"Erro ao registrar particoes no Glue: {erro}")
raise
Esse trecho de código completa o fluxo: depois de montar a lista de partições, ele chama batch_create_partition do cliente Glue para efetivamente registrar cada partição no catálogo. O bloco except captura qualquer falha (por exemplo, permissão negada ou tabela inexistente), imprime o erro no log do CloudWatch e relança a exceção com raise, garantindo que o lambda registre a falha corretamente ao invés de travar de forma silenciosa.
Vale reforçar que o nome do database precisa bater exatamente com o que está configurado no seu catálogo do Glue, e o output_name deve corresponder ao nome da tabela já criada previamente. Se a tabela não existir ainda, o batch_create_partition vai falhar, então confirme essa dependência antes de rodar o deploy.
Você já validou se o database e a tabela existem no Glue Catalog antes de chamar essa função, ou o erro estava acontecendo antes mesmo de chegar nessa etapa?
Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!