Как получить значение ресурса CloudFormation в коде bash пользовательских данных

Я попытался смонтировать экземпляр ec2 в efs в конфигурации запуска, которая написана в YAML CloudFormation. Я не знаю, как получить идентификатор файловой системы, созданный в шаблоне CloudFormation.

Можно ли получить значения ресурса AWS в коде bash? Или мы можем смонтировать экземпляр ec2 в efs с помощью CloudFormation.

LaunchConfig:
    Type: AWS::AutoScaling::LaunchConfiguration
    Properties:
      ImageId: ami-33f92051
      InstanceType: t2.micro
      AssociatePublicIpAddress: 'true'   #auto-assign public ip 
      KeyName: 
        Ref: KeyName
      SecurityGroups:
      - Ref: PublicEC2instancesSecurityGroupJing
      BlockDeviceMappings:
      - DeviceName: "/dev/xvda"
        Ebs:
          SnapshotId: 'snap-0821cc7c34fcb7b01'
          VolumeSize: 8
          DeleteOnTermination: 'false'
      UserData:
        Fn::Base64:
          Fn::Join:
          - "\n"
          - - "#!/bin/bash -xe"
            - sudo yum update -y
            - sudo yum -y install nfs-utils

            - file = 
            - Ref: EFSFileSystem
            - echo $file >> /var/www/html/index.html
            - cd /mnt
            - sudo mkdir efs
            - sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 $file.efs.ap-southeast-2.amazonaws.com:/ /mnt/efs

EFSFileSystem:
    Type: AWS::EFS::FileSystem
    Properties:
      PerformanceMode: generalPurpose
      ThroughputMode: bursting

person Jing Zhang    schedule 09.10.2018    source источник


Ответы (1)


Чтобы получить логический идентификатор AWS::EFS::FileSystem:

!Ref EFSFileSystem

Вы можете использовать это в своем шаблоне следующим образом:

        - sudo mkdir efs
        - !Join
            ''
              'sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 '
              !Ref 'EFSFileSystem'
              '.efs.ap-southeast-2.amazonaws.com:/'
              '/mnt/efs'

Убедитесь, что вы правильно установили spaces между кавычками, чтобы командная строка была построена именно так, как вам нужно.

person John Hanley    schedule 09.10.2018
comment
Но он говорит, что в строке 4 есть ошибка формата, когда я создаю стек. Стоит ли ставить '-' перед каждой строкой? - person Jing Zhang; 13.10.2018
comment
Привет, я не знаю, почему не создается папка efs, поэтому я не вижу, создано ли монтирование. - person Jing Zhang; 14.10.2018