206 lines
5.8 KiB
YAML
206 lines
5.8 KiB
YAML
|
|
AWSTemplateFormatVersion: '2010-09-09'
|
||
|
|
Transform: AWS::Serverless-2016-10-31
|
||
|
|
|
||
|
|
Parameters:
|
||
|
|
Environment:
|
||
|
|
Type: String
|
||
|
|
AllowedValues:
|
||
|
|
- dev
|
||
|
|
- prod
|
||
|
|
Description: The environment (e.g., dev or prod)
|
||
|
|
TencyZipsBucket:
|
||
|
|
Type: String
|
||
|
|
Description: Where tency uploads their original zips
|
||
|
|
TencyJamTracksBucket:
|
||
|
|
Type: String
|
||
|
|
Description: Where we unzip their zipped files
|
||
|
|
EfsId:
|
||
|
|
Type: String
|
||
|
|
Description: The ID of the EFS to use for scratch
|
||
|
|
VpcId:
|
||
|
|
Type: String
|
||
|
|
Description: The ID of the VPC where the Lambda function and EFS are deployed.
|
||
|
|
SubnetIds:
|
||
|
|
Type: CommaDelimitedList
|
||
|
|
Description: The IDs of the subnets where the Lambda function will be deployed.
|
||
|
|
SgIds:
|
||
|
|
Type: CommaDelimitedList
|
||
|
|
Description: The Id Of the security group
|
||
|
|
MountPath:
|
||
|
|
Type: String
|
||
|
|
Description: The path to mount the EFS volume into the lamdda
|
||
|
|
JamTrackContainerPath:
|
||
|
|
Type: String
|
||
|
|
Description: The local or container registry path to the jamtrack container
|
||
|
|
DbHost:
|
||
|
|
Type: String
|
||
|
|
Description: potsgresql host
|
||
|
|
DbUser:
|
||
|
|
Type: String
|
||
|
|
Description: postgresql user
|
||
|
|
DbPass:
|
||
|
|
Type: String
|
||
|
|
Description: postgresql pass
|
||
|
|
DbName:
|
||
|
|
Type: String
|
||
|
|
Description: db name
|
||
|
|
AwsBucket:
|
||
|
|
Type: String
|
||
|
|
Description: aws bucket
|
||
|
|
AwsBucketPublic:
|
||
|
|
Type: String
|
||
|
|
Description: aws bucket public
|
||
|
|
|
||
|
|
Globals:
|
||
|
|
Function:
|
||
|
|
#Runtime: ruby3.3
|
||
|
|
CodeUri: ./
|
||
|
|
Architectures:
|
||
|
|
- x86_64
|
||
|
|
#Handler: app.lambda_handler
|
||
|
|
|
||
|
|
Resources:
|
||
|
|
TencyUnzipFunction:
|
||
|
|
Type: AWS::Serverless::Function
|
||
|
|
Properties:
|
||
|
|
#Handler: lambdas/unzipper/app.lambda_handler
|
||
|
|
#Runtime: ruby3.3
|
||
|
|
# Layers:
|
||
|
|
# - !Ref AssetLayer
|
||
|
|
# - !Ref PGLayer
|
||
|
|
# - !Ref SharedLayer
|
||
|
|
MemorySize: 500
|
||
|
|
Timeout: 900
|
||
|
|
PackageType: Image
|
||
|
|
ImageUri: !Ref JamTrackContainerPath
|
||
|
|
FileSystemConfigs:
|
||
|
|
- Arn: !GetAtt EFSMountTarget.Arn
|
||
|
|
LocalMountPath: /mnt/efs
|
||
|
|
VpcConfig:
|
||
|
|
SubnetIds: !Ref SubnetIds
|
||
|
|
SecurityGroupIds: !Ref SgIds
|
||
|
|
Role: !GetAtt ZipExtractorFunctionRole.Arn
|
||
|
|
Environment:
|
||
|
|
Variables:
|
||
|
|
ENV: !Ref Environment
|
||
|
|
DB_HOST: !Ref DbHost
|
||
|
|
DB_USER: !Ref DbUser
|
||
|
|
DB_PASS: !Ref DbPass
|
||
|
|
DB_NAME: !Ref DbName
|
||
|
|
TENCY_ZIPS_BUCKET: !Ref TencyZipsBucket
|
||
|
|
TENCY_JAMTRACKS_BUCKET: !Ref TencyJamTracksBucket
|
||
|
|
AWS_BUCKET: !Ref AwsBucket
|
||
|
|
AWS_BUCKET_PUBLIC: !Ref AwsBucketPublic
|
||
|
|
FFMPEG_PATH: /opt/bin/ffmpeg
|
||
|
|
FFMPEG_PATH_MP3: /opt/bin/ffmpeg
|
||
|
|
JMEP_DIR: /var/task/shared/jmep
|
||
|
|
END_ON_FAIL: 1
|
||
|
|
MOUNT_PATH: !Ref MountPath
|
||
|
|
# AssetLayer:
|
||
|
|
# Type: AWS::Serverless::LayerVersion
|
||
|
|
# Properties:
|
||
|
|
# LayerName: asset-layer
|
||
|
|
# ContentUri: s3://jamkazam-repo/lambda-assets/jamtrack-importer-assets.zip
|
||
|
|
# ContentUri: ./assets/assets.zip
|
||
|
|
# CompatibleRuntimes:
|
||
|
|
# - ruby3.3
|
||
|
|
# PGLayer:
|
||
|
|
# Type: AWS::Serverless::LayerVersion
|
||
|
|
# Properties:
|
||
|
|
# CompatibleRuntimes:
|
||
|
|
# - ruby3.3
|
||
|
|
# ContentUri: 'pg_layer'
|
||
|
|
# Metadata:
|
||
|
|
# BuildMethod: makefile
|
||
|
|
|
||
|
|
# SharedLayer:
|
||
|
|
# Type: AWS::Serverless::LayerVersion
|
||
|
|
# Properties:
|
||
|
|
# LayerName: shared-layer
|
||
|
|
# Description: Shared code layer for Lambda functions
|
||
|
|
# ContentUri: shared/
|
||
|
|
# CompatibleRuntimes:
|
||
|
|
# - ruby3.3
|
||
|
|
|
||
|
|
# IAM Role for Lambda
|
||
|
|
ZipExtractorFunctionRole:
|
||
|
|
Type: AWS::IAM::Role
|
||
|
|
Properties:
|
||
|
|
AssumeRolePolicyDocument:
|
||
|
|
Version: "2012-10-17"
|
||
|
|
Statement:
|
||
|
|
- Effect: Allow
|
||
|
|
Principal:
|
||
|
|
Service: lambda.amazonaws.com
|
||
|
|
Action: sts:AssumeRole
|
||
|
|
ManagedPolicyArns:
|
||
|
|
- !Ref EFSFullAccessPolicy
|
||
|
|
- "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
|
||
|
|
Policies:
|
||
|
|
- PolicyName: S3AccessPolicy
|
||
|
|
PolicyDocument:
|
||
|
|
Version: "2012-10-17"
|
||
|
|
Statement:
|
||
|
|
- Effect: Allow
|
||
|
|
Action:
|
||
|
|
- "s3:ListBucket"
|
||
|
|
- "s3:GetObject"
|
||
|
|
Resource:
|
||
|
|
- !Sub "arn:aws:s3:::${TencyZipsBucket}"
|
||
|
|
- !Sub "arn:aws:s3:::${TencyZipsBucket}/*"
|
||
|
|
- Effect: Allow
|
||
|
|
Action:
|
||
|
|
- "s3:ListBucket"
|
||
|
|
- "s3:GetObject"
|
||
|
|
- "s3:PutObject"
|
||
|
|
Resource:
|
||
|
|
- !Sub "arn:aws:s3:::${TencyJamTracksBucket}"
|
||
|
|
- !Sub "arn:aws:s3:::${TencyJamTracksBucket}/*"
|
||
|
|
- PolicyName: VPCNetworkingPolicy
|
||
|
|
PolicyDocument:
|
||
|
|
Version: "2012-10-17"
|
||
|
|
Statement:
|
||
|
|
- Effect: Allow
|
||
|
|
Action:
|
||
|
|
- "ec2:CreateNetworkInterface"
|
||
|
|
- "ec2:DescribeNetworkInterfaces"
|
||
|
|
- "ec2:DeleteNetworkInterface"
|
||
|
|
Resource: "*" # You can narrow this down by specifying resources if needed
|
||
|
|
# Managed Policy for EFS Access
|
||
|
|
EFSFullAccessPolicy:
|
||
|
|
Type: AWS::IAM::ManagedPolicy
|
||
|
|
Properties:
|
||
|
|
Description: EFS full access for Lambda
|
||
|
|
PolicyDocument:
|
||
|
|
Version: "2012-10-17"
|
||
|
|
Statement:
|
||
|
|
- Effect: Allow
|
||
|
|
Action:
|
||
|
|
- "elasticfilesystem:ClientMount"
|
||
|
|
- "elasticfilesystem:ClientWrite"
|
||
|
|
Resource: !GetAtt EFSMountTarget.Arn
|
||
|
|
|
||
|
|
|
||
|
|
# EFS Mount Target
|
||
|
|
# MountTaget1:
|
||
|
|
# Type: AWS::EFS::MountTarget
|
||
|
|
# Properties:
|
||
|
|
# FileSystemId: !Ref EfsId
|
||
|
|
# SubnetId: !Select [0, !Ref SubnetIds] # us-east1
|
||
|
|
# SecurityGroups: [!Ref SgId]
|
||
|
|
|
||
|
|
# EFS Mount Target for Lambda
|
||
|
|
EFSMountTarget:
|
||
|
|
Type: AWS::EFS::AccessPoint
|
||
|
|
Properties:
|
||
|
|
FileSystemId: !Ref EfsId
|
||
|
|
PosixUser:
|
||
|
|
Uid: "1000"
|
||
|
|
Gid: "1000"
|
||
|
|
RootDirectory:
|
||
|
|
CreationInfo:
|
||
|
|
OwnerUid: "1000"
|
||
|
|
OwnerGid: "1000"
|
||
|
|
Permissions: "0777"
|
||
|
|
Path: !Ref MountPath
|