diff --git a/modules/cloud_service_providers/aws_cloud/README.txt b/modules/cloud_service_providers/aws_cloud/README.txt
index 997313b..551dd7f 100644
--- a/modules/cloud_service_providers/aws_cloud/README.txt
+++ b/modules/cloud_service_providers/aws_cloud/README.txt
@@ -247,3 +247,55 @@ x... NOTE: NOT IMPLEMENTED. SHOWN ONLY AS A REFERENCE AND PROPOSED STRUCTURE
 LIMITATION
 ==========
 - Some of features are not implemented
+
+AWS INSTANCE SCHEDULER INTEGRATION
+==================================
+aws_cloud provides an integration with the AWS Instance Scheduler.  This provides a
+way for instances to be started and stopped on a set schedule, providing some
+monetary savings on hosting.
+
+To set this up, please have an understanding of AWS services including CloudFormation,
+Lambda Functions and DynamoDB.  For more information about the service, visit this url:
+
+https://docs.aws.amazon.com/solutions/latest/instance-scheduler/overview.html
+
+Visit the following link for more detailed instructions for the AWS setup.
+https://docs.aws.amazon.com/solutions/latest/instance-scheduler/deployment.html
+
+Prerequisite
+- Must have AWS console permissions to launch a CloudFormation template, use CloudWatch,
+Lambda functions and access DynamoDB, AWS SNS and IAM.  In other words, you should have
+administrator access.
+- The user credentials launching the AWS Instance Scheduler must match the user (along
+with API Credentials) setting up the Cloud Configs in aws_cloud module.
+
+1.  Launch the Instance Scheduler Stack described here:
+https://docs.aws.amazon.com/solutions/latest/instance-scheduler/deployment.html#step1
+
+2.  Customize the launch parameters in the template. There are two important parameters to note.
+    a.  Instance Scheduler tag name - Take note of this value.  This is needed when configuring
+    the aws_cloud side.
+    b.  Regions - Enter _ALL_ the regions (comma delimited) that Instance Scheduler should control.
+
+    For example, if the aws_cloud module is configured for us-east-1 and us-west-2.
+    Enter "us-east-1,us-west-2" into this field.
+
+    To add regions after launch, do so in the DynamoDB table.
+
+3.  Once the stack is launched, configure the period and schedules.  See this link:
+https://docs.aws.amazon.com/solutions/latest/instance-scheduler/deployment.html#step2
+
+Configuring the schedule and periods in DynamoDB is the easiest method.
+
+4.  Configure the aws_cloud module to use the stack.
+    a.  Go to Configuration > Web services > AWS Cloud Settings.
+    b.  Enter the Instance Scheduler tag name (from Step 2.a) into the Schedule Tag field.
+    c.  Enter the name (from the name column in DynamoDB in Step 3) and a display label for
+    each schedule.
+
+After the configuration is completed, the Schedule dropdown in the "Launch Instance Form" and "Edit
+Instance Form" is populated with the values entered in Step 4.c.
+
+
+
+
diff --git a/modules/cloud_service_providers/aws_cloud/aws_cloud.install b/modules/cloud_service_providers/aws_cloud/aws_cloud.install
index b96bd2c..5c3ff77 100644
--- a/modules/cloud_service_providers/aws_cloud/aws_cloud.install
+++ b/modules/cloud_service_providers/aws_cloud/aws_cloud.install
@@ -4,6 +4,7 @@
  * @file
  * Install and updates for aws_cloud
  */
