service: retrofit-platform provider: name: aws region: eu-west-2 runtime: python3.11 architecture: x86_64 environment: API_KEY: ${env:API_KEY} ENVIRONMENT: ${env:ENVIRONMENT} SECRET_KEY: ${env:SECRET_KEY} PLAN_TRIGGER_BUCKET: ${env:PLAN_TRIGGER_BUCKET} DATA_BUCKET: ${env:DATA_BUCKET} PREDICTIONS_BUCKET: ${env:PREDICTIONS_BUCKET} DOMAIN_NAME: ${env:DOMAIN_NAME} EPC_AUTH_TOKEN: ${env:EPC_AUTH_TOKEN} DB_HOST: ${env:DB_HOST} DB_NAME: ${env:DB_NAME} DB_USERNAME: ${env:DB_USERNAME} DB_PASSWORD: ${env:DB_PASSWORD} DB_PORT: ${env:DB_PORT} ECR_URI: ${env:ECR_URI} GITHUB_SHA: ${env:GITHUB_SHA} SAP_PREDICTIONS_BUCKET: ${env:SAP_PREDICTIONS_BUCKET} CARBON_PREDICTIONS_BUCKET: ${env:CARBON_PREDICTIONS_BUCKET} HEAT_PREDICTIONS_BUCKET: ${env:HEAT_PREDICTIONS_BUCKET} HEATING_KWH_PREDICTIONS_BUCKET: ${env:HEATING_KWH_PREDICTIONS_BUCKET} HOTWATER_KWH_PREDICTIONS_BUCKET: ${env:HOTWATER_KWH_PREDICTIONS_BUCKET} ENERGY_ASSESSMENTS_BUCKET: ${env:ENERGY_ASSESSMENTS_BUCKET} GOOGLE_SOLAR_API_KEY: ${env:GOOGLE_SOLAR_API_KEY} ENGINE_SQS_URL: Ref: EngineQueue plugins: - serverless-python-requirements - serverless-domain-manager custom: pythonRequirements: fileName: backend/app/requirements/requirements.txt dockerizePip: true customDomain: domainName: api.${self:provider.environment.DOMAIN_NAME} createRoute53Record: true certificateArn: ${ssm:/ssl_certificate_arn} functions: fastapi-backend: handler: backend.app.main.handler timeout: 30 memorySize: 512 role: FastApiLambdaRole events: - http: path: /{proxy+} method: ANY model-engine-lambda: image: uri: ${env:ECR_URI}:${env:GITHUB_SHA} timeout: 900 memorySize: 3008 role: EngineLambdaRole events: - sqs: arn: arn:aws:sqs:${self:provider.region}:${aws:accountId}:model-engine-queue batchSize: 1 resources: Resources: EngineQueue: Type: AWS::SQS::Queue Properties: QueueName: model-engine-queue VisibilityTimeout: 910 # must be >= lambda timeout (900) FastApiLambdaRole: Type: AWS::IAM::Role Properties: RoleName: retrofit-fastapi-lambda-role-${self:provider.region} AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: - lambda.amazonaws.com Action: - sts:AssumeRole Policies: - PolicyName: FastApiLambdaPolicy PolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Action: - logs:CreateLogGroup - logs:CreateLogStream - logs:PutLogEvents Resource: arn:aws:logs:*:*:* - Effect: Allow Action: - sqs:SendMessage Resource: - Fn::GetAtt: [ EngineQueue, Arn ] - Effect: Allow Action: - s3:GetObject - s3:ListBucket Resource: - arn:aws:s3:::${env:PLAN_TRIGGER_BUCKET} - arn:aws:s3:::${env:PLAN_TRIGGER_BUCKET}/* - arn:aws:s3:::${env:DATA_BUCKET}/* - arn:aws:s3:::${env:ENERGY_ASSESSMENTS_BUCKET}/* - arn:aws:s3:::${env:SAP_PREDICTIONS_BUCKET}/* - arn:aws:s3:::${env:CARBON_PREDICTIONS_BUCKET}/* - arn:aws:s3:::${env:HEAT_PREDICTIONS_BUCKET}/* - arn:aws:s3:::${env:HEATING_KWH_PREDICTIONS_BUCKET}/* - arn:aws:s3:::${env:HOTWATER_KWH_PREDICTIONS_BUCKET}/* EngineLambdaRole: Type: AWS::IAM::Role Properties: RoleName: retrofit-engine-lambda-role-${self:provider.region} AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: - lambda.amazonaws.com Action: - sts:AssumeRole Policies: - PolicyName: EngineLambdaPolicy PolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Action: - logs:CreateLogGroup - logs:CreateLogStream - logs:PutLogEvents Resource: arn:aws:logs:*:*:* - Effect: Allow Action: - sqs:ReceiveMessage - sqs:DeleteMessage - sqs:GetQueueAttributes Resource: - Fn::GetAtt: [ EngineQueue, Arn ] - Effect: Allow Action: - s3:* Resource: - arn:aws:s3:::${env:PLAN_TRIGGER_BUCKET} - arn:aws:s3:::${env:PLAN_TRIGGER_BUCKET}/* - arn:aws:s3:::${env:PREDICTIONS_BUCKET} - arn:aws:s3:::${env:PREDICTIONS_BUCKET}/* - arn:aws:s3:::${env:DATA_BUCKET} - arn:aws:s3:::${env:DATA_BUCKET}/* - arn:aws:s3:::${env:ENERGY_ASSESSMENTS_BUCKET} - arn:aws:s3:::${env:ENERGY_ASSESSMENTS_BUCKET}/* - arn:aws:s3:::${env:SAP_PREDICTIONS_BUCKET} - arn:aws:s3:::${env:SAP_PREDICTIONS_BUCKET}/* - arn:aws:s3:::${env:CARBON_PREDICTIONS_BUCKET} - arn:aws:s3:::${env:CARBON_PREDICTIONS_BUCKET}/* - arn:aws:s3:::${env:HEAT_PREDICTIONS_BUCKET} - arn:aws:s3:::${env:HEAT_PREDICTIONS_BUCKET}/* - arn:aws:s3:::${env:HEATING_KWH_PREDICTIONS_BUCKET} - arn:aws:s3:::${env:HEATING_KWH_PREDICTIONS_BUCKET}/* - arn:aws:s3:::${env:HOTWATER_KWH_PREDICTIONS_BUCKET} - arn:aws:s3:::${env:HOTWATER_KWH_PREDICTIONS_BUCKET}/*