2026-04-03 17:16:08 -04:00
|
|
|
AWSTemplateFormatVersion: "2010-09-09"
|
|
|
|
|
Transform: AWS::Serverless-2016-10-31
|
|
|
|
|
Description: 3CX Ring Group After-Hours Scheduler
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
Timezone:
|
|
|
|
|
Type: String
|
|
|
|
|
Default: "America/New_York"
|
2026-04-03 18:30:33 -04:00
|
|
|
ShiftTableName:
|
|
|
|
|
Type: String
|
|
|
|
|
Default: "afterhours-shifts"
|
|
|
|
|
Description: DynamoDB table for Slack shift manager overrides
|
2026-04-03 17:16:08 -04:00
|
|
|
|
|
|
|
|
Globals:
|
|
|
|
|
Function:
|
|
|
|
|
Runtime: python3.12
|
|
|
|
|
Timeout: 30
|
|
|
|
|
MemorySize: 128
|
|
|
|
|
|
|
|
|
|
Resources:
|
|
|
|
|
SchedulerFunction:
|
|
|
|
|
Type: AWS::Serverless::Function
|
|
|
|
|
Properties:
|
|
|
|
|
FunctionName: 3cx-ring-group-scheduler
|
|
|
|
|
Handler: src/handler.handler
|
|
|
|
|
CodeUri: .
|
|
|
|
|
Environment:
|
|
|
|
|
Variables:
|
|
|
|
|
SSM_PREFIX: /3cx-scheduler
|
|
|
|
|
TZ: !Ref Timezone
|
2026-04-03 18:30:33 -04:00
|
|
|
SHIFT_TABLE: !Ref ShiftTableName
|
2026-04-03 17:16:08 -04:00
|
|
|
Policies:
|
2026-04-03 17:40:58 -04:00
|
|
|
- Statement:
|
|
|
|
|
- Effect: Allow
|
|
|
|
|
Action:
|
|
|
|
|
- ssm:GetParametersByPath
|
|
|
|
|
- ssm:GetParameter
|
|
|
|
|
- ssm:GetParameters
|
|
|
|
|
Resource:
|
|
|
|
|
- !Sub "arn:aws:ssm:${AWS::Region}:${AWS::AccountId}:parameter/3cx-scheduler"
|
|
|
|
|
- !Sub "arn:aws:ssm:${AWS::Region}:${AWS::AccountId}:parameter/3cx-scheduler/*"
|
|
|
|
|
- Effect: Allow
|
|
|
|
|
Action:
|
|
|
|
|
- kms:Decrypt
|
|
|
|
|
Resource: "*"
|
|
|
|
|
Condition:
|
|
|
|
|
StringEquals:
|
|
|
|
|
"kms:ViaService": !Sub "ssm.${AWS::Region}.amazonaws.com"
|
2026-04-03 18:30:33 -04:00
|
|
|
- Effect: Allow
|
|
|
|
|
Action:
|
|
|
|
|
- dynamodb:GetItem
|
|
|
|
|
Resource:
|
|
|
|
|
- !Sub "arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${ShiftTableName}"
|
2026-04-03 17:16:08 -04:00
|
|
|
Events:
|
|
|
|
|
# EST: 8am ET = 13:00 UTC (Nov-Mar)
|
|
|
|
|
DailyScheduleEST:
|
|
|
|
|
Type: Schedule
|
|
|
|
|
Properties:
|
|
|
|
|
Schedule: cron(0 13 ? * * *)
|
|
|
|
|
Description: "Update 3CX ring group at 8am EST (Nov-Mar)"
|
|
|
|
|
Enabled: true
|
|
|
|
|
# EDT: 8am ET = 12:00 UTC (Mar-Nov)
|
|
|
|
|
DailyScheduleEDT:
|
|
|
|
|
Type: Schedule
|
|
|
|
|
Properties:
|
|
|
|
|
Schedule: cron(0 12 ? * * *)
|
|
|
|
|
Description: "Update 3CX ring group at 8am EDT (Mar-Nov)"
|
|
|
|
|
Enabled: true
|
|
|
|
|
|
|
|
|
|
# SSM Parameters: create these manually via CLI before deploying.
|
|
|
|
|
# See setup instructions in the deploy section below.
|
|
|
|
|
|
|
|
|
|
Outputs:
|
|
|
|
|
FunctionArn:
|
|
|
|
|
Value: !GetAtt SchedulerFunction.Arn
|
|
|
|
|
FunctionName:
|
|
|
|
|
Value: !Ref SchedulerFunction
|