+use Drupal\Core\Config\FileStorage;
 
 /**
  * Add the termination_timestamp field to aws_cloud_instance.  Backup
@@ -46,3 +47,60 @@ function aws_cloud_update_8104() {
   $config = $config_factory->getEditable('aws_cloud.settings');
   $config->set('aws_cloud_instance_terminate', FALSE);  $config->save();
 }
+
+/**
+ * Add support for AWS Instance Scheduler.  This update runs entity db update.
+ * Backup database before running this update.
+ */
+function aws_cloud_update_8105() {
+  \Drupal::entityDefinitionUpdateManager()->applyupdates();
+  $config_factory = \Drupal::configFactory();
+  $config = $config_factory->getEditable('aws_cloud.settings');
+  $config->set('aws_cloud_scheduler_tag', 'Schedule');
+  $config->save();
+}
+
+/**
+ * Add schedule field to aws_cloud server template implementation
+ */
+function aws_cloud_update_8106() {
+  $config_path = drupal_get_path('module', 'aws_cloud') . '/config/install';
+  $source      = new FileStorage($config_path);
+  // Obtain the storage manager for field storage bases
+  // Create a new field from the yaml configuration and save
+  \Drupal::entityManager()->getStorage('field_storage_config')
+    ->create($source->read('field.storage.cloud_server_template.field_schedule'))
+    ->save();
+
+  // Obtain the storage manager for field instances
+  // Create a new field instance from the yaml configuration and save
+  \Drupal::entityManager()->getStorage('field_config')
+    ->create($source->read('field.field.cloud_server_template.aws_cloud.field_schedule'))
+    ->save();
+
+  // Reload the default field display and form.
+  // Reference https://drupal.stackexchange.com/questions/164713/how-do-i-update-the-configuration-of-a-module
+  $files = [
+    'core.entity_view_display.cloud_server_template.aws_cloud.default.yml',
+    'core.entity_form_display.cloud_server_template.aws_cloud.default.yml'
+  ];
+  $config_manager = \Drupal::service('config.manager');
+  $config_path = realpath(drupal_get_path('module', 'aws_cloud')) . '/config/install';
+
+  foreach ($files as $file) {
+    $filename = $config_path . '/' . $file;
+    $file = file_get_contents($filename);
+    $value = \Drupal\Component\Serialization\Yaml::decode($file);
+    $type = $config_manager->getEntityTypeIdByName(basename($filename));
+    $entity_manager = $config_manager->getEntityManager();
+    $definition = $entity_manager->getDefinition($type);
+    $id_key = $definition->getKey('id');
+    $id = $value[$id_key];
+    $entity_storage = $entity_manager->getStorage($type);
+    $entity = $entity_storage->load($id);
+    if ($entity) {
+      $entity = $entity_storage->updateFromStorageRecord($entity, $value);
+      $entity->save();
+    }
+  }
+}
\ No newline at end of file
diff --git a/modules/cloud_service_providers/aws_cloud/aws_cloud.module b/modules/cloud_service_providers/aws_cloud/aws_cloud.module
index 73ad0e6..7a0a911 100644
--- a/modules/cloud_service_providers/aws_cloud/aws_cloud.module
+++ b/modules/cloud_service_providers/aws_cloud/aws_cloud.module
@@ -115,6 +115,25 @@ function aws_cloud_availbility_zone_allowed_values_function(FieldStorageConfig $
   return $availability_zones;
 }
 
+/**
+ * Set dynamic allowed values for the alignment field.
+ *
+ * @param \Drupal\field\Entity\FieldStorageConfig $definition
+ *   The field definition.
+ * @param \Drupal\Core\Entity\ContentEntityInterface|null $entity
+ *   The entity being created if applicable.
+ * @param bool $cacheable
+ *   Boolean indicating if the results are cacheable.
+ *
+ * @return array
+ *   An array of possible key and value options.
+ *
+ * @see options_allowed_values()
+ */
+function aws_cloud_schedule_allowed_values_function(FieldStorageConfig $definition, ContentEntityInterface $entity = NULL, $cacheable) {
+  return aws_cloud_get_schedule();
+}
+
 /**
  * Implements hook_entity_bundle_field_info_alter().
  */
@@ -290,6 +309,25 @@ function aws_cloud_form_cloud_server_template_aws_cloud_launch_form_alter(&$form
     '#description' => t('The default termination date is 30 days into the future'),
     '#default_value' => DrupalDateTime::createFromTimestamp(time() + 2592000),
   ];
