-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
86 lines (66 loc) · 1.97 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
package main
import (
"context"
"encoding/json"
"fmt"
"os"
"github.com/aws/aws-lambda-go/events"
"github.com/aws/aws-lambda-go/lambda"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/mediaconvert"
"go.uber.org/zap"
"github.com/sdn0303/golog"
"github.com/sdn0303/transcoder/infra/mediaconverter"
"github.com/sdn0303/transcoder/infra/storage"
)
var logger *golog.Logger
const (
jobSettingBucket = "job-settings"
jobSettingKey = "job.json"
)
func generateS3Path(bucketName, key string) string {
return fmt.Sprintf("s3://%s/%s", bucketName, key)
}
func loadJobSettings(inputKey, optKey string) (*mediaconvert.JobSettings, error) {
s3 := storage.New()
wb, err := s3.Downloader(jobSettingBucket, jobSettingKey)
if err != nil {
logger.Error("downloader failed", zap.Error(err))
return nil, err
}
logger.Info("Start to Create Job settings")
var js *mediaconvert.JobSettings
if err := json.Unmarshal(wb.Bytes(), &js); err != nil {
logger.Error("failed to unmarshal job settings", zap.Error(err))
return nil, err
}
js.Inputs[0].FileInput = aws.String(inputKey)
js.OutputGroups[0].OutputGroupSettings.HlsGroupSettings.Destination = aws.String(optKey)
js.OutputGroups[1].OutputGroupSettings.FileGroupSettings.Destination = aws.String(optKey)
return js, nil
}
func handler(ctx context.Context, event events.S3Event) error {
bucketName := event.Records[0].S3.Bucket.Name
key := event.Records[0].S3.Object.Key
inputKey := generateS3Path(bucketName, key)
optKey := generateS3Path(os.Getenv("HLS_BUCKET"), key)
js, err := loadJobSettings(inputKey, optKey)
if err != nil {
logger.Error("", zap.Error(err))
return err
}
// Create MediaConvert job
mc := mediaconverter.New()
opt, err := mc.CreateJob(js)
if err != nil {
logger.Error("failed to create mediaconvert job", zap.Error(err))
return err
}
logger.Info("Job Created")
logger.Info(opt.String())
return nil
}
func main() {
logger = golog.GetInstance()
lambda.Start(handler)
}