38 lines
1.1 KiB
Python
38 lines
1.1 KiB
Python
import boto3
|
|
from datetime import datetime, timedelta
|
|
import json
|
|
import main
|
|
|
|
def one_time_schedule(
|
|
lambda_arn: str,
|
|
schedule_role_arn: str,
|
|
minutes: int,
|
|
param: main.Param
|
|
) -> str:
|
|
client = boto3.client('scheduler')
|
|
schedule_time = datetime.now() + timedelta(minutes = minutes)
|
|
schedule_expression = f"at({schedule_time.isoformat()})"
|
|
|
|
schedule_name = f"menu-trigger-{schedule_time.strftime('%Y%m%d%H%M%S')}"
|
|
rule_response = client.create_schedule(
|
|
Name = schedule_name,
|
|
ScheduleExpression = schedule_expression,
|
|
ScheduleExpressionTimezone = 'Asia/Seoul',
|
|
State = 'ENABLED',
|
|
Target = {
|
|
'Arn': lambda_arn,
|
|
'RoleArn': schedule_role_arn,
|
|
'Input': json.dumps({
|
|
'slack_url': param.slack_url,
|
|
'date': param.date,
|
|
'count': param.count + 1
|
|
}),
|
|
'RetryPolicy': {'MaximumRetryAttempts': 0}
|
|
},
|
|
)
|
|
client.update_schedule(
|
|
Name = schedule_name,
|
|
ActionAfterCompletion = 'DELETE'
|
|
)
|
|
return rule_response['RuleArn']
|
|
|