如何在用户数据Bash代码中获取CloudFormation资源值

时间:2018-10-09 02:33:47

标签: bash amazon-web-services amazon-cloudformation efs

我试图在用YAML CloudFormation编写的启动配置中将ec2实例安装到efs。我不知道如何获取在CloudFormation模板中创建的File-system-id。

是否可以通过bash代码获取AWS资源的值? 或者这是我们可以使用CloudFormation将ec2实例挂载到ef的任何方式。

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

1 个答案:

答案 0 :(得分:1)

要获取page = requests.get("https://boards.4chan.org/g/") str_page = page.content.decode() str_split = '\n<'.join(str_page.split('<')) str_split = '>\n'.join(str_split.split('>')) str_split = str_split.replace('\n', '') str_split = str_split.replace('<br>', ' ') soup = BeautifulSoup(str_split.encode(), 'html.parser') 的逻辑ID:

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' ,以便完全根据需要构建命令行。