Как преобразовать код node.js в Python с помощью AWS Lamda@Edge
У меня есть этот код в node.js. Я просто исследую этот вопрос и хочу преобразовать его в Python.
Этот код предназначен для размещения подписанного URL-адреса в файле манифеста.m3u8.
Кто-нибудь знает как это сделать? Я использую функцию AWS Lambda.
Преобразование этого кода node.js в python.
const aws = require('aws-sdk');
const s3 = new aws.S3({ apiVersion: '2006-03-01' });
const bucketName = 'streaming-files';
exports.lambdaHandler = async (event, context, callback) => {
const request = event.Records[0].cf.request;
// Get the key name of S3 object
const key = request.uri.substring(1);
const s3Params = {
Bucket: bucketName,
Key: key
};
// Get the contents of the raw manifest file from the S3 bucket
const s3Res = await s3.getObject(s3Params).promise();
const srcBody = s3Res.Body.toString('utf-8');
// rewriting process
const qs = request.querystring;
const signedBody = srcBody.replace(/\.m3u8/g, `.m3u8?${qs}`).replace(/\.ts/g, `.ts?${qs}`);
// Add Respose header for content-type and CORS
const response = {
status: 200,
statusDescription: 'OK',
headers: {
'content-type': [{
key: 'Content-Type',
value: 'application/x-mpegURL'
}],
'access-control-allow-methods': [{
key: 'Access-Control-Allow-Methods',
value: 'GET,HEAD'
}],
'access-control-allow-origin': [{
key: 'Access-Control-Allow-Origin',
value: '*'
}]
},
body: signedBody,
};
callback(null, response);
};
Вот мой код на Python. Но я застрял на получении имени ключа, а также на процессе переписывания.
import json
import boto3
s3 = boto3.client('s3')
BUCKET_NAME = "streaming-files"
def lambda_handler(event, context):
request = event['Records'][0]['cf']['request']
# Get the key name of S3 object
key = request['uri'];
s3Res = s3.get_object(Bucket=BUCKET_NAME, Key=key)
# Get the contents of the raw manifest file from the S3 bucket
srcBody = s3Res['Body'].read().decode('utf-8')
# rewriting process
qs = request['querystring']
signedBody = srcBody.replace(/\.m3u8/g, `.m3u8?${qs}`).replace(/\.ts/g, `.ts?${qs}`)
response = {
'status': 200,
'statusDescription': "OK",
'headers': {
'content-type': [
{
'key': 'Content-Type',
'value': 'application/x-mpegURL'
}
],
'access-control-allow-methods': [
{
'key': 'Access-Control-Allow-Methods',
'value': 'GET,HEAD'
}
],
'access-control-allow-origin': [
{
'key': 'Access-Control-Allow-Origin',
'value': '*'
}
]
},
'body': ''
}
return response
В этом коде есть синтаксическая ошибка:
const signedBody = srcBody.replace(/\.m3u8/g, `.m3u8?${qs}`).replace(/\.ts/g, `.ts?${qs}`);
Я застрял с этим. Как я могу преобразовать или что эквивалентно этим кодам в Python?
const key = request.uri.substring(1);
const signedBody = srcBody.replace(/\.m3u8/g, `.m3u8?${qs}`).replace(/\.ts/g, `.ts?${qs}`);