Возвращайте значение из пользовательского ресурса каждый день Cloudformation - PullRequest
0 голосов
/ 30 апреля 2020

Я создал лямбду с CloudFormation, которая возвращает текущую дату минус X дней. Мне нужно это значение каждый день, чтобы выполнить правило. Однако я не знаю, как это сделать, потому что я думаю, что я должен внести небольшие изменения в код, чтобы получить новое значение.

Мой код:

lambdaRL:
    Type: 'AWS::Lambda::Function'
    DependsOn:
        - lambdaRLRole
    Properties:
        Code:
        ZipFile: !Sub |
            from datetime import datetime, date, timedelta
            import cfnresponse
            import os
            def lambda_handler(event, context):
                current_delta = datetime.now() - timedelta(days=int(os.environ['DaysToSubstract']))
                current_delta_str = current_delta.strftime("%Y-%m-%d %H:%M:%S")
                responseData = {}
                responseData['Dates'] = current_delta_str
                cfnresponse.send(event, context, cfnresponse.SUCCESS, responseData)
        Environment:
        Variables:
            DaysToSubstract: !Sub '${DaysToSubstract}'
        Handler: index.lambda_handler
        MemorySize: 128
        Role: !GetAtt lambdaRLRole.Arn
        Runtime: python3.7
        Timeout: 30
lambdaRLRole:
    Type: 'AWS::IAM::Role'
    Properties:
        RoleName: !Sub 'datesRL-lambda-role'
        AssumeRolePolicyDocument:
        Version: 2012-10-17
        Statement:
            - Action:
                - 'sts:AssumeRole'
            Effect: Allow
            Principal:
                Service:
                - lambda.amazonaws.com
        Path: /service-role/
        Policies:
        - PolicyName: !Sub 'lambda-datesRL-lambda-logs-policy'
            PolicyDocument:
            Version: 2012-10-17
            Statement:
                - Action:
                    - 'logs:CreateLogGroup'
                    - 'logs:CreateLogStream'
                    - 'logs:PutLogEvents'
                Effect: Allow
                Resource:
                    - !Sub 'arn:aws:logs:*:${AWS::AccountId}:log-group:/aws/lambda/*'
    lambdaRLD:
    Type: 'Custom::Value'
    Properties:
        ServiceToken: !GetAtt lambdaRL.Arn

И мой правило:

ETLUsuariosRule:
    Type: 'AWS::Events::Rule'
    Properties:
        Name: !Sub 'sm'
        Description: Cloudwatch trigger 
        ScheduleExpression: cron(20 06 ? * MON-FRI *)
        State: ENABLED
        Targets:
        - Arn: !Ref UsuariosStateMachine
            Id: !Sub 'etl-target'
            RoleArn:
            'Fn::ImportValue':
                'Fn::Sub': '${StepFunctionsStack}-InvokeStepFunctionRoleArn'
            Input: !Sub
            - |
                {
                "RL": {
                "jobCommand": [
                "--start_date",
                "${Dates}",
                "--end_date",
                "${Dates}",
                ]
            }
            }
        - Dates: !GetAtt lambdaRLD.Dates

Как мне выполнить правило с обновленной текущей датой?

Большое спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...