access AWS S3 with custom domain - amazon-web-services

I've been using AWS_CLOUDFRONT_DOMAIN = 'media.example.com'
One consequence is that I have database records of image urls which have the above domain name enbeded such as http://media.example.com/media/blog_image_web/2016-07-01/702ef913-ddeb-4880-a715-397ce7b9efd7.jpg
Now I'd like to stop using cloudfront and just want to server from S3.
Problem is S3 url looks like http://my.bucketname.s3.amazonaws.com/media/blog_image_web/2016-07-01/702ef913-ddeb-4880-a715-397ce7b9efd7.jpg for the same image file..
I can update the database by replacing
http://media.example.com/ to http://my.bucketname.s3.amazonaws.com/
However, it would be much better if I can just keep using http://media.example.com/ whether I use cloudfront or not (or I could move my bucket later).
How can I use a custom domain to access s3 objects?

You can assign a custom domain to point to an Amazon S3 bucket.
The basic steps are:
Create an S3 bucket with a name equal to the domain name (eg media.example.com)
Activate Static Website Hosting on the bucket
Create an A record in Route 53 for media.example.com with Alias = YES and point it to your S3 website endpoint
See documentation: Example: Setting Up a Static Website Using a Custom Domain

Related

Redirect directories to individual s3 buckets?

I have a Laravel application hosted on a domain. I have several dynamic directories ie:
example.com/directory
example.com/random
example.com/moon
I would like each of these directories to resolve to a different s3 bucket while masking the URL (I want to see the URL above, not the s3 bucket URL). What's the best way to accomplish this? I could possibly create a primary bucket and host example.com on it and create routing rules on that s3 bucket to redirect to the other s3 buckets (I think). What do those routing rules look like? I was unable to find directions in the AWS documentation that showed how to redirect to other buckets. Is there another, more simple way to go about this?
It's worth noting the Laravel application may not need to be involved in the actual routing as much as using the AWS sdk to dynamically configure the directories.
You have to use Route53 along with S3 enabling static website hosting.
For detail configuration about static website hosting in S3, you can take a look here.
After that choose Route53 as a service in AWS Console.
Select your hosted zone and add a CNAME recordset, in the value field enter the S3 bucket endpoint url and in the Name field enter the url that you want to point to the S3 bucket.
For using Route53 you can read this AWS document.
The best way would be to create a CloudFront (CF) distribution with three different origins. Then each origin would respond to different Origin Path which would lead to different buckets.
example.com could be defined in Route53, with Alias A record to the CF distribution. The benefit of using CF with S3 is that you not only can speed up your website (CF is CDN), but also you can keep your buckets and objects private:
Amazon S3 + Amazon CloudFront: A Match Made in the Cloud

Can I Use same AWS S3 bucket for 2 domains whilst using the cloudflare CDN

I am using AWS S3 bucket for storing and displaying the user upload image files.
My website name is example.net and as I want to use cloudflare CDN and show the image url path as images.example.net (as I want to mask the S3 url).
I created a S3 bucket with name images.example.net and mapped the CNAME images.example.net.s3.us-east-1.amazonaws.com as images.
So I am able to access the images using url images.example.net/myPic.jpg
Recently I got a new domain example.com (only the extension is different), and now I want to use the same S3 bucket example.net to store the files and the url needs to shown as images.example.com/myPic.jpg
If I create a new S3 bucket images.example.com , then I can do it, but I want to use the existing one only.
Is there any method to configure in cloudflare for that ?
Can I do it without creating a new bucket named images.example.com ?
If you're using virtual hosting then you're limited to a single domain per bucket by using the domain as the bucket name.
The only options available to you are:
Create a second S3 bucket with your other domain name as the CNAME
Create a CloudFront distribution in front of your S3 bucket and specify both domains as alternative domain names. Then on CloudFlare use the CloudFront CNAME. Disable all caching to allow CloudFlare to handle all the CDN functionality.
Obviously neither are ideal for your scenario, however these are the options available at this time.

What is the best way to point domain to a S3 bucket that doesnt have the domain as bucket name

I'm new to AWS and all of it's services and my first go at it I started my project with a S3 bucket that was created by default by AWS Vue CLI. I've got Cognito pool & gateway API connected to this bucket but now that I want to connect this project to a custom domain I just purchased I realize the bucket name needs to match the root domain name. From what I understand this will mean that I need to pull all non-aws files from my Vue project, duplicate it, and either reconfigure pre-existing connections or start all over.
I've got my custom domain set up with an empty S3 bucket, Cloudfront, and Router 53 so that's up and working but now I am not sure how to go about transferring this project from buckets.
So basically I started my project with Bucket1 and finished everything that included Cognito Pool & Gateway API. Now I have a custom domain I want to use have Cloudfront and Route 53 with CustomDomain bucket name and I want to have the project from Bucket1 load for the new bucket.
Using Cloud-front you can mitigate this issue.
Route 53(DNS Name) --> Cloudfront Url --> S3 origin
As you already created a bucket for website hosting, below steps can help you.
Use the Amazon S3 console t to login and search for CloudFront.
Click on Create distribution
Create a Web distribution
Select existing bucket in Origin Domain Name and complete the setup.
Update the DNS records for your domain to point your website's CNAME to your CloudFront distribution's domain name. You can find your distribution's domain name in the CloudFront console in a format that is similar to d1234abcd.cloudfront.net.
Wait for your DNS changes to propagate and for the previous DNS entries to expire.
The typical AWS way to do this is to use cloudfront - the domain points to cloudfront and cloudfront can point to any bucket name or other source location; when you introduce cloudfront into the mix, the bucketname no longer needs to match the domain name.

Hosting multiple sub-domains from a single aws s3 bucket

Is it possible to host multiple subdomains from a single bucket folders?
Example -
Lets assume bucketname is my aws s3 bucket.
To access the site url is - http://bucketname.s3.amazonaws.com.
Now lets assume i have 5 folders inside it - a,b,c,d & e.
Can i create subdomains pointing to their respective folders inside the s3 bucket. Like -
http://a.bucketname.s3.amazonaws.com site works from folder a of the bucket
http://b.bucketname.s3.amazonaws.com site works from folder b of the bucket
http://c.bucketname.s3.amazonaws.com site works from folder c of the bucket
and so on.
Is it possible ?
Amazon S3 alone cannot do what you ask for.
The URL will point to only one bucket.
Typically, however, people want a Custom URL to point to content. For example, you could point mycompanyname.com to Amazon S3. This involves:
Owning the domain name
Creating a bucket with a name that matches the domain name (thus, you'd need one bucket per domain/subdomain)
Configuring the DNS entry (in Amazon Route 53 or your own DNS provider) to with a CNAME that points to the S3 bucket
Alternatively, behaviours can be configured in Amazon CloudFront that can present content from various back-ends.
Naming conventions for bucket URL are fixed by AWS. You cannot change to subdomain URL. You can use CloudFront to host it in your own domain or it can host under *.cloudfront.net.
Subdomain for cloudfront is also random. Will look like the following.
d3v7q0dqls688r.cloudfront.net
Hope it helps.

How to hide or change the path to the images in Amazon S3 bucket?

I am uploading images in Amazon S3 bucket , I want to morph the url of the image or change it with the domain name ,how to do map the url of bucket with custom domain?
You can use Amazon CloudFront for that. CloudFront lets you use your own domain name (for example, www.example.com) for links to your objects instead of using the domain name that CloudFront assigns to your distribution.
You can read more here.