Tuesday, 17 October 2017

How to use aws S3 and SQS service


Use AWS S3 and SQS service

To use AWS S3 and SQS service we need to install AWS library, here we are installing library for PHP.
So, first go to your project folder and type below commands from terminal as root user

cd /var/www/html/awstest

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"

php -r "if (hash_file('SHA384', 'composer-setup.php') === '544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"

php composer-setup.php

php -r "unlink('composer-setup.php');"

Now, create composer.json file with below content in it.

nano composer.json

{
"require": {
"aws/aws-sdk-php": "2.*"
}
}

Install aws library with below command

php
composer.phar install

This will create a vendor directory in your project with the required libraries and an autoloader script used to load them for your project.


To push file into aws S3 bucket below is sample code:

<?php
require '/var/www/html/vendor/autoload.php';
use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;
$bucket = 'bucketname';
$sourceFile = '/var/www/html/4903.csv';
$s3FileName = '49031.csv';
$client = S3Client::factory(array(
'key' => "yourawsaccesskey",
'secret' => "yourawssecretkey"
));
try {
$client->putObject(array(
'Bucket'=> $bucket,
'Key' => $s3FileName,
'SourceFile' => $sourceFile,
'StorageClass' => 'REDUCED_REDUNDANCY',
'ACL' => 'public-read'
));
echo "File uploaded successfully\n";
} catch (S3Exception $e) {
// Catch an S3 specific exception.
echo $e->getMessage();
echo "\n";
}
?>


To send message into queue use below code:

<?php
require '/var/www/html/awstest/vendor/autoload.php';
use Aws\Sqs\SqsClient;
use Aws\Common\Credentials\Credentials;
$credentials = new Credentials('AKIAJYJU67ADHXI7ILKA', 'wOIi+6jP7wTUU8bfM8ywtijP1ShjNQiuXsyx4Ugo');
// Instantiate the SQS client with your AWS credentials
$client = SqsClient::factory(array(
'credentials' => $credentials,
'region' => 'us-west-2'
));
$result = $client->createQueue(array('QueueName' => 'testque'));
$queueUrl = $result->get('QueueUrl');
//echo "SQS queue url: $queueUrl";
$client->sendMessage(array(
'QueueUrl' => $queueUrl,
'MessageBody' => '{"TransID":"707"}',
));
?>



To receive message from queue use below code

<?php
require '/var/www/html/awstest/vendor/autoload.php';
use Aws\Sqs\SqsClient;
use Aws\Common\Credentials\Credentials;
$credentials = new Credentials('AKIAJYJU67ADHXI7ILKA', 'wOIi+6jP7wTUU8bfM8ywtijP1ShjNQiuXsyx4Ugo');
// Instantiate the SQS client with your AWS credentials
$client = SqsClient::factory(array(
'credentials' => $credentials,
'region' => 'us-west-2'
));
$result = $client->createQueue(array('QueueName' => 'testque'));
$queueUrl = $result->get('QueueUrl');
$data = $client->receiveMessage(array(
'QueueUrl' => $queueUrl
//'MaxNumberOfMessages' => 10
));
if(!empty($data['Messages'])){
$msg = $data['Messages'][0]['Body'];
$msg_receipt_handle = $data['Messages'][0]['ReceiptHandle'];
$obj = json_decode($msg);
echo $obj->{'TransID'}."\n";
$client->deleteMessage(array(
'QueueUrl' => $queueUrl,
'ReceiptHandle' => $msg_receipt_handle
));
}
else{
$no_msg['Message'] = "No Message";
$no_msg_res = json_encode($no_msg);
echo $no_msg_res."\n";
}
?>

No comments:

Post a Comment