Как я могу структурировать шаблон cloudformation для установки пакетов mulesoft и jre?

#amazon-cloudformation

#amazon-облачная информация

Вопрос:

У меня есть шаблон cloudformation, который запускает экземпляр ec2, но я также хочу установить пакеты. Он этого не делает.

Команды в моем шаблоне успешно устанавливают пакеты при запуске вручную на экземпляре. Но я не понимаю правильного синтаксиса для того, чтобы cloudformation выполняла установку за меня.

 AWSTemplateFormatVersion: '2010-09-09'
Description: AWS CloudFormation Sample Template - spin up EC2 instance, install mule and jre
Parameters:
  KeyName:
    Description: Name of an existing EC2 KeyPair to enable SSH access to the instance
    Default: app-key
    Type: AWS::EC2::KeyPair::KeyName
    ConstraintDescription: must be the name of an existing EC2 KeyPair.
  InstanceType:
    Description: MuleSoft Enterprise Standalone EC2 instance
    Type: String
    Default: t2.small
    AllowedValues:
      - t2.small
      - z1d.large
      - r5d.large
      - r5.large
      - r5ad.large
      - r5a.large
    ConstraintDescription: must be a valid EC2 instance type.
  SSHLocation:
    Description: The IP address range that can be used to SSH to the EC2 instances
    Type: String
    MinLength: '9'
    MaxLength: '18'
    Default: 0.0.0.0/0
    AllowedPattern: "(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/(\d{1,2})"
    ConstraintDescription: must be a valid IP CIDR range of the form x.x.x.x/x.

Resources:
  EC2Instance:
    Type: AWS::EC2::Instance
    Metadata:
      AWS::CloudFormation::Init:
        config:
          commands:
            01_update_yum:
              command: "sudo yum update -y"
            02_rm_jre1_7:
              command: "sudo sudo yum -y erase java-1.7.0"
            03_install__jre1_8:
              command: "sudo yum install -y java-1.8.0-openjdk"
            04_change_into_opt:
              command: "cd /opt"
            05_download_mulesoft:
              command: "sudo wget https://s3-us-west-1.amazonaws.com/mulesoft/mule-enterprise-standalone-4.1.3.2.zip"
            06_install_mulesoft:
              command: "sudo unzip mule-enterprise-standalone-4.1.3.2.zip"
            07_add_mule_user:
              command: "sudo useradd mule"
            08_mule_ownership:
              command: "sudo chown -R mule /opt/mule-enterprise-standalone-4.1.3.2"
            09_run_mule:
              command: "sudo -u mule bash -x /opt/mule-enterprise-standalone-4.1.3.2/bin/mule console"
    Properties:
      InstanceType:
        Ref: InstanceType
      SecurityGroups:
      - Ref: WebSecurityGroup
      KeyName:
        Ref: KeyName
      ImageId: ami-0080e4c5bc078760e

  WebSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Enable SSH, HTTP, HTTPS, Custom port
      SecurityGroupIngress:
        - CidrIp: 0.0.0.0/0
          FromPort: '80'
          IpProtocol: tcp
          ToPort: '80'
        - CidrIp: 0.0.0.0/0
          FromPort: '443'
          IpProtocol: tcp
          ToPort: '443'
        - CidrIp: 0.0.0.0/0
          FromPort: '8443'
          IpProtocol: tcp
          ToPort: '8443'
        - CidrIp:
            Ref: SSHLocation
          FromPort: '22'
          IpProtocol: tcp
          ToPort: '22'

Outputs:
  InstanceId:
    Description: InstanceId of the newly created EC2 instance
    Value:
      Ref: EC2Instance
  AZ:
    Description: Availability Zone of the newly created EC2 instance
    Value:
      Fn::GetAtt:
      - EC2Instance
      - AvailabilityZone
  PublicDNS:
    Description: Public DNSName of the newly created EC2 instance
    Value:
      Fn::GetAtt:
      - EC2Instance
      - PublicDnsName
  PublicIP:
    Description: Public IP address of the newly created EC2 instance
    Value:
      Fn::GetAtt:
      - EC2Instance
      - PublicIp
 

Я бы хотел, чтобы этот шаблон запускал экземпляр и выполнял команды для установки пакетов.

Ответ №1:

Вы должны использовать Userdata и cloud-init для установки. У вас есть команды, но эти команды не вызываются.
Попробуйте это https://www.bogotobogo.com/DevOps/AWS/aws-CloudFormation-Bootstrap-UserData.php На этой странице приведен правильный пример установки пакетов.