+
+  /* @var \Drupal\cloud_server_template\Entity\CloudServerTemplate $cloud_server_template */
+  $cloud_server_template = \Drupal::routeMatch()->getParameter('cloud_server_template');
+
+  $form['schedule'] = [
+    '#title' => t('Schedule'),
+    '#type' => 'select',
+    '#default_value' => $cloud_server_template->get('field_schedule')->value,
+    '#options' => aws_cloud_get_schedule(),
+    '#description' => t('Specify a start/stop schedule. This helps reduce server hosting costs.'),
+  ];
+  if ($cloud_server_template->get('field_instance_shutdown_behavior')->value == 'terminate') {
+    // Add a warning message that setting a schedule will terminate the instance, since
+    // the shutdown behavior is terminate
+    $form['terminate_message'] = [
+      '#markup' => t('Setting a schedule will potentially terminate the instance since the <strong>%text</strong> is set to Terminate',
+        ['%text' => 'Instance Shutdown Behavior']),
+    ];
+  }
 }
 
 /**
@@ -381,3 +419,29 @@ function aws_cloud_get_instances_to_notify() {
   }
   return $instances;
 }
+
+/**
+ * Return a list of schedules configured in the aws_cloud_scheduler_periods
+ */
+function aws_cloud_get_schedule() {
+  $options = ['' => t('None')];
+
+  $config = \Drupal::config('aws_cloud.settings');
+  $schedules = $config->get('aws_cloud_scheduler_periods');
+  $schedules = trim($schedules);
+  $schedules = explode("\r\n", $schedules);
+
+  foreach ($schedules as $key => $value) {
+    if (!empty($value)) {
+      $schedule = explode('|', $value);
+      if (count($schedule) > 1) {
+        $options[$schedule[0]] = "$schedule[0] ($schedule[1])";
+      }
+      else {
+        $options[$schedule[0]] = $schedule[0];
+      }
+    }
+  }
+
+  return $options;
+}
\ No newline at end of file
diff --git a/modules/cloud_service_providers/aws_cloud/config/install/aws_cloud.settings.yml b/modules/cloud_service_providers/aws_cloud/config/install/aws_cloud.settings.yml
index 2bbda9d..3a06e7e 100644
--- a/modules/cloud_service_providers/aws_cloud/config/install/aws_cloud.settings.yml
+++ b/modules/cloud_service_providers/aws_cloud/config/install/aws_cloud.settings.yml
@@ -5,4 +5,6 @@ aws_cloud_notification: 0
 aws_cloud_notification_criteria: 30
 aws_cloud_notification_subject: '[aws_cloud_instance:name] has been running for since [aws_cloud_instance:launch_time]'
 aws_cloud_notification_msg: "Your instance [aws_cloud_instance:name] has been running since [aws_cloud_instance:launch_time].  Please review if the instance still needs to be running."
+aws_cloud_scheduler_tag: "Schedule"
+aws_cloud_scheduler_periods: ""
 aws_cloud_instance_terminate: false
diff --git a/modules/cloud_service_providers/aws_cloud/config/install/core.entity_form_display.cloud_server_template.aws_cloud.default.yml b/modules/cloud_service_providers/aws_cloud/config/install/core.entity_form_display.cloud_server_template.aws_cloud.default.yml
index 56e0f72..e81e7cb 100644
--- a/modules/cloud_service_providers/aws_cloud/config/install/core.entity_form_display.cloud_server_template.aws_cloud.default.yml
+++ b/modules/cloud_service_providers/aws_cloud/config/install/core.entity_form_display.cloud_server_template.aws_cloud.default.yml
@@ -14,6 +14,7 @@ dependencies:
     - field.field.cloud_server_template.aws_cloud.field_monitoring
     - field.field.cloud_server_template.aws_cloud.field_network
     - field.field.cloud_server_template.aws_cloud.field_ram
+    - field.field.cloud_server_template.aws_cloud.field_schedule
     - field.field.cloud_server_template.aws_cloud.field_security_group
     - field.field.cloud_server_template.aws_cloud.field_ssh_key
     - field.field.cloud_server_template.aws_cloud.field_test_only
@@ -98,6 +99,12 @@ content:
     third_party_settings: {  }
     type: string_textfield
     region: content
+  field_schedule:
+    type: options_select
+    weight: 16
+    region: content
+    settings: {  }
+    third_party_settings: {  }
   field_security_group:
     weight: 15
     settings: {  }
@@ -135,7 +142,7 @@ content:
     third_party_settings: {  }
   user_id:
     type: entity_reference_autocomplete
