创建 EC2 实例时使用 boto3 在用户数据中传递变量

Pass variable in user data using boto3 while creating EC2 Instance

我正在创建 EC2 实例并想传递用户数据以附加文件系统,但我不知道如何将文件系统 ID 作为变量传递。

文件系统 ID 将使用 API 网关传递。我试过以下但用户数据包含 $aa 而不是 aa 值。

aa='fs-ce99bd38'
user_data = """#!bin/bash
sudo yum -y install nfs-utils
sudo mount -t efs -o tls $aa:/ efs
"""

client = boto3.client('ec2', region_name=REGION)

def lambda_handler(event, context):

    instance = client.run_instances(
        ImageId=AMI,
        InstanceType=INSTANCE_TYPE,
        KeyName=KEY_NAME,
        UserData=user_data,
        MaxCount=min_max_add,
        MinCount=min_max_add
    )

这就是将变量插入字符串的方式:-)

如果您有相当现代的 Python 版本,您可以像这样使用 f-strings:

aa='fs-ce99bd38'
user_data = f"""#!bin/bash
sudo yum -y install nfs-utils
sudo mount -t efs -o tls {aa}:/ efs
"""

否则,好的旧格式也可以解决问题:

aa='fs-ce99bd38'
user_data = """#!bin/bash
sudo yum -y install nfs-utils
sudo mount -t efs -o tls {}:/ efs
""".format(aa)

或者更老的 % 运算符

aa='fs-ce99bd38'
user_data = """#!bin/bash
sudo yum -y install nfs-utils
sudo mount -t efs -o tls %s:/ efs
""" % aa