iSCSI connected to AWS Gateway, but keep asking formatting - amazon-web-services

All right, I am pretty newbie to network and storage things, but in my research, we need to use AWS S3 to backup data, sounds simple enough!
So I follow the "AWS storage gateway user guide (API version 2013-06-30).
Below are details I could provide based on my best knowledge:
Gateway-cached
Gateway on-premises, using VMware ESXi Hypervisor
About 300 Gb cache and 150 upload buffer
And
AWS gateway is deployed and activated
Cache storage and upload buffer configured on VM
A volume in Amazon S3 is created.
After all the above completed, I tried to use my Windows 8 iSCSI to connect to VM. It shows as a disk in folder, so I did a initial formatting. But after this, it asks for formatting again.
I followed the guide, but unfortunately it didn't work for me this time. Could anyone provide any insight on this issue? Thanks very much in advance.

It turns out that I don't understand how iSCSI works.
Quoted from Amazon Storage Gateway User Guide:
Each of your storage volumes is exposed as an iSCSI target. Connect only one iSCSI initiator to each iSCSI target
Since I thought iSCSI target as a network shared drive, I let multiple machine connect to the iSCSI target, resulting keeping asking for formatting.

Related

AWS Storage Gateway and vSANs

I'm learning about AWS Storage Gateway appliances, and I can't seem to find the answer to my question, it may be my lack of storage appliance knowledge or I'm not looking in the right place, but hope folks here can help or point me to some documentation.
I'm trying to use an AWS storage gateway appliance to back up/archive data from a particular application on an On-Prem Microsoft server to an Amazon s3 bucket. However, there is a requirement for the storage gateway to be compatible with vSANS storage since the site is a VMWare shop. I'm not super familiar with the VMWare suite, but I see in AWS I can configure a VMWare ESXi virtual machine by download the OVF template and deploying, is that all I need to set up the file share? How does the storage type being vSANs impact this approach? Any help is appreciated!
The storage appliance creates a file share, NFS or SMB, when using 3s storage. Your application or backup application would put the data there. vSAN won't effect anything since this would all be happening inside the VMs. It doesn't involve the underlaying storage outside the VMs, so the storage system backing the datastore doesn't come into play.
Yes, the OVF is about all you need other than a virtual network and IP for the appliance that can connect with AWS. Also a PC with a browser that can connect to both AWS and the internal ip assigned to the appliance for getting the appliance setup to your AWS. All of the instructions are baked in once you click create gateway from the AWS console.

Best practice to backup EC2 Instance Files

I'm new to AWS Platform and its EC2 mechanisms.
I have an Instance running Ubuntu Server with a service that creates backups every night.
Since my service can store the backup on an FTP server or to an SMB share, I wondering if it is possible to use the SMB protocol to store the backup into S3.
In the past I used BOTO (for python) to access to S3 bucker. But since this backup are very precious, I looking for a well tested mechanism to store the backup into S3.
Currently, I use "Data Lifecycle Manager" to make a backup of my instance every night.
In this way I use a lot of space (around 8 Gb) to backup few files (around 200 Mb) and spend money.
I'm looking for a better way to make backups.
Any suggestions?
Thanks in advance for the help!
if it is possible to use the SMB protocol to store the backup into S3.
You can use a File Gateway. If your Ubuntu server is running on EC2, then you can configure the gateway to run on EC2.

Can I use create a share between an EC2 instances and my local machine?

