启动AWS Transcribe任务时报超时、无法连接实例元数据服务错误怎么办?
解决方案
错误根因
报错核心是AWS SDK在本地运行时找不到有效的身份验证凭证,会按默认凭证链依次检索,最后尝试调用仅AWS EC2实例才有的实例元数据服务(IMDS)获取凭证,本地环境没有该服务,因此触发连接超时、无法连接元数据服务的错误。
修复步骤
- 第一步:补充.env配置项
在你的.env文件中除已有的AWS_REGION外,新增AWS访问凭证参数,凭证可在AWS IAM控制台创建,需要为该凭证授予transcribe:StartTranscriptionJob权限以及对应S3资源的读取权限:
AWS_ACCESS_KEY_ID=你的AWS访问密钥ID AWS_SECRET_ACCESS_KEY=你的AWS秘密访问密钥
- 第二步:修正Transcribe客户端初始化逻辑
显式将.env中的凭证传入客户端,避免SDK走默认凭证链检索:
const dotenv = require('dotenv') const result = dotenv.config({path: __dirname + '/../.env'}) if (result.error) { throw result.error } const { TranscribeClient } = require("@aws-sdk/client-transcribe"); const REGION = result.parsed.AWS_REGION const ACCESS_KEY = result.parsed.AWS_ACCESS_KEY_ID const SECRET_KEY = result.parsed.AWS_SECRET_ACCESS_KEY const transcribeClient = new TranscribeClient({ region: REGION, credentials: { accessKeyId: ACCESS_KEY, secretAccessKey: SECRET_KEY } }); module.exports = transcribeClient
- 第三步:修正转录任务命名格式
Transcribe任务名称不允许包含空格,仅支持Unicode字母、数字、下划线、连字符,且每次创建新任务必须使用唯一名称,修改参数如下:
const params = { TranscriptionJobName: "Transcription_Test_20240501", // 替换为无空格的唯一名称 LanguageCode: "en-US", MediaFormat: "webm", Media: { MediaFileUri: "https://speech-recognition.s3.eu-central-1.amazonaws.com/djoqiipn.webm", }, };
完成以上修改后重新运行代码即可正常发起转录任务。
内容的提问来源于stack exchange,提问作者Maurice
相关产品推荐
相关产品推荐

