der Befehl ausgeführt wird Parsen und die Instanz schafft, kann ich mich einloggen, führen Sie Updates, etc. aber die Userdata-Datei in nicht bestandenAWS Boto3 Python run_instances Methode nicht Userdata Parameter
Hier mein Skript ist.
#!/usr/bin/python
import boto3
def main():
dev_server_ami_id = 'ami-0b33d91d' # This is currently the Amazon Linux base AMI.
dev_server_sec_group = 'xxxxxxxxxx'
dev_server_az = 'us-east-1a'
dev_server_subnet_id = 'xxxxxxxxxxx'
dev_server_name = 'test_server_name'
dev_instance_type = 't2.large'
slash_sites_size = 16
slash_scratch_size = 5
ec2client = boto3.client('ec2',aws_access_key_id='asdfasdfasdf',aws_secret_access_key='asdfasdfasdfasdf')
creation_response = ec2client.run_instances(DryRun=False,MinCount=1,ImageId=dev_server_ami_id,
MaxCount=1,KeyName='mcp_demo_dev',SecurityGroupIds=[dev_server_sec_group],
InstanceType=dev_instance_type,Placement={'AvailabilityZone': dev_server_az},SubnetId=dev_server_subnet_id,UserData="file://C:\\Users\\xxxxx\\Dev\\Site Where My Script Is\\base_server_bootstrap.sh",
BlockDeviceMappings=[{'DeviceName':'/dev/xvdb','Ebs':{'VolumeSize':slash_sites_size,'DeleteOnTermination':True}},
{'DeviceName':'/dev/xvdc','Ebs':{'VolumeSize':slash_scratch_size,'DeleteOnTermination':True}}])
instance_id = creation_response['Instances'][0]['InstanceId']
ec2client.create_tags(Resources=[instance_id,],Tags=[{'Key':'Name','Value': dev_server_name,},],)
if __name__ == "__main__": main()
das ist alles noch in Arbeit, so weit das Skript angeht und ich habe ein paar verschiedene Möglichkeiten versucht, einschließlich da den python-Skript nur die Dateinamen in der Datei vorbei und meinem Shell-Skript in den gleichen Verzeichnis, übergibt nur den Namen des Shell-Skripts ohne den vollständigen Pfad mit der Datei "//" davor, sowie den vollständigen Pfad und den Skriptnamen mit Nein "file: //" davor.
Alle Tricks würden geschätzt werden, es scheint, dass die run_instances-Methode ignoriert nur diesen Parameter.
Als Referenz hier ist das Shell-Skript Ich versuche, in die run_instance() -Methode übergeben. Es wird nicht angerufen.
#!/bin/bash
#
# These variables will be used to create directories and name everything client specific.
# All files that are pulled from S3 have to follow the naming convention and are client specific.
#
clientName="demo"
# If both author and public are true then we are in DEV.
magnoliaPublic=true
magnoliaAuthor=true
# Set this if the client is doing light-module development work.
lightModule=true
lightModuleFileName="one-pager-module.zip"
# build the additional filesytems and mount points
sudo mkfs -t ext4 /dev/xvdb
sudo mkfs -t ext4 /dev/xvdc
sudo mkdir /sites
sudo mkdir /scratch
sudo mount /dev/xvdb /sites
sudo mount /dev/xvdc /scratch
# add them to the fstab so that they will be there after a reboot
sudo cat /etc/fstab > /home/ec2-user/fstab_temp
sudo echo -e "/dev/xvdb\t/sites\text4\tdefaults,nofail\t0\t2" >> /home/ec2-user/fstab_temp
sudo echo -e "/dev/xvdc\t/scratch\text4\tdefaults,nofail\t0\t2" >> /home/ec2-user/fstab_temp
sudo cp /home/ec2-user/fstab_temp /etc/fstab
sudo rm /home/ec2-user/fstab_temp
# Set up of the base environment with Java and Tomcat.
# Need to figure out how to set the specific version of the JDK that we install. Either copy it to S3 or direct it through yum.
sudo yum -y install java-1.8.0-openjdk
sudo groupadd tomcat
sudo useradd -g tomcat tomcat
sudo wget -O /home/tomcat/apache-tomcat-8.5.9.tar.gz http://mirror.stjschools.org/public/apache/tomcat/tomcat-8/v8.5.9/bin/apache-tomcat-8.5.9.tar.gz
sudo tar -xf /home/tomcat/apache-tomcat-8.5.9.tar.gz -C /opt
sudo rm /home/tomcat/apache-tomcat-8.5.9.tar.gz
sudo chown -R tomcat:tomcat /opt/apache-tomcat-8.5.9/
# Create our individual JVM directory structure.
sudo mkdir /sites/
sudo mkdir /sites/${clientName}
sudo mkdir /sites/${clientName}/magnolia-base/
sudo mkdir /sites/${clientName}/light-module/
# If there is content to deploy to the light-module directory then grab it.
if $lightModule; then
sudo aws s3 cp s3://mcp-${clientName}-light-module/${lightModuleFileName} /sites/${clientName}/light-module
sudo unzip /sites/${clientName}/light-module/${lightModuleFileName} -d /sites/${clientName}/light-module/
fi
# Build the base tomcat directories for this client.
sudo mkdir /sites/${clientName}/magnolia-base/common /sites/${clientName}/magnolia-base/conf /sites/${clientName}/magnolia-base/logs /sites/${clientName}/magnolia-base/server /sites/${clientName}/magnolia-base/shared /sites/${clientName}/magnolia-base/temp /sites/${clientName}/magnolia-base/work
# Copy configs down from S3. mcp-demo-configs
sudo aws s3 cp s3://mcp-${clientName}-configs/${clientName}_conf.zip /sites/${clientName}/magnolia-base/
sudo unzip /sites/${clientName}/magnolia-base/${clientName}_conf.zip -d /sites/${clientName}/magnolia-base/
# Set one or more appBase directories and copy our Magnolia WAR files in.
if $magnoliaPublic; then
sudo mkdir /sites/${clientName}/magnolia-base/webapps_public
sudo aws s3 cp s3://mcp-${clientName}-magnolia-wars/demo-mcpLive-2.3.war /sites/${clientName}/magnolia-base/webapps_public
fi
if $magnoliaAuthor; then
sudo mkdir /sites/${clientName}/magnolia-base/webapps_author
sudo aws s3 cp s3://mcp-${clientName}-magnolia-wars/demo-mcpEdit-2.3.war /sites/${clientName}/magnolia-base/webapps_author
fi
sudo chown -R tomcat:tomcat /sites
# From here on out everything is done as the tomcat user.
sudo su - tomcat
# Set up the environment variables.
echo export "JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.121-0.b13.29.amzn1.x86_64" >> /home/tomcat/.bash_profile
echo export JRE_HOME=\$JAVA_HOME/jre >> /home/tomcat/.bash_profile
# Create our Tomcat setenv.sh file
touch /opt/apache-tomcat-8.5.9/bin/setenv.sh
echo export CATALINA_OPTS="$CATALINA_OPTS -XX:MaxPermSize=256m -Xms64M -Xmx1024M -Djava.awt.headless=true" >> /opt/apache-tomcat-8.5.9/bin/setenv.sh
echo export CATALINA_HOME=/opt/apache-tomcat-8.5.9 >> /opt/apache-tomcat-8.5.9/bin/setenv.sh
echo export CATALINA_BASE=/sites/${clientName}/magnolia-base >> /opt/apache-tomcat-8.5.9/bin/setenv.sh
chmod 755 /opt/apache-tomcat-8.5.9/bin/setenv.sh
sudo -S -u tomcat -i /bin/bash -l -c '/opt/apache-tomcat-8.5.9/bin/startup.sh'
Vielen Dank im Voraus.
Und diese Skriptdatei von 'run_instances auf die Instanz kopiert auf()'? Überprüfen Sie, ob es in '/ var/lib/cloud/instance-id/user-data.txt' verfügbar ist. – franklinsijo
Danke für den Kommentar. Nein, diese Datei ist leer. Das ist mein Problem. Ich kann nicht herausfinden, wie man den Befehl formatiert, damit ich eine Datei mit meinen Benutzerdaten übergeben kann. Theoretisch kann es mit der Anweisung "file: //" ausgeführt werden, wenn es über die Befehlszeile ausgeführt wird. Ich kann keine Dokumente finden, die zeigen, wie man es in Python macht. –
Können Sie es so übergeben 'Datei: /// C:/Benutzer/xxxxx/Dev/Site% 20 Wo% 20My Skript% 20Is/base_server_bootstrap.sh' und sehen, ob es funktioniert – franklinsijo