AWS Cloudformation как перезагрузить созданный экземпляр и затем снова установить часть скрипта - PullRequest
0 голосов
/ 26 ноября 2018

Вот что мне нужно сделать:

  • Мне нужно создать экземпляр, используя шаблон облачной информации EC2.
  • После определенной установки пакетов мне нравится перезагружать экземпляр через сам шаблон формирования облака.
  • После перезагрузки экземпляра я должен завершить выполнение оставшегося скрипта.

Пожалуйста, предложите мне, как это можно сделать.

Это мой текущий шаблон:


    {
  "AWSTemplateFormatVersion" : "2010-09-09",

  "Description" : "",
  "Parameters": {
    "VPCID": {
      "Description": "The VPC for this  instance",
      "Type": "AWS::EC2::VPC::Id",
    },
    "SubnetID": {
      "Description": "The Subnet for this instance",
      "Type": "AWS::EC2::Subnet::Id",
    },
    "AllowedCIDR": {
      "Description": "IP address range (in CIDR notation) of the client that will be allowed to connect to the cluster using SSH e.g., 203.0.113.5/32",
      "AllowedPattern": "(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})/(\\d{1,2})",
      "Type": "String",
      "MinLength": "9",
      "MaxLength": "18",
      "Default": "10.0.0.0/16",
      "ConstraintDescription": "must be a valid CIDR range of the form x.x.x.x/x"
    },
    "SSHKeyName": {
      "Description": "The EC2 Key Pair to allow SSH access to the instance",
      "Type": "AWS::EC2::KeyPair::KeyName",
    },
    "TypeOfInstance": {
      "Type": "String",
      "Default": "t2.medium",
      "Description": "Enter t2.medium, t2.large, m3.large, m4.large, m4.xlarge, etc.",
      "ConstraintDescription": "Must be a valid EC2 instance type."
    }
  },
  "Resources": {
    "Ec2Instance": {
      "Type": "AWS::EC2::Instance",
      "Properties": {
        "SecurityGroupIds": [
          {
            "Ref": "InstanceSecurityGroup"
          }
        ],
        "KeyName": {
          "Ref": "SSHKeyName"
        },
        "ImageId": "ami-a8d369c0",
        "SubnetId": { "Ref": "SubnetID" },
        "InstanceType": { "Ref": "TypeOfInstance" },
        "UserData"       : { "Fn::Base64" : { "Fn::Join" : ["", [
          "#!/bin/bash -xe\n",
          "touch /tmp/testfile\n",
          "yum -y install rng-tools\n",
          "systemctl start rngd\n",
          "systemctl enable rngd\n",
          "yum update -y \n",

          "echo \"################### Install Packages #######################\"\n",


          "reboot \n",


          "echo \"################### Install Remaining packages and configuration #######################\"\n",

        ]]}}
    },
    "InstanceSecurityGroup": {
      "Type": "AWS::EC2::SecurityGroup",
      "Properties": {
        "GroupDescription": "Enable SSH access via port 22",
        "VpcId" : {
          "Ref" : "VPCID"
        },
        "GroupName": "my-securitygroup",
        "SecurityGroupIngress": [
          {
            "IpProtocol": "tcp",
            "FromPort": "22",
            "ToPort": "22",
            "CidrIp": "0.0.0.0/0"
          }
        ]
      }
    }
  }
}

1 Ответ

0 голосов
/ 27 ноября 2018

Поскольку облачная информация не может инициировать промежуточный сценарий пользовательских данных после остановки и перезапуска экземпляра, вот один из обходных путей, о котором я могу подумать.

Сохранение какого-либо флагана экземпляре непосредственно перед перезагрузкой (пример cfn-userdata-script-continue).Загрузите оставшуюся часть вашего скрипта в экземпляр и сохраните его в заранее определенном месте

. После перезагрузки проверьте наличие этого флага.Если флаг существует, перейдите к месту, где вы сохранили частичный сценарий.Запустите скрипт.Удалить флаг cfn-userdata-script

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