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

Nae*_*eem 3 amazon-web-services user-data python-3.x boto3 aws-lambda

我正在创建 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
    )
Run Code Online (Sandbox Code Playgroud)

Mau*_*ice 6

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

如果你有一个相当现代的 Python 版本,你可以使用 f 字符串,如下所示:

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

否则,好的旧格式也能达到目的:

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

或者更老的 % 运算符

aa='fs-ce99bd38'
user_data = """#!bin/bash
sudo yum -y install nfs-utils
sudo mount -t efs -o tls %s:/ efs
""" % aa
Run Code Online (Sandbox Code Playgroud)