* Bash Script
Auto execute scripts when create instance
- Enter script in Advanced Details text box when you create an instance
In this case, system will execute all these scripts when create the instance.
#!/bin/bash
yum update -y
yum install httpd -y
service httpd start
checkconfig httpd on
cd /var/www/html
aws s3 cp s3://mywebsitebucket-changsoo/index.html /var/www/html
: Update system, install Apache, start httpd server and copy index.html from s3 to /var/www/html folder of the Instance
* Install PHP and create php page
Enter scripts below to Advanced Details when you create an instance
#!/bin/bash
yum update -y
yum install httpd24 php56 git -y
service httpd start
chkconfig httpd on
cd /var/www/html
echo "<?php phpinfo();?>" > test.php
git clone https://github.com/acloudguru/s3
navigate to 'public IP address'/test.php in your browser then you can see PHP INFO page
Access to the server through Terminal
1178578-C02NW6G1G3QD:AWS_SSH changsoopark$ ssh ec2-user@54.89.219.112 -i EC2KeyPair.pem.txt
.....................
[root@ip-172-31-80-161 ec2-user]# cd /var/www/html
[root@ip-172-31-80-161 html]# ls -l
total 8
drwxr-xr-x 3 root root 4096 Oct 12 23:52 s3
-rw-r--r-- 1 root root 19 Oct 12 23:52 test.php
[root@ip-172-31-80-161 html]#
==> there is a test.php and downloaded s3 folder from cloudguru's GitHub repository
https://docs.aws.amazon.com/aws-sdk-php/v3/guide/getting-started/installation.html
Installing via Composer
Using Composer is the recommended way to install the AWS SDK for PHP. Composer is a dependency management tool for PHP that allows you to declare the dependencies your project needs and installs them into your project.
Install Composer
curl -sS https://getcomposer.org/installer | php
Run the Composer command to install the latest stable version of the SDK:
php composer.phar require aws/aws-sdk-php
Require Composer's autoloader:
<?php require 'vendor/autoload.php';
You can find out more on how to install Composer, configure autoloading, and other best-practices for defining dependencies at getcomposer.org.
[root@ip-172-31-80-161 html]# pwd
/var/www/html
[root@ip-172-31-80-161 html]# curl -sS https://getcomposer.org/installer | php
curl: (35) Network file descriptor is not connected
[root@ip-172-31-80-161 html]# curl -sS https://getcomposer.org/installer | php
All settings correct for using Composer
Downloading...
Composer (version 1.5.2) successfully installed to: /var/www/html/composer.phar
Use it: php composer.phar
[root@ip-172-31-80-161 html]# php composer.phar require aws/aws-sdk-php
Do not run Composer as root/super user! See https://getcomposer.org/root for details
Using version ^3.36 for aws/aws-sdk-php
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 6 installs, 0 updates, 0 removals
- Installing mtdowling/jmespath.php (2.4.0): Downloading (100%)
- Installing psr/http-message (1.0.1): Downloading (100%)
- Installing guzzlehttp/psr7 (1.4.2): Downloading (100%)
- Installing guzzlehttp/promises (v1.3.1): Downloading (100%)
- Installing guzzlehttp/guzzle (6.3.0): Downloading (100%)
- Installing aws/aws-sdk-php (3.36.26): Downloading (100%)
guzzlehttp/guzzle suggests installing psr/log (Required for using the Log middleware)
aws/aws-sdk-php suggests installing aws/aws-php-sns-message-validator (To validate incoming SNS notifications)
aws/aws-sdk-php suggests installing doctrine/cache (To use the DoctrineCacheAdapter)
Writing lock file
Generating autoload files
[root@ip-172-31-80-161 html]# ls -l
total 1844
-rw-r--r-- 1 root root 62 Oct 13 00:04 composer.json
-rw-r--r-- 1 root root 12973 Oct 13 00:04 composer.lock
-rwxr-xr-x 1 root root 1852323 Oct 13 00:04 composer.phar
drwxr-xr-x 3 root root 4096 Oct 12 23:52 s3
-rw-r--r-- 1 root root 19 Oct 12 23:52 test.php
drwxr-xr-x 8 root root 4096 Oct 13 00:04 vendor
[root@ip-172-31-80-161 html]# cd vendor
[root@ip-172-31-80-161 vendor]# ls -l
total 28
-rw-r--r-- 1 root root 178 Oct 13 00:04 autoload.php
drwxr-xr-x 3 root root 4096 Oct 13 00:04 aws
drwxr-xr-x 2 root root 4096 Oct 13 00:04 bin
drwxr-xr-x 2 root root 4096 Oct 13 00:04 composer
drwxr-xr-x 5 root root 4096 Oct 13 00:04 guzzlehttp
drwxr-xr-x 3 root root 4096 Oct 13 00:04 mtdowling
drwxr-xr-x 3 root root 4096 Oct 13 00:04 psr
[root@ip-172-31-80-161 vendor]# vi autoload.php
<?php
// autoload.php @generated by Composer
require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInit818e4cd87569a511144599b49f2b1fed::getLoader();
* Using the PHP to access to S3
[root@ip-172-31-80-161 s3]# ls -l
total 24
-rw-r--r-- 1 root root 796 Oct 12 23:52 cleanup.php
-rw-r--r-- 1 root root 195 Oct 12 23:52 connecttoaws.php
-rw-r--r-- 1 root root 666 Oct 12 23:52 createbucket.php
-rw-r--r-- 1 root root 993 Oct 12 23:52 createfile.php
-rw-r--r-- 1 root root 735 Oct 12 23:52 readfile.php
-rw-r--r-- 1 root root 193 Oct 12 23:52 README.md
[root@ip-172-31-80-161 s3]# vi createbucket.php
<?php
//copyright 2015 - A Cloud Guru.
//connection string
include 'connecttoaws.php';
// Create a unique bucket name
$bucket = uniqid("acloudguru", true);
// Create our bucket using our unique bucket name
$result = $client->createBucket(array(
'Bucket' => $bucket
));
//HTML to Create our webpage
echo "<h1 align=\"center\">Hello Cloud Guru!</h1>";
echo "<div align = \"center\"><img src=\"https://acloud.guru/images/logo-small-optimised.png\"></img></div>";
echo "<h2 align=\"center\">You have successfully created a bucket called {$bucket}</h2>";
echo "<div align=\"center\"><a href=\"createfile.php?bucket=$bucket\">Click Here to Continue</a></div>";
?>
[root@ip-172-31-80-161 s3]# vi connecttoaws.php
<?php
// Include the SDK using the Composer autoloader
require '/var/www/html/vendor/autoload.php';
$client = new Aws\S3\S3Client([
'version' => 'latest',
'region' => 'us-east-1'
]);
?>
[root@ip-172-31-80-161 s3]# vi createfile.php
<?php
//Copyright 2015 A Cloud Guru
//Connection string
include 'connecttoaws.php';
/*
Files in Amazon S3 are called "objects" and are stored in buckets. A specific
object is referred to by its key (or name) and holds data. In this file
we create an object called acloudguru.txt that contains the data
'Hello Cloud Gurus!'
and we upload/put it into our newly created bucket.
*/
//get the bucket name
$bucket = $_GET["bucket"];
//create the file name
$key = 'cloudguru.txt';
//put the file and data in our bucket
$result = $client->putObject(array(
'Bucket' => $bucket,
'Key' => $key,
'Body' => "Hello Cloud Gurus!"
));
//HTML to create our webpage
echo "<h2 align=\"center\">File - $key has been successfully uploaded to $bucket</h2>";
echo "<div align = \"center\"><img src=\"https://acloud.guru/images/logo-small-optimised.png\"></img></div>";
echo "<div align = \"center\"><a href=\"readfile.php?bucket=$bucket&key=$key\">Click Here To Read Your File</a></div>";
?>
[root@ip-172-31-80-161 s3]# vi readfile.php
<?php
//connection string
include 'connecttoaws.php';
//code to get our bucket and key names
$bucket = $_GET["bucket"];
$key = $_GET["key"];
//code to read the file on S3
$result = $client->getObject(array(
'Bucket' => $bucket,
'Key' => $key
));
$data = $result['Body'];
//HTML to create our webpage
echo "<h2 align=\"center\">The Bucket is $bucket</h2>";
echo "<h2 align=\"center\">The Object's name is $key</h2>";
echo "<h2 align=\"center\">The Data in the object is $data</h2>";
echo "<div align = \"center\"><img src=\"https://acloud.guru/images/logo-small-optimised.png\"></img></div>";
echo "<div align = \"center\"><a href=\"cleanup.php?bucket=$bucket&key=$key\">Click Here To Remove Files & Bucket</a></div>";
?>
[root@ip-172-31-80-161 s3]# vi cleanup.php
<?php
//Connection String
include'connecttoaws.php';
//Code to get our bucketname and file name
$bucket = $_GET["bucket"];
$key = $_GET["key"];
//buckets cannot be deleted unless they are empty
//Code to delete our object
$result = $client->deleteObject(array(
'Bucket' => $bucket,
'Key' => $key
));
//code to tell user the file has been deleted.
echo "<h2 align=\"center\">Object $key successfully deleted.</h2>";
//Code to delete our bucket
$result = $client->deleteBucket(array(
'Bucket' => $bucket
));
//code to create our webpage.
echo "<h2 align=\"center\">Bucket $bucket successfully deleted.</h2>";
echo "<div align = \"center\"><img src=\"https://acloud.guru/images/logo-small-optimised.png\"></img></div>";
echo "<h2 align=\"center\">Good Bye Cloud Gurus!</h2>";
?>
http://54.89.219.112/s3/createbucket.php
acloudguru.... buckets are created in my S3.
Click on the Link.
cloudguru.txt file has been uploaded to the bucket in S3.
Click on the Link.
Click on the Link.
The bucket has been removed.
curl http://169.254.169.254/latest/meta-data/ (*****)
How to get the public IP address (Exam *****)
[root@ip-172-31-80-161 s3]# curl http://169.254.169.254/latest/meta-data/
ami-id
ami-launch-index
ami-manifest-path
block-device-mapping/
hostname
iam/
instance-action
instance-id
instance-type
local-hostname
local-ipv4
mac
metrics/
network/
placement/
profile
public-hostname
public-ipv4
public-keys/
reservation-id
security-groups
[root@ip-172-31-80-161 s3]# curl http://169.254.169.254/latest/meta-data/public-ipv4
54.89.219.112[root@ip-172-31-80-161 s3]#
[root@ip-172-31-80-161 s3]# yum install httpd php php-mysql
[root@ip-172-31-80-161 s3]# service httpd start
Starting httpd:
[root@ip-172-31-80-161 s3]# yum install git
[root@ip-172-31-80-161 s3]# cd /var/www/html
[root@ip-172-31-80-161 html]# git clone https://github.com/acloudguru/metadata
Cloning into 'metadata'...
remote: Counting objects: 9, done.
remote: Total 9 (delta 0), reused 0 (delta 0), pack-reused 9
Unpacking objects: 100% (9/9), done.
[root@ip-172-31-80-161 s3]# cd /var/www/html
[root@ip-172-31-80-161 html]# git clone https://github.com/acloudguru/metadata
Cloning into 'metadata'...
remote: Counting objects: 9, done.
remote: Total 9 (delta 0), reused 0 (delta 0), pack-reused 9
Unpacking objects: 100% (9/9), done.
[root@ip-172-31-80-161 html]# ls -l
total 1848
-rw-r--r-- 1 root root 62 Oct 13 00:04 composer.json
-rw-r--r-- 1 root root 12973 Oct 13 00:04 composer.lock
-rwxr-xr-x 1 root root 1852323 Oct 13 00:04 composer.phar
drwxr-xr-x 3 root root 4096 Oct 13 00:34 metadata
drwxr-xr-x 3 root root 4096 Oct 13 00:15 s3
-rw-r--r-- 1 root root 19 Oct 12 23:52 test.php
drwxr-xr-x 8 root root 4096 Oct 13 00:08 vendor
[root@ip-172-31-80-161 html]# cd metadata
[root@ip-172-31-80-161 metadata]# ls -l
total 8
-rw-r--r-- 1 root root 676 Oct 13 00:34 curlexample.php
-rw-r--r-- 1 root root 11 Oct 13 00:34 README.md
[root@ip-172-31-80-161 metadata]# vi curlexample.php
<?php
// create curl resource
$ch = curl_init();
$publicip = "http://169.254.169.254/latest/meta-data/public-ipv4";
// set url
curl_setopt($ch, CURLOPT_URL, "$publicip");
//return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// $output contains the output string
$output = curl_exec($ch);
// close curl resource to free up system resources
curl_close($ch);
// close curl resource to free up system resources
curl_close($ch);
//Get the public IP address
echo "The public IP address for your EC2 instance is $output";
?>
'IoT > AWS AMAZON' 카테고리의 다른 글
나도 모르게 AWS 비용이 부과 되고 있었다. - NAT Gateway - (2) | 2019.05.21 |
---|---|
[ML] AWS ML, AI, SageMaker - With Python lecture (Udemy) (0) | 2019.03.19 |
Register today for the AWS re:Invent live streams (0) | 2017.11.09 |
[Alexa] 7 Tips for Building Standout Skills Your Customers Will Love (0) | 2017.09.29 |
Free Mobile App - Download 'Lottery Numbers' app from Amazon App Store (0) | 2017.09.02 |
Make enable Yut nori game helper skill on your Alexa devices. (0) | 2017.08.25 |
[Alexa Skill] Publishing Alexa Skill - Yut Nori game helper - (0) | 2017.08.24 |
[Alexa Skill] Descriptions and Images of Yutnori for Alexa Skill (0) | 2017.08.19 |
[Alexa Skill] How to develop Alexa Skill. - A place where Changsoo lived. (0) | 2017.08.14 |
[Alexa Skill] Memo for Alexa skill development (0) | 2017.08.08 |