Just to give you a context... I'm new to the aws world and all the services that provides.
I have a legacy application which I need to share some binarys with a client, and I was trying to use a ec2 instance (Amazon Linux AMI) with samba, to map it into a windows local machine.
I was able to establish a conection with another ec2 instances (same vpc), just as a tryout. But I wasn't able to do so with my windows machine or even with a linux vm I have.
The inbound rules for this concept ec2 instance was fully open (All traffic allowed).
Main question
Is it possible to do? Share a file system between a ec2-instances with a (over internet) local machine?
Just saying:
S3 storage isn't an option.
And in my region FSX still ain't implemented and for latency reasons is a no go.
Please ask as many questions you want, I'll try to anwser them as fast as I Can.
Kind Regads.
TL;DR - it's possible, but there's no 'simple' solution (in my opinion).
I thought of two possible solutions that you can implement, here we go ...
1: AWS EFS, AWS Direct Connect and Docker
A possible solution would be using AWS Elastic File System (EFS), AWS Direct Connect and a Docker Linux container.
Drawbacks
If it's the first time you encounter with the above AWS services or Docker, then it's going to be a bit of a journey to learn about them
EFS pricing - it's not so cheap, and you also need to consider the inbound and outbound traffic, it's best to use the calculator that is in the pricing page
EFS performance - if you only share files then it should be okay, but if you expect to get high speeds, then remember that it's not an EBS volume, so for higher speeds you need to pay more money
AWS Direct Connect pricing - you also need to take that into consideration
Security - I'm not sure how sensitive your data is, but you need to make sure you create a very strict VPC, with Security Groups and Network Access List rules - read about the VPC Security Best Practices
Steps to implement the solution
Follow the Walkthrough: Create and Mount a File System On-Premises with AWS Direct Connect and VPN, also, here are the steps on how to combine it with Docker
(Optional) To make it a bit easier - for Windows to "support" Linux file-system, you should use Windows Git Bash. If you're not sure how to use install 3rd-party apps in Windows Git Bash (like aws-vault) then read this blog post
Create an EFS in AWS, and mount it to your EC2 instance, read more about it here
Use AWS Direct Connect to connect to your VPC from your local Windows machine
Install Docker for Windows on your local machine
Create a Docker Volume, and mount the same EFS to that volume - a good example for this step
Test it - SSH to your EC2 instance, create a file on the EFS volume and then check in your local Docker Linux container that this file appears on the EFS volume
I omitted the security steps because it's up to you how strict you want your solution to be.
2: Using S3 as a shared file-system
You can try out this tool s3fs-fuse, but you'll still need to use a Docker Linux container since you're on Windows. I haven't tested it but it looks promising. You can read this blog post, it's a step-by-step tutorial on how to do it, and also shares some other possible solutions.

How to send webcam video to Amazon AWS EC2 Instance

Suppose I want to stream video captured by my webcam to an Amazon AWS EC2 Instance for the purposes of image processing in the cloud. How would one do this? The only means for file transfer that I am aware of, is scp to copy files to the remote host. I have no idea where to begin in regards to streaming video to AWS EC2. Google turned up nothing for me. Any ideas?
Here is what worked. There are likely many other methods.
1) Create a free tier Amazon AWS EC2 instance with Ubuntu Server 16.04
2) Go to the security groups, and modify the security group to allow TCP traffic to reach your instance
3) Note the public ipv4 address of your instance
4) Develop client code to open network sockets, and send data to them (Python 2.7 has the socket package)
5) Develop server code to open network sockets, and listen/accept connection (Python 2.7 works).
6) Client side needs to generate video frames from the webcam, and this is done quite easily using OpenCV2 within Python.
A great reference was the answer posted in this thread:
Send Live Video OpenCV Python
The only means for file transfer that I am aware of, is scp to copy files to the remote host.
An AWS EC2 instance can largely be treated just like any other server.. just in the Cloud. If you want to connect to it, install some software, open ports, whatever, all of that is do-able.
I'm assuming you want to "stream" video from a webcam to the EC2 instance.
You need some kind of client software where the webcam is connected to stream it to the EC2 instance. You would assign an Elastic IP to the instance and configure that software to stream it to the address.
You would then need to install or build something on the server to receive the stream and do something with it. Either save it somewhere for processing, do some live processing and stream it somewhere else, etc.
Each of these components are broad subjects and can't really recommend any particular software to accomplish this. The important part here though is that the EC2 instance can do all of this, assuming you find or build software to handle all of these tasks.

How to setup shared persistent storage for multiple AWS EC2 instances?