-    weight: 16
+    weight: 17
     settings:
       match_operator: CONTAINS
       size: 60
diff --git a/modules/cloud_service_providers/aws_cloud/config/install/core.entity_view_display.cloud_server_template.aws_cloud.default.yml b/modules/cloud_service_providers/aws_cloud/config/install/core.entity_view_display.cloud_server_template.aws_cloud.default.yml
index 399e134..1d49afe 100644
--- a/modules/cloud_service_providers/aws_cloud/config/install/core.entity_view_display.cloud_server_template.aws_cloud.default.yml
+++ b/modules/cloud_service_providers/aws_cloud/config/install/core.entity_view_display.cloud_server_template.aws_cloud.default.yml
@@ -14,6 +14,7 @@ dependencies:
     - field.field.cloud_server_template.aws_cloud.field_monitoring
     - field.field.cloud_server_template.aws_cloud.field_network
     - field.field.cloud_server_template.aws_cloud.field_ram
+    - field.field.cloud_server_template.aws_cloud.field_schedule
     - field.field.cloud_server_template.aws_cloud.field_security_group
     - field.field.cloud_server_template.aws_cloud.field_ssh_key
     - field.field.cloud_server_template.aws_cloud.field_test_only
@@ -114,6 +115,13 @@ content:
     third_party_settings: {  }
     type: string
     region: content
+  field_schedule:
+    weight: 17
+    label: above
+    settings: {  }
+    third_party_settings: {  }
+    type: list_default
+    region: content
   field_security_group:
     weight: 11
     label: above
diff --git a/modules/cloud_service_providers/aws_cloud/config/install/field.field.cloud_server_template.aws_cloud.field_schedule.yml b/modules/cloud_service_providers/aws_cloud/config/install/field.field.cloud_server_template.aws_cloud.field_schedule.yml
new file mode 100644
index 0000000..2d49b78
--- /dev/null
+++ b/modules/cloud_service_providers/aws_cloud/config/install/field.field.cloud_server_template.aws_cloud.field_schedule.yml
@@ -0,0 +1,20 @@
+langcode: en
+status: true
+dependencies:
+  config:
+    - cloud_server_template.cloud_server_template_type.aws_cloud
+    - field.storage.cloud_server_template.field_schedule
+  module:
+    - options
+id: cloud_server_template.aws_cloud.field_schedule
+field_name: field_schedule
+entity_type: cloud_server_template
+bundle: aws_cloud
+label: Schedule
+description: 'Specify a start/stop schedule. This helps reduce server hosting costs.'
+required: false
+translatable: false
+default_value: {  }
+default_value_callback: ''
+settings: {  }
+field_type: list_string
diff --git a/modules/cloud_service_providers/aws_cloud/config/install/field.storage.cloud_server_template.field_schedule.yml b/modules/cloud_service_providers/aws_cloud/config/install/field.storage.cloud_server_template.field_schedule.yml
new file mode 100644
index 0000000..9531edf
--- /dev/null
+++ b/modules/cloud_service_providers/aws_cloud/config/install/field.storage.cloud_server_template.field_schedule.yml
@@ -0,0 +1,20 @@
+langcode: en
+status: true
+dependencies:
+  module:
+    - cloud_server_template
+    - options
+id: cloud_server_template.field_schedule
+field_name: field_schedule
+entity_type: cloud_server_template
+type: list_string
+settings:
+  allowed_values: {  }
+  allowed_values_function: aws_cloud_schedule_allowed_values_function
+module: options
+locked: false
+cardinality: 1
+translatable: true
+indexes: {  }
+persist_with_no_fields: false
+custom_storage: false
diff --git a/modules/cloud_service_providers/aws_cloud/config/schema/aws_cloud.settings.schema.yml b/modules/cloud_service_providers/aws_cloud/config/schema/aws_cloud.settings.schema.yml
index d525c92..5a167c9 100644
--- a/modules/cloud_service_providers/aws_cloud/config/schema/aws_cloud.settings.schema.yml
+++ b/modules/cloud_service_providers/aws_cloud/config/schema/aws_cloud.settings.schema.yml
@@ -17,5 +17,9 @@ aws_cloud.settings:
       type: string
     aws_cloud_mock_data:
       type: string
