基于Python Boto3的AWS Transcribe作业无报错删除及成本咨询
解决方案:AWS Transcribe 作业删除逻辑优化与费用说明
一、实现“存在则删除,不存在则无操作”的逻辑
原代码在作业不存在时会直接抛出异常,核心优化点是捕获特定错误码而非笼统的客户端异常。Transcribe服务中,作业不存在对应的错误码为NotFound,修改后的代码如下:
import boto3 from botocore.exceptions import ClientError # 初始化客户端(建议用IAM角色或环境变量替代硬编码密钥,提升安全性) transcribe_client = boto3.client( 'transcribe', aws_access_key_id=AWS_ACCESS_KEY_ID, aws_secret_access_key=AWS_SECRET_ACCESS_KEY, region_name=AWS_DEFAULT_REGION ) JOB_NAME = "Example-job" try: transcribe_client.delete_transcription_job(TranscriptionJobName=JOB_NAME) print(f"已成功删除转录作业: {JOB_NAME}") except ClientError as e: error_code = e.response['Error']['Code'] if error_code == 'NotFound': # 作业不存在,无需执行任何操作 print(f"转录作业 {JOB_NAME} 不存在,跳过删除步骤") else: # 其他客户端错误,正常抛出异常 raise Exception(f"删除作业时出现客户端错误: {e}") except Exception as e: # 非客户端类的意外错误 raise Exception(f"删除作业时出现意外错误: {e}")
关键说明:
- 仅在捕获到
NotFound错误时跳过操作,其他异常仍正常抛出,避免隐藏真实问题 - 硬编码AWS密钥存在安全风险,建议在EC2/EKS等AWS环境中使用IAM角色,本地开发用环境变量管理密钥
二、AWS Transcribe 费用说明
Transcribe的收费逻辑清晰,无需过度担忧已完成作业的持续扣费:
- 核心计费项:按实际转录的音频时长收费(不同语言、音频类型、高级功能费率不同),作业完成后停止计费
- 附加费用:若将转录结果存储到S3,会产生S3存储费用;使用自定义词汇表、说话人识别等高级功能会额外收费
- 已完成作业:仅占用Transcribe的作业列表条目,不会产生持续费用,即使不删除也不会生成账单
三、生成唯一作业名规避异常的方案
如果无需删除历史作业,直接生成唯一作业名可彻底避免“作业不存在”的异常,同时防止重复创建作业导致的重复计费。使用Python内置uuid模块生成唯一标识:
import uuid import boto3 transcribe_client = boto3.client('transcribe', region_name=AWS_DEFAULT_REGION) # 生成唯一作业名:自定义前缀 + 32位随机UUID字符串 JOB_NAME = f"Transcribe-Job-{uuid.uuid4().hex}" # 创建转录作业示例 transcribe_client.start_transcription_job( TranscriptionJobName=JOB_NAME, Media={'MediaFileUri': 's3://your-bucket/audio-file.mp3'}, MediaFormat='mp3', LanguageCode='zh-CN' ) print(f"已创建唯一转录作业: {JOB_NAME}")
优势:
uuid.uuid4().hex生成的字符串全局唯一,不会出现作业名重复的情况- 无需处理删除作业的异常逻辑,简化代码结构,适合无需复用作业名的场景
内容的提问来源于stack exchange,提问作者FreddicMatters
相关产品推荐
相关产品推荐