I have a service hosted on Amazon Web Services. There I have multiple EC2 instances running with the exact same setup and data, managed by an Elastic Load Balancer and scaling groups.
Those instances are web servers running web applications based on PHP. So currently there are the very same files etc. placed on every instance. But when the ELB / scaling group launches a new instance based on load rules etc., the files might not be up-to-date.
Additionally, I'd rather like to use a shared file system for PHP sessions etc. than sticky sessions.
So, my question is, for those reasons and maybe more coming up in the future, I would like to have a shared file system entity which I can attach to my EC2 instances.
What way would you suggest to resolve this? Are there any solutions offered by AWS directly so I can rely on their services rather than doing it on my on with a DRBD and so on? What is the easiest approach? DRBD, NFS, ...? Is S3 also feasible for those intends?
Thanks in advance.
As mentioned in a comment, AWS has announced EFS (http://aws.amazon.com/efs/) a shared network file system. It is currently in very limited preview, but based on previous AWS services I would hope to see it generally available in the next few months.
In the meantime there are a couple of third party shared file system solutions for AWS such as SoftNAS https://aws.amazon.com/marketplace/pp/B00PJ9FGVU/ref=srh_res_product_title?ie=UTF8&sr=0-3&qid=1432203627313
S3 is possible but not always ideal, the main blocker being it does not natively support any filesystem protocols, instead all interactions need to be via an AWS API or via http calls. Additionally when looking at using it for session stores the 'eventually consistent' model will likely cause issues.
That being said - if all you need is updated resources, you could create a simple script to run either as a cron or on startup that downloads the files from s3.
Finally in the case of static resources like css/images don't store them on your webserver in the first place - there are plenty of articles covering the benefit of storing and accessing static web resources directly from s3 while keeping the dynamic stuff on your server.
From what we can tell at this point, EFS is expected to provide basic NFS file sharing on SSD-backed storage. Once available, it will be a v1.0 proprietary file system. There is no encryption and its AWS-only. The data is completely under AWS control.
SoftNAS is a mature, proven advanced ZFS-based NAS Filer that is full-featured, including encrypted EBS and S3 storage, storage snapshots for data protection, writable clones for DevOps and QA testing, RAM and SSD caching for maximum IOPS and throughput, deduplication and compression, cross-zone HA and a 100% up-time SLA. It supports NFS with LDAP and Active Directory authentication, CIFS/SMB with AD users/groups, iSCSI multi-pathing, FTP and (soon) AFP. SoftNAS instances and all storage is completely under your control and you have complete control of the EBS and S3 encryption and keys (you can use EBS encryption or any Linux compatible encryption and key management approach you prefer or require).
The ZFS filesystem is a proven filesystem that is trusted by thousands of enterprises globally. Customers are running more than 600 million files in production on SoftNAS today - ZFS is capable of scaling into the billions.
SoftNAS is cross-platform, and runs on cloud platforms other than AWS, including Azure, CenturyLink Cloud, Faction cloud, VMware vSPhere/ESXi, VMware vCloud Air and Hyper-V, so your data is not limited or locked into AWS. More platforms are planned. It provides cross-platform replication, making it easy to migrate data between any supported public cloud, private cloud, or premise-based data center.
SoftNAS is backed by industry-leading technical support from cloud storage specialists (it's all we do), something you may need or want.
Those are some of the more noteworthy differences between EFS and SoftNAS. For a more detailed comparison chart:
https://www.softnas.com/wp/nas-storage/softnas-cloud-aws-nfs-cifs/how-does-it-compare/
If you are willing to roll your own HA NFS cluster, and be responsible for its care, feeding and support, then you can use Linux and DRBD/corosync or any number of other Linux clustering approaches. You will have to support it yourself and be responsible for whatever happens.
There's also GlusterFS. It does well up to 250,000 files (in our testing) and has been observed to suffer from an IOPS brownout when approaching 1 million files, and IOPS blackouts above 1 million files (according to customers who have used it). For smaller deployments it reportedly works reasonably well.
Hope that helps.
CTO - SoftNAS
For keeping your webserver sessions in sync you can easily switch to Redis or Memcached as your session handler. This is a simple setting in the PHP.ini and they can all access the same Redis or Memcached server to do sessions. You can use Amazon's Elasticache which will manage the Redis or Memcache instance for you.
http://phpave.com/redis-as-a-php-session-handler/ <- explains how to setup Redis with PHP pretty easily
For keeping your files in sync is a little bit more complicated.
How to I push new code changes to all my webservers?
You could use Git. When you deploy you can setup multiple servers and it will push your branch (master) to the multiple servers. So every new build goes out to all webserver.
What about new machines that launch?
I would setup new machines to run a rsync script from a trusted source, your master web server. That way they sync their web folders with the master when they boot and would be identical even if the AMI had old web files in it.
What about files that change and need to be live updated?
Store any user uploaded files in S3. So if user uploads a document on Server 1 then the file is stored in s3 and location is stored in a database. Then if a different user is on server 2 he can see the same file and access it as if it was on server 2. The file would be retrieved from s3 and served to the client.
GlusterFS is also an open source distributed file system used by many to create shared storage across EC2 instances
Until Amazon EFS hits production the best approach in my opinion is to build a storage backend exporting NFS from EC2 instances, maybe using Pacemaker/Corosync to achieve HA.
You could create an EBS volume that stores the files and instruct Pacemaker to umount/dettach and then attach/mount the EBS volume to the healthy NFS cluster node.
Hi we currently use a product called SoftNAS in our AWS environment. It allows us to chooses between both EBS and S3 backed storage. It has built in replication as well as a high availability option. May be something you can check out. I believe they offer a free trial you can try out on AWS
We are using ObjectiveFS and it is working well for us. It uses S3 for storage and is straight forward to set up.
They've also written a doc on how to share files between EC2 instances.
http://objectivefs.com/howto/how-to-share-files-between-ec2-instances