+    aws_cloud_scheduler_tag:
+      type: string
+    aws_cloud_scheduler_periods:
+      type: string
     aws_cloud_instance_terminate:
       type: boolean
diff --git a/modules/cloud_service_providers/aws_cloud/src/Entity/Ec2/Instance.php b/modules/cloud_service_providers/aws_cloud/src/Entity/Ec2/Instance.php
index 8b7ca36..53469a1 100644
--- a/modules/cloud_service_providers/aws_cloud/src/Entity/Ec2/Instance.php
+++ b/modules/cloud_service_providers/aws_cloud/src/Entity/Ec2/Instance.php
@@ -547,6 +547,20 @@ class Instance extends CloudContentEntityBase implements InstanceInterface {
     return $this->set('termination_timestamp', $timestamp);
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function setSchedule($schedule) {
+    return $this->set('schedule', $schedule);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getSchedule() {
+    return $this->get('schedule')->value;
+  }
+
   /**
    * {@inheritdoc}
    */
@@ -1083,6 +1097,14 @@ class Instance extends CloudContentEntityBase implements InstanceInterface {
         'weight' => -1,
       ]);
 
+    $fields['schedule'] = BaseFieldDefinition::create('string')
+      ->setLabel(t('Instance Schedule'))
+      ->setDescription('Store AWS instance scheduler tag')
+      ->setDisplayOptions('view', [
+        'label' => 'inline',
+        'type' => 'string',
+        'weight' => -5,
+      ]);
     return $fields;
   }
 
diff --git a/modules/cloud_service_providers/aws_cloud/src/Form/Config/AwsCloudAdminSettings.php b/modules/cloud_service_providers/aws_cloud/src/Form/Config/AwsCloudAdminSettings.php
index e75c325..14e8f30 100644
--- a/modules/cloud_service_providers/aws_cloud/src/Form/Config/AwsCloudAdminSettings.php
+++ b/modules/cloud_service_providers/aws_cloud/src/Form/Config/AwsCloudAdminSettings.php
@@ -97,6 +97,25 @@ class AwsCloudAdminSettings extends ConfigFormBase {
       '#description' => t('Terminate instance automatically.'),
       '#default_value' => $config->get('aws_cloud_instance_terminate'),
     ];
+
+    $form['aws_cloud_scheduler_tag'] = [
+      '#type' => 'textfield',
+      '#title' => t('Schedule Tag'),
+      '#description' => t('Name of scheduling tag. This tag value is defined when setting up the <a href=":stack">AWS Instance Scheduler</a>', [
+        ':stack' => 'https://docs.aws.amazon.com/solutions/latest/instance-scheduler/deployment.html'
+      ]),
+      '#default_value' => $config->get('aws_cloud_scheduler_tag'),
+    ];
+
+    $form['aws_cloud_scheduler_periods'] = [
+      '#type' => 'textarea',
+      '#title' => t('Schedule periods'),
+      '#description' => t('<p>Schedules defined in AWS Instance Scheduler. The values entered are shown in the Schedule field on instance edit form and server template launch form. Enter one value per line, in the format <strong>key|label</strong>.</p><p>The key corresponds to the schedule name defined in AWS Instance Scheduler. The label is a free form descriptive value shown to users. An example configuration might be:<br/>office-hours|Office Hours - Monday to Friday 9:00am - 5:00pm.<br/><p>See <a href=:stack>Scheduler Configuration</a> for more information.</p>', [
+        ':stack' => 'https://docs.aws.amazon.com/solutions/latest/instance-scheduler/components.html'
+      ]),
+      '#default_value' => $config->get('aws_cloud_scheduler_periods'),
+    ];
+
     return parent::buildForm($form, $form_state);
   }
 
