【问题标题】:how to start and stop ec2 instances using php aws sdk如何使用 php aws sdk 启动和停止 ec2 实例
【发布时间】:2012-07-03 09:29:14
【问题描述】:

aws sdk 非常新,期待开始。我已经安装了 sdk 和所有东西,但是如何使用 php sdk 启动 ec2 实例?一些代码示例真的很有用。

【问题讨论】:

    标签: php amazon-ec2 amazon-web-services


    【解决方案1】:

    这是从定义的 AMI 启动机器的基本示例:

    $image_id  = 'ami-3d4ff254'; //Ubuntu 12.04
    $min       = 1;              //the minimum number of instances to start
    $max       = 1;              //the maximum number of instances to start
    $options   = array(
        'SecurityGroupId' => 'default',  //replace with your security group id
        'InstanceType'    => 't1.micro',
        'KeyName'         => 'keypair',  //the name of your keypair for auth
        'InstanceInitiatedShutdownBehavior' => 'terminate' //terminate on shutdown
    );
    
    require_once('AWSSDKforPHP/sdk.class.php');
    
    $ec2 = new AmazonEC2();
    
    $response = $ec2->run_instances($image_id, $min, $max, $options);
    
    if(!$response->isOK()){
        echo "Start failed\n";
    }
    

    这是假设您正确设置了 AWS 凭证......希望这能让您找到正确的方向......

    【讨论】:

    【解决方案2】:

    如果您有兴趣,这里有一个更详细的脚本:

    // Sleep time to allow EC2 instance to start up
    $sleeptime = 15;
    $username = "ec2-user";
    
    // For AWS PHP SDK
    putenv('HOME=/home/ec2-user/');
    require_once 'AWSSDKforPHP/sdk.class.php';
    
    // Get data from HTTP POST
    $ami = $_POST['amis'];
    $instancetype = $_POST['instancetype'];
    $keyname = $_POST['key'];
    $securitygroup = $_POST['securitygroups'];
    
    // Instantiate the AmazonEC2 class
    $ec2 = new AmazonEC2();
    
    // Boot an instance of the image
    $response = $ec2->run_instances($ami, 1, 1, array(
        'KeyName' => $keyname,
        'InstanceType' => $instancetype,
        'SecurityGroupId' => $securitygroup,
    ));
    if (!($response->isOK())) {
        echo "<p class='error'>ERROR! Could not create new instance!</p>";
        return; 
    }
    $instance = $response->body->instancesSet->item->instanceId;
    $message = "<p>Your instance has been successfully created.</p>";
    $message .= ("<p>Instance ID is: <b>$instance</b></p>");
    
    // Give instance some time to start up
    sleep ($sleeptime);
    
    // Get the hostname from a call to the DescribeImages operation.
    $response = $ec2->describe_instances(array(
        'Filter' => array(
           array('Name' => 'instance-id', 'Value' => "$instance"),
        )
    ));
    if (!($response->isOK())) {
        echo "<p class='error'>ERROR! Could not retrieve hostname for instance!</p>";
        return; 
    }
    $hostname = $response->body->reservationSet->item->instancesSet->item->dnsName;
    
    // Output the message
    $message .= "<p>Your instance hostname is: <b>$hostname</b></p>";
    $message .= "<p>You can connect to your instance using this command:<br>" .
        "<b>ssh -i $keyname.pem $username@" . $hostname .  "</b></p>";
    
    echo $message;
    

    与@dleiftah 的几乎相同,只是它在完成时输出新实例的主机名。

    【讨论】: