-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtemplate.yaml
More file actions
103 lines (98 loc) · 3.52 KB
/
template.yaml
File metadata and controls
103 lines (98 loc) · 3.52 KB
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# Este es un archivo de plantilla de AWS SAM.
# Define la arquitectura de tu aplicación serverless.
# Documentación: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-specification.html
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >-
Una función Lambda que se activa con S3, descarga una imagen,
y crea múltiples resoluciones (thumbnail, medium, large).
# Parámetros que se pueden pasar durante el despliegue
Parameters:
SourceBucketName:
Type: String
Description: El nombre del bucket S3 donde se subirán las imágenes originales.
ThumbPrefix:
Type: String
Description: El prefijo (carpeta) para las imágenes de tamaño thumbnail.
Default: 'thumbnails'
MediumPrefix:
Type: String
Description: El prefijo (carpeta) para las imágenes de tamaño mediano.
Default: 'medium'
OriginalsPrefix:
Type: String
Description: El prefijo (carpeta) donde se esperan las imágenes originales para ser procesadas.
Default: 'originals'
# Propiedades globales para todos los recursos serverless
Globals:
Function:
Timeout: 15 # Timeout de 15 segundos para la función
MemorySize: 512 # 512 MB de memoria, bueno para procesamiento de imágenes
# Definición de los recursos de nuestra aplicación
Resources:
SourceBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: !Ref SourceBucketName
ImageProcessorFunction:
Type: AWS::Serverless::Function
Properties:
# La ubicación de nuestro código fuente. '.' significa el directorio actual.
# SAM se encargará de empaquetar solo lo necesario.
CodeUri: .
# El manejador: archivo `src/handler.js`, función exportada `handler`
Handler: src/handler.handler
Runtime: nodejs24.x
# Usar arquitectura ARM64 (Graviton2) es más barato y rápido para muchas cargas de trabajo
Architectures:
- arm64
# Variables de entorno que se pasarán a la función Lambda
Environment:
Variables:
BUCKET_NAME: !Ref SourceBucketName
THUMB_PREFIX: !Ref ThumbPrefix
MEDIUM_PREFIX: !Ref MediumPrefix
ORIGINAL_PREFIX: !Ref OriginalsPrefix
# Políticas de permisos que SAM adjuntará a la función
Policies:
# Da permisos de Lectura, Escritura y Borrado al bucket especificado
- S3CrudPolicy:
BucketName: !Ref SourceBucketName
# Eventos que disparan esta función
Events:
ImageUploadTriggerJPG:
Type: S3
Properties:
Bucket: !Ref SourceBucket
Events: s3:ObjectCreated:*
Filter:
S3Key:
Rules:
- Name: prefix
Value: !Ref OriginalsPrefix
- Name: suffix
Value: .jpg
ImageUploadTriggerPNG:
Type: S3
Properties:
Bucket: !Ref SourceBucket
Events: s3:ObjectCreated:*
Filter:
S3Key:
Rules:
- Name: prefix
Value: !Ref OriginalsPrefix
- Name: suffix
Value: .png
ImageUploadTriggerJPEG:
Type: S3
Properties:
Bucket: !Ref SourceBucket
Events: s3:ObjectCreated:*
Filter:
S3Key:
Rules:
- Name: prefix
Value: !Ref OriginalsPrefix
- Name: suffix
Value: .jpeg