diff --git a/modules/cloud_service_providers/aws_cloud/src/Form/Ec2/AwsDeleteForm.php b/modules/cloud_service_providers/aws_cloud/src/Form/Ec2/AwsDeleteForm.php
index 26cb27f..9ae9199 100644
--- a/modules/cloud_service_providers/aws_cloud/src/Form/Ec2/AwsDeleteForm.php
+++ b/modules/cloud_service_providers/aws_cloud/src/Form/Ec2/AwsDeleteForm.php
@@ -28,6 +28,13 @@ class AwsDeleteForm extends CloudContentDeleteForm {
    */
   protected $entity_type_manager;
 
+  /**
+   * The current user.
+   *
+   * @var \Drupal\Core\Session\AccountInterface
+   */
+  protected $currentUser;
+
   /**
    * AwsDeleteForm constructor.
    * @param \Drupal\Core\Entity\EntityManagerInterface $manager
diff --git a/modules/cloud_service_providers/aws_cloud/src/Form/Ec2/InstanceEditForm.php b/modules/cloud_service_providers/aws_cloud/src/Form/Ec2/InstanceEditForm.php
index a9fb9ac..aa8de35 100644
--- a/modules/cloud_service_providers/aws_cloud/src/Form/Ec2/InstanceEditForm.php
+++ b/modules/cloud_service_providers/aws_cloud/src/Form/Ec2/InstanceEditForm.php
@@ -183,6 +183,16 @@ class InstanceEditForm extends AwsCloudContentForm {
     $time_format = DateFormat::load('html_time')->getPattern();
     $form['termination_timestamp']['widget'][0]['value']['#description'] = $this->t('Format: %format. Leave blank for no automatic termination.', ['%format' => Datetime::formatExample($date_format . ' ' . $time_format)]);;
 
+    $schedule = $entity->getSchedule();
+    $form['schedule'] = [
+      '#title' => t('Schedule'),
+      '#type' => 'select',
+      '#default_value' => isset($schedule) ? $entity->getSchedule() : '',
+      '#options' => aws_cloud_get_schedule(),
+      '#weight' => -4,
+      '#description' => t('Specify a start/stop schedule. This helps reduce server hosting costs.'),
+    ];
+
     return $form;
   }
 
@@ -225,6 +235,15 @@ class InstanceEditForm extends AwsCloudContentForm {
       'Value' => $termination_timestamp == NULL ? NULL : $termination_timestamp->getTimestamp(),
     ];
 
+    // send the schedule if scheduler is enabled.
+    $config = \Drupal::config('aws_cloud.settings');
+    if ($config->get('aws_cloud_scheduler') == TRUE) {
+      $params['Tags'][] = [
+        'Key' => $config->get('aws_cloud_scheduler_tag'),
+        'Value' => $this->entity->getSchedule()
+      ];
+    }
+
     $this->awsEc2Service->setCloudContext($this->entity->get('cloud_context')->value);
     $this->awsEc2Service->createTags($params);
 
diff --git a/modules/cloud_service_providers/aws_cloud/src/Plugin/AwsCloudServerTemplatePlugin.php b/modules/cloud_service_providers/aws_cloud/src/Plugin/AwsCloudServerTemplatePlugin.php
index dd539d1..2fc0bca 100644
--- a/modules/cloud_service_providers/aws_cloud/src/Plugin/AwsCloudServerTemplatePlugin.php
+++ b/modules/cloud_service_providers/aws_cloud/src/Plugin/AwsCloudServerTemplatePlugin.php
@@ -119,19 +119,28 @@ class AwsCloudServerTemplatePlugin extends PluginBase implements CloudServerTemp
 
     $this->awsEc2Service->setCloudContext($cloud_server_template->getCloudContext());
 
-    $termination_tag = [];
+    $tags = [];
     // If the user checks the auto termination option
     // add it as a tag to AWS Ec2.
     if ($form_state->getValue('terminate')) {
       /* @var \Drupal\Core\Datetime\DrupalDateTime $timestamp */
       $timestamp = $form_state->getValue('termination_date');
-      $termination_tag[] = [
+      $tags[] = [
         'Key' => 'cloud_termination_timestamp',
         'Value' => $timestamp->getTimeStamp(),
       ];
     }
 
-    if ($this->awsEc2Service->runInstances($params, $termination_tag) != null) {
+    if (!empty($form_state->getValue('schedule'))) {
+      // send the schedule if scheduler is enabled.
+      $config = \Drupal::config('aws_cloud.settings');
+      $tags[] = [
+        'Key' => $config->get('aws_cloud_scheduler_tag'),
+        'Value' => $form_state->getValue('schedule')
+      ];
+    }
+
+    if ($this->awsEc2Service->runInstances($params, $tags) != null) {
       // update instances after launch
       $this->awsEc2Service->updateInstances();
       $this->messenger->addStatus('Instance launched.');
diff --git a/modules/cloud_service_providers/aws_cloud/src/Service/AwsEc2Service.php b/modules/cloud_service_providers/aws_cloud/src/Service/AwsEc2Service.php
index a035d1c..d8f4f10 100644
--- a/modules/cloud_service_providers/aws_cloud/src/Service/AwsEc2Service.php
+++ b/modules/cloud_service_providers/aws_cloud/src/Service/AwsEc2Service.php
@@ -615,6 +615,7 @@ class AwsEc2Service implements AwsEc2ServiceInterface {
           $instanceName = '';
           $uid = 0;
           $termination_timestamp = NULL;
+          $schedule = '';
           foreach ($instance['Tags'] as $tag) {
             if ($tag['Key'] == 'Name') {
               $instanceName = $tag['Value'];
@@ -627,6 +628,9 @@ class AwsEc2Service implements AwsEc2ServiceInterface {
                 $termination_timestamp = (int) $tag['Value'];
               }
             }
+            if ($tag['Key'] == $this->configFactory->get('aws_cloud.settings')->get('aws_cloud_scheduler_tag')) {
+              $schedule = $tag['Value'];
+            }
           }
 
           // default to instance_id.
@@ -667,6 +671,8 @@ class AwsEc2Service implements AwsEc2ServiceInterface {
             $entity->setRefreshed($timestamp);
             $entity->setLaunchTime($instance['LaunchTime']->__toString());
             $entity->setTerminationTimestamp($termination_timestamp);
+            $entity->setSchedule($schedule);
+
             if ($uid != 0) {
               $entity->setOwnerById($uid);
             }
@@ -711,6 +717,7 @@ class AwsEc2Service implements AwsEc2ServiceInterface {
             'refreshed' => $timestamp,
             'uid' => $uid,
             'termination_timestamp' => $termination_timestamp,
+            'schedule' => $schedule,
           ]);
           $entity->save();
         }
diff --git a/modules/cloud_service_providers/aws_cloud/tests/src/Functional/Ec2/InstanceTest.php b/modules/cloud_service_providers/aws_cloud/tests/src/Functional/Ec2/InstanceTest.php
index e8b86cd..e353e5f 100644
--- a/modules/cloud_service_providers/aws_cloud/tests/src/Functional/Ec2/InstanceTest.php
+++ b/modules/cloud_service_providers/aws_cloud/tests/src/Functional/Ec2/InstanceTest.php
@@ -231,11 +231,22 @@ class InstanceTest extends AwsCloudTestCase {
     $instance_type = $this->random->name(6, TRUE);
     $this->updateInstanceTypeInMockData($instance_type);
 
+    // Update the schedule tag.
+    $schedule_value = $this->random->name(8, TRUE);
+    $this->updateScheduleTagInMockData($schedule_value);
+
     // Run cron job to update instances.
     $key = \Drupal::state()->get('system.cron_key');
     $this->drupalGet('/cron/' . $key);
     $this->assertResponse(204);
 
+    // Verify schedule tag.
+    $this->drupalGet("/clouds/aws_cloud/$cloud_context/instance/1");
+    $this->assertResponse(200, t('View | HTTP 200: The Cloud Instance 1'));
+    $this->assertNoText(t('Notice'), t('View | Make sure w/o Notice'));
+    $this->assertNoText(t('warning'), t('View | Make sure w/o Warnings'));
+    $this->assertText("$schedule_value", t('Schedule'));
+
     // Verify security group.
     $this->drupalGet("/clouds/aws_cloud/$cloud_context/instance/1");
     $this->assertResponse(200, t('View | HTTP 200: The Cloud Instance 1'));
@@ -314,6 +325,8 @@ class InstanceTest extends AwsCloudTestCase {
                       ]));
       $this->assertText('Instance attributes was updated.');
 
+
+
       // Verify instance attributes.
       $this->drupalGet("/clouds/aws_cloud/$cloud_context/instance/$num");
       $this->assertResponse(200, t('View | HTTP 200: The Cloud Instance @num', [
@@ -325,6 +338,8 @@ class InstanceTest extends AwsCloudTestCase {
       $this->assertText(implode(', ', $edit[$i]['security_groups[]']),
                         t('Security Groups') . ': ' . implode(', ', $edit[$i]['security_groups[]'])
                         );
+
+
     }
   }
 
@@ -360,6 +375,48 @@ class InstanceTest extends AwsCloudTestCase {
     }
   }
 
+  /**
+   * Test launching instances with schedule tags.
+   */
+  public function testCreateInstanceWithScheduleTag() {
+    $this->_testCreateInstanceWithScheduleTag(AWS_CLOUD_INSTANCE_REPEAT_COUNT);
+  }
+
+  private function _testCreateInstanceWithScheduleTag($max_test_repeat_count = 1) {
+    $cloud_context = $this->cloud_context;
+
+    // Setup an arbitrary schedule in the configuration.
+    // This is needed in the server template launch confirmation form.
+    $schedule_value = $this->random->name(8, TRUE);
+
+    $config = \Drupal::configFactory()->getEditable('aws_cloud.settings');
+    $config->set('aws_cloud_scheduler_periods', $schedule_value)
+      ->save();
+
+    for ($i = 0; $i < $max_test_repeat_count; $i++) {
+      $num = $i + 1;
+      $this->createServerTemplate();
+
+      // Launch a new Instance, with schedule information.
+      $add = $this->createInstanceTestData();
+      $this->addInstanceMockData($add[$i]['name'], $add[$i]['key_pair_name'], $schedule_value);
+
+      $this->drupalPostForm("/clouds/design/server_template/$cloud_context/$num/launch",
+        ['schedule' => $schedule_value],
+        t('Launch'));
+
+      $this->assertResponse(200, t('HTTP 200: Launch | A New Cloud Instance @num', [
+        '@num' => $num
+      ]));
+      $this->assertNoText(t('Notice'), t('Launch | Make sure w/o Notice'));
+      $this->assertNoText(t('warning'), t('Launch | Make sure w/o Warnings'));
+
+      // Go to the instance page.
+      $this->drupalGet("/clouds/aws_cloud/$cloud_context/instance/$num");
+      $this->assertText($schedule_value, t('Schedule'));
+    }
+  }
+
   private function createInstanceTestData() {
     $data = [];
 
@@ -413,7 +470,7 @@ class InstanceTest extends AwsCloudTestCase {
     $template->save();
   }
 
-  private function addInstanceMockData($name, $key_pair_name, $state = 'running') {
+  private function addInstanceMockData($name, $key_pair_name, $state = 'running', $schedule_value = '') {
     $mock_data = $this->getMockDataFromConfig();
     $vars = $this->getMockDataTemplateVars();
     $vars['name'] = $name;
@@ -422,6 +479,13 @@ class InstanceTest extends AwsCloudTestCase {
     $instance_mock_data_content = $this->getMockDataFileContent(get_class($this), $vars, '_instance');
 
     $instance_mock_data = Yaml::decode($instance_mock_data_content);
+
+    // Add Schedule information if available.
+    if (!empty($schedule_value)) {
+      $instance_mock_data['Tags'][1]['Key'] = 'Schedule';
+      $instance_mock_data['Tags'][1]['Value'] = $schedule_value;
+    }
+
     $mock_data['DescribeInstances']['Reservations'][0]['Instances'][] = $instance_mock_data;
     $this->updateMockDataToConfig($mock_data);
   }
@@ -475,4 +539,10 @@ class InstanceTest extends AwsCloudTestCase {
     return $security_groups;
   }
 
+  private function updateScheduleTagInMockData($schedule_value) {
+    $mock_data = $this->getMockDataFromConfig();
+    $mock_data['DescribeInstances']['Reservations'][0]['Instances'][0]['Tags'][0]['Name'] = 'Schedule';
+    $mock_data['DescribeInstances']['Reservations'][0]['Instances'][0]['Tags'][0]['Value'] = $schedule_value;
+    $this->updateMockDataToConfig($mock_data);
+  }
 }
