AWS Cloudformation для создания AWS Cloudwatch Event для запуска AWS Batch - PullRequest
0 голосов
/ 06 февраля 2020

Я читал документацию для AWS событий Cloudwatch * от 1002 * до триггера AWS Пакет , и я не могу понять, как вызвать aws пакет из событий Cloudwatch:

В aws cli я могу успешно выполнить пакетное задание aws с этим bash кодом:

BATCH_JOB_QUEUE_NAME="test-batch-job-queue"
BATCH_JOB_DEFINITION_NAME="test-batch-job-def"

BATCH_JOB_DEFINITION_ARN=$( aws batch describe-job-definitions \
  --job-definition-name ${BATCH_JOB_DEFINITION_NAME} \
  --status ACTIVE \
  | jq -r '.jobDefinitions | max_by(.revision).jobDefinitionArn' \
) && echo ${BATCH_JOB_DEFINITION_ARN}

echo "Submitting job with additional ${SIZE_OF_RAM}GB RAM\n"
aws batch submit-job \
    --job-name ${BATCH_JOB_NAME} \
    --job-queue `aws batch describe-job-queues --job-queues $BATCH_JOB_QUEUE_NAME | jq ".jobQueues[].jobQueueArn" -r` \
    --job-definition $BATCH_JOB_DEFINITION_ARN \
    --parameters configFile="s3://${BUCKET_NAME}/${PROJECT_NAME}/config.json" \   <=== *****important configuration
    --container-overrides vcpus=16,memory=16000 \ .               <=== *****important configuration
    --profile ${PROJECT_NAME}-${environment}

Но с AWS Cloudwatch Events я получаю сообщение об ошибке в my cloudformation yaml

Resources:
  TestBatchSchedule:
    Type: AWS::Events::Rule
    Properties:
      Description: Test bi-monthly schedule
      Name: TestBiMonthlySchedule
      ScheduleExpression: cron(0 7 * * 2) # every two weeks at 7 am
      State: 'ENABLED'
      Targets: 
        - Arn: test-arn
          BatchParameters: 
            JobDefinition: 
              Fn::ImportValue: !Sub "${Environment}-test-batch-def"
            JobName: "test-batch-scheduled-job"
            RetryStrategy: 
              Attempts: 1
          Id: test-id
          InputTransformer: 
            InputPathsMap:
              parameters:
                configFile: s3://test-batch-bucket/test-project/config.json
              containerProperties:
                vcpus: 16
                memory: 32000
            InputTemplate: "s3://test-batch-bucket/test-project/config.json"

Возвращает эту ошибку:

Значение свойства InputPathsMap должно быть объектом со свойствами String (или простого типа)

Мой конкретный c вопрос состоит в том, как добавить раздел parameters и container overrides к облачной информации AWS :: Events :: Rule? Я хотел бы также сохранить его в yaml.

1 Ответ

0 голосов
/ 12 февраля 2020

Согласно https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-events-rule-inputtransformer.html#cfn -events-rule-inputtransformer-inputpathsmap

InputPathsMap - это пары ключ-значение массива, где каждое значение является допустимым JSON путем , Вы можете иметь до 10 пар ключ-значение. Вы должны использовать JSON точечную нотацию , а не скобочную нотацию.

Я не проверял, но не могли бы вы попробовать это следующим образом?

InputPathsMap:
   parameters.configFile: s3://test-batch-bucket/test-project/config.json
   parameters.containerProperties.vcpus: 16
   parameters.containerProperties.memory: 32000
...