There are a number of reasons why you would want to setup Amazon S3 storage for your church podcast hosting:
- Storage is cheaper
- Bandwidth is cheaper
- Website migrations are easier
- Your podcast–on the cloud!
These are the top reasons why I’ve put the ChurchMag podcast and Finding Justice Podcast on Amazon’s S3 service. Moreover, my current web host, WP Engine, doesn’t allow me to stream audio as it sucks down bandwidth and uses lots of storage. When you consider that a typical podcast will take anywhere between 20-30mb, using an optimized system like Amazon’s S3 makes a lot of sense, anyway. You also don’t need to worry about migrating all those mp3’s if you decide to switch web hosting, either!
Setting up the my Amazon S3 for church podcast hosting can be a little intimidating, so here’s how to do it:
How-To Setup Your Amazon S3
First, sign into your AWS (Amazon Web Services) console. If you don’t have an account setup, go ahead and do so. If you’re setting this up for an organization (not for personal use), I suggest setting up an account with your organizations payment info, as you don’t want it tied to your personal account. It sounds like a no-brainer, but I hate for you to get too far into this and realize you shouldn’t be using your personal account!
Now, select the S3 option:
Go ahead and create your bucket. You’ll want to pay close attention to your naming scheme, as we’ll be using this bucket name as a forwarding URL to the podcast.
For example, we’re going to name this bucket:
podcast.churchm.ag
Be sure you select the appropriate region for your bucket. You’ll want it to be geographically closest to the majority of your audience.
Next, we’re going to get our Permissions set correctly. With the bucket selected, expand the “Permissions” tab and click the “Add bucket policy.”
Here’s the code you’ll want to add:
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::podcast.churchm.ag/*"
}
]
}
Be sure you change the “podcast.churchm.ag” to your own URL.
Once this is done, it’s time to dig into some more special settings that will make your media URL forward to your main podcast page (or anywhere else you would like). It isn’t necessary, but I think it’s nice. Besides, when you follow these steps through your setup process, the link to your mp3 files will be much prettier than those who link directly to their S3 bucket.
Now, select your new bucket and click the upper left “Properties” tab. You should now have data about your bucket in the left-hand pane. Expand “Static Website Hosting” and add “index.html” to both boxes as pictured here:
Save!
Folders and Files
Now, let’s add some folders to our bucket and setup the index.html we just referred to. Although I prefer using my favorite FTP Mac app Transmit for modifying my S3 buckets, for the sake of this tutorial I’m going to keep it all in the AWS Console (you can setup your FTP details in your S3 enabled FTP client by configuring your Security Credentials which can be accessed via your Account/Console pulldown).
Let’s create the index.html using notepad or favorite code editor and create the index.html file.
Here’s the magical code:
The URL in the code needs to be the landing page you want your bucket name to land. So after I’ve uploaded my new index.html file, going to http://podcast.churchm.ag will forward to https://churchm.ag/podcast/ which is the category slug for all my podcasts. This is how I’m setting it up for ChurchMag, so you may want to organize it differently. The important thing is to understand the mechanics of how this works, so you can shape it how you like.
After you’ve created your index.html and uploaded it to your bucket, your subdomain should forward as needed, but before you get too excited and try it out, http://podcast.churchm.ag (orwhatever you named your bucket), let’s add a CNAME record to the DNS for it to work.
DNS Setup
Using the ChurchMag podcast as the example, the CNAME Name would be: podcast.churchm.ag and the Value you’ll want to add can be found in your S3 Console.
Jump back to your bucket Properties under the “Static Website Hosting” section, the same place you enabled the website hosting.
Copy the “Endpoint” and paste it as your DNS Value associated with your new CNAME. This the ugly URL we’re hiding.
Nifty, right?
You’ll need to give your DNS at least 24-hours to soak in, so don’t panic if you’re trying it and it’s not working. You’ll also want to wait for this to propagate before submitting your iTunes feed or sharing your new audio links, as this DNS needs to be working!
For me, it was up and running in a few hours, but this will depend on your refresh values and DNS provider.
New Folders
The next folders we will be adding has more to do with my own organization system and submitting my podcast to iTunes, so feel free to deviate a bit. I will say, however, it’s important to keep this organized. Depending on how many podcasts you’ll be producing, it’s important you keep everything nice and tidy.
Here are the folders I suggest adding:
- feed – This is where I keep my iTunes .xml file.
- images – This is where I keep my iTunes podcast cover art.
- 2013 – This is where I will store my 2013 audio.
Keep in mind that the folder structure will effect your URL.
Example:
http://podcast.churchm.ag/2013/filename.mp3
So, depending on how many podcasts or media files you plan on adding, you may or may not want to add some subfolders–i.e. Months under Years.
For my purposes, I will simply be using a relative dating system, so a podcast released on the last Wednesday in May would be:
http://podcast.churchm.ag/2013/04-29.mp3
Pretty URL’s–I love’em!
Now your AWS S3 is nicely configured for your iTunes podcast.
Go ahead and create some podcast artwork for your images folder, burn your XML file in the feed folder, and you’ll be ready to submit your podcast to iTunes and add your audio files to your website.
Any questions?
VietChristian says
Very cool… Eric, thank you for the how-to!
Rutledge Daugette says
Hey Eric, the code is missing on the page? I’m working to set it up for my site, but would like to know what the code you used for the index.html is.
Eric Dye says
Fixed! 😀
Rutledge Daugette says
Thank you!
Eric Dye says
😀
Craig Grella says
Probably the best tutorial i’ve read in a long time.
Perfect timing too. I’m working on putting up a new podcast.
Question, have you looked into cloudfront delivery? Does that make a difference in performance?
Thanks.
Eric Dye says
Awesome! Thanks!
I have not looked at using Cloudfront. I’ve got CDN running on the blog, but considering the nature of podcasts, the S3 solution seemed best.
Craig Grella says
I ended up going with libsyn for this. Seemed an affordable alternative to worrying about this code.
Eric Dye says
Yeah, but you are limited on the hosting end of things. I would like every podcast to be made available. That being said, I might would consider Buzzsprout as they offer unlimited storage.
Bruce says
So glad to have found your tutorial – just what I needed to get our sermon podcasts posted.
Thank YOU!
– Bruce
Eric Dye says
WOOT! 😀
Ben Meredith says
So, once I get all this done (Thanks!!) I want to have it possible for multiple folks to upload to my s3 bucket/folder without giving out my amazon login. Is that possible?
I searched their documentation and it’a all over my head at this point.
Eric Dye says
The only way you can do this, is by having them use a S3 FTP client and issue them their own code so you can revoke it if need be. Does that make sense? If not, I can get you more info. 🙂
Ben Meredith says
That makes sense.
I also discovered a way to create IAM users who have specific permissions. I THINK I’ve got it right with this as the Group Policy for that user
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*"
}
]
}
The user gets their own login to my specific AWS console and that specific bucket. Although it looks like the code above is giving access to all of my S3 resources. Is this right?
Eric Dye says
I would agree. This code DOES look like it gives access to all S3 resources. Open a different browser, login under a different user and try it?
Ben Meredith says
Yeah. It works. I now have a user that can access and modify all of my s3 resources. I wish I could give upload only access. Any tips on how to write the permissions code for upload only (or for just one specific bucket read/write access would be fine.)
Eric Dye says
I wish I knew more about S3. It’s pretty powerful, so I would try various Google searches and try to dig something up that way. I’m sure there’s got to be a way.
Chuck says
I’m using Amazon S3 to host my podcast. I have successfully got it into iTunes. My questions now is, how to I update it and add episodes. Do I just replace the XML file stored on AWS every time?
Thanks!
John R says
This tutorial is great, until the section on setting up DNS. I know where to get the info, but where do I go to set up the DNS? I didn’t see it in the SE dashboard nor is it on the cPanel for my site. Where do I go?
John R says
Oops… my question didn’t get posted (I probably hit a wrong key or something). This tutorial’s a big help in trying to change how our church does its audio sermon files. However, I’m not sure where I go to set up DNS. Is that done on the church’s website host or in the AWS panel? Where do I go?
John R says
Okay, found the DNS answer thanks to my webhost. But now I’ve got an iTunes XML question. Do I have to create a new one each time I upload a new sermon? Or do I create one and I’m done? Finally, is it done through iTunes?
Eric Dye says
Awesome! Glad you figured out where to edit your DNS. 🙂
You will submit your XML file to iTunes, but you’ll want to use an app or online service to publish your XML feed—unless you want to monkey with the raw code.
John R says
Where do I find or make the XML file that I submit? Do I have to remake and resubmit it each time I upload a new sermon (2-3 times a week)?
Eric Dye says
The XML file works just like an RSS feed. It has to be updated every time you add audio. Do you use OS X or Windows? I’ll point you in the right direction for a XML file creation app.
John R says
I’m using Windows 7 and I’m currently trying to get the sermons on our website by using Sermon Browser (www.sermonbrowser.com) to display them (allows me to display audio, video, and any PowerPoints for each sermon). It does not create the XML file.
Eric Dye says
I only know of good mac solutions, so I’m not real sure about this one for Windows: http://podcastgen.sourceforge.net/index.php?lang=en
Ben says
I put together a tutorial for how to get sermonbrowser to output a nifty XML file over at my blog.
http://benandjacq.com/2013/06/sermonbrowser-plugin-for-wordpress-rss-feed-tutorial/
Is that what you are looking for?
Eric Dye says
This is awesome, Ben. THANK YOU!!!
Jaron says
what is the OSX app for this?
Eric Dye says
I found this to work well: http://reinventedsoftware.com/feeder/
Steve says
Looks like you are now using Buzzsprout for your podcast correct?
Eric Dye says
That is correct. The podcast traffic increased enough that it was more cost effective to use their system.
Kristin says
Hi Eric… I followed this tutorial, and I can’t seem to get iTunes to accept my feed. I used A3, WordPress, the Powerpress plugin and a Feedburner feed. It keeps saying that my image is not correct (which, it is, I am sure) and that it must be hosted on a server that allows HTTP head requests. What am I doing wrong? The feed is working in feedburner and you can play the podcast on my WordPress site. I was also able to manually add the podcast in iTunes using the feed address from Feedburner. Also I have no idea what feed to put in under the “feed” folder you told us to create in the tutorial. Can I use the “XML” that Feedburner creates? I’m sorry for the barage of questions… this is my first time trying to set up a podcast, and I am completely lost.
Eric Dye says
It sounds like your hangup is with your XML/feed source. The only reason you would need an XML/feed file on the A3, is if that was how you were going to update your podcast. If you’re using Feedburner, you don’t need to do this. Which feed did you submit to iTunes?
Kristin says
I submitted the feedburner feed, http://feeds.feedburner.com/SincerelyAdorned. So should I just undo this entire tutorial and take off the index page and things? P.S. love the Doctor Who reference 🙂 I am definitely NOT a Cyberman.
Eric Dye says
Wait. What is Feedburner reading?
Kristin says
It is reading the WordPress feed that is generated using powerpress and WordPress.
Eric Dye says
This sounds weird, but it’s good that iTunes hasn’t accepted your feed, yet. At this point in the game, you can change things around, whereas once iTunes accepts it, it’s a lot harder to change.
If you like having your feed running through Powerpress and then to Feedburner, you might contact Powerpress to see if they have any conflicts with Feedburner. Depending on how much in love you are with Feedburner, you could always have that feed available for those that want to subscribe via RSS, but submit your Powerpress feed go to iTunes. You would be forking your feed at that point, and you would have the advantage of having everything automatically update, which might be better than manually updating it like I used to do (now using Buzzsprout).
Ben says
I am having a frustrating issue with my podcast that I can’t seem to trace to a definitive source.
I’m hosted on amazon as this tutorial instructs, and when a user on an iOS device downloads the sermon (note: I didn’t say “streams” the sermon) it lists as “temporarily unavailable” in the podcast app.
Streaming works fine in the podcast app, and as long as you start playing a downloaded sermon before it finishes downloading, it works fine, but the moment a file is fully downloaded it will not play the file.
This only happens on iOS. Android works fine, desktop podcast apps work fine. I have not tested other podcast apps on iOS, because other church podcasts are working fine.
I’m willing to pay a developer to teach me why this is not working.
Eric Dye says
Odd. When I used this before I switched to Buzzsprout, iOS wasn’t an issue. How are you generating your feed?
Carlos says
When setting this up for Amazon S3, do I need to enable Cloudfront and if so, which one do I use (file hosting or streaming)? Thanks for a great tutorial.
Commy says
Thanks for the tutorial Eric! We’re looking at migrating our media files to S3 and had a question. We have three churches with audio podcasts at each with video podcasts on the way if they don’t have them already. We’re wondering: what sort of S3 bucket setup should we use? One bucket for each podcast (Church #1 Video, Church #1 Audio, etc.) ? A bucket per church?
Eric Dye says
While I think it comes down to preference, I would do a separate bucket for each church, with one folder for video and the other audio.
Samuel Than says
Thanks for the tutorial. How does the costing of the bandwidth fair ?
If i were to have my website hosted on a server and the media on S3, will the downloading or streaming of the media tax towards my hosted server’s bandwidth quota ?
cheers
Jeremiah says
Trying to help a friend set up a new church by getting his sermons setup with RSS feed for easier downloading. I followed all the way through to the DNS part and I believe we have that figured out. My ignorant question (sorry if it’s bad) is what is the “RSS” feed now? Or is it auto (IE if I go to the CNAME with my podcast app will it find the RSS feed)?
Thank you for this great help!
Eric Dye says
Once the DNS has been switched (the pretty url pointing to the ugly url), it should be the pretty url. For example: http://www.podcast.domainname.com/feed/feed.xml
Aaron Olson says
How do u track stats?
Eric Dye says
THAT is the downfall of this method. While you can search some solutions, if you want more easy of use, stats, etc… something like Buzzsprout.com is the way to go—imo.
Garret says
Sir,
Looking for more clarification on the DNS Setup heading above. My goal is to set up a place where I can host my MP3 messages to then embed them into the church Blogger page (www.ebc-etown.org).
So, do I need to add the End Point information (podcast.church.ebc.s3-website-us-east-1.amazonaws.com) in the Blogger page? If not there, where do I need to apply this information?
Thank you,
Garret
ES says
This tutorial works great until the DNS part.
When I go to edit DNS settings under the main site (www.example.com) our host 1and1 has a note that reads:
CNAME records are supported only for subdomains. To redirect your domain, go to Domain Settings → Edit Destination.
Is there a way to follow your same steps here and account for this issue? So essentially, it seems like they want me to set up a subdomain of example.com (e.g. podcast.example.com) and then add the record with the CName and Endpoint. But will this actually still redirect in your example to the right category –> http://www.example.com/podcast?
Again, thanks so much for this — it’s one of the more reader-friendly tutorials on the subject.
ES says
And as a difficulty bonus — we are using Cloudflare so our primary domain example.com is using the Name Server Settings from Cloudflare. So I guess this tutorial doesn’t work under these circumstances?
ES says
You mention:
“After you’ve created your index.html and uploaded it to your bucket, your subdomain should forward as needed, but before you get too excited and try it out, http://podcast.churchm.ag (orwhatever you named your bucket), let’s add a CNAME record to the DNS for it to work.”
I tried it, before changing any DNS settings and it works as you described. Do you have to add DNS settings at the host level? Or can you bypass the last DNS step?
ES says
Okay. I now see that you have to use DNS settings. When I visit http://www.example.com/podcast I get a 403 Error.
I found the Simple DNS Zone Editor in my Control Panel.
Add a CNAME Record
NAME: podcast.example.com
CNAME: Amazon S3 Endpoint
But when I copy and past the end point there is an error message that reads: Address must be a fully-qualified domain name.
Has anyone else run across this error in HostGator?
ES says
Nevermind. I worked it out. 🙂
Thanks for this!
Eric Dye says
YES!!! 😀
Jennie says
Hi,
I’m trying to work out how to get iTunes to use my artwork. I’ve made a folder as per your instructions, and put a couple of images in it, but I want different artwork for each different sermon series. How do I tell iTunes where to find my artwork and which image it should pick for each sermon?
Thanks!
Eric Dye says
I don’t know of a way to change individual episode artwork (not even sure it’s possible). To refresh the channel, however, I would recommend changing the image name when you update, so when they fetch the code, it’ll recognize the change/update.
Yancey says
I’ve uploaded a .wav file to my s3 folder and an RSS.xml for iTunes. I submitted everything to iTunes for my podcast and it shows up in the iTunes Store but it won’t play on the iPhone. could it be the file type? the same file plays fine in Soundcloud.