Enterprise Apps with Docker and Elastic Beanstalk - amazon-web-services

I'm new to Docker and EB but not AWS. I've worked in environments where dedicated tenancy is a requirement, whether due to HIPPA or some other data protection requirements.
So far as I can tell, in order to deploy a Docker image, you must use Beanstalk, which means you aren't able to have a dedicated tenancy. I found this forum question that says if you create a VPC, you can have a dedicated Beanstalk. Is this correct? If so, will it work with Docker? If so any guides would be helpful.

Have you looked at Amazon's ECS service? It is a Docker container service that doesn't use Elastic Beanstalk.
You can also install Docker on any EC2 instance.
If you use a VPC then you can set the default tenancy to dedicated, which will result in dedicated tenancy instances being created by Beanstalk. You should be using a VPC already if you are concerned with HIPAA compliance, or if you want access to pretty much any of the new features released by Amazon in the last year.
Also, EBS stands for Elastic Block Storage, Elastic Beanstalk is usually abbreviated EB.

If you'd like to venture a bit more, you can also use other tools like
Kubernetes
Apache Mesos
RancherOS
For a more comprehensive list of Docker/Container related projects you can see this post:
How to scale Docker containers in production
You can run them all in EC2 with VPC, also using dedicated tenancy if you'd like to.

Related

Differences between AWS Fargate and multi-container Elastic Beanstalk?

I understand that ECS has EC2 and Fargate launch types that differ in the control they offer over the underlying environment configuration.
Before Fargate, ECS was used to provide detailed control over the container environment, while Elastic Beanstalk was used to abstract those details and just run the containers.
In the FAQ section of AWS ECS it says:
For Beanstalk, You simply specify which container images are to be deployed, the CPU and memory requirements, the port mappings, and the container links. You can work with Amazon ECS directly if you want more fine-grained control for custom application architectures.
Now with Fargate, it seems that the offered functionality is quite similar. So what are the differences between Fargate and docker on Elastic Beanstalk?
Multi Container Elastic Beanstalk, actually uses ECS to provision your cluster, which make it operate as a Platform-As-A-Service (PaaS) model, as then you can run your images on the cluster it sets up.
Fargate runs on a fully managed server so you dont worry about the cluster or server as you would in Elastic beanstalk. You just manage the Docker container making it more of a Software-As-A-Service (SaaS) model.

Docker: ECS vs Beanstalk vs Docker Cloud

I'm looking for the easiest and fastest way to manage a microservices scalable infrastructure. I chose to use Docker.
But so far, I've faced some different ways to go.
AWS ECS
AWS Elastic Beanstalk
Docker Cloud
Which one would you go? Why?
There's no good answer, it depends on your infrastructure and costs.
AWS ECS: This is the AWS container offering.
Beanstalk: This is PaaS. If you're wanting microservices/scalability this may not be a good fit.
Docker Cloud: If you're an AWS shop I wouldn't go this route. I'm assuming you are since you didn't ask about Kubernetes, GCP, digital ocean, etc.
Edit:
You're not an AWS shop but you have credit. I'd go ECS. You can squeeze more applications out of a VM with docker than Beanstalk. And if you decide to move away from AWS you can take your containers with you. Not the configuration (task definitions are specific to AWS) but the containers themself can be rebuilt and pushed somewhere else.

AWS EC2 and Elastic Beanstalk

I am new to AWS and the question may seem very basic. However I need to see if I can find a solution to this.
I have created and launched an EC2 instance first and then created an Elastic Beanstalk instance with a sample application deployed on it. By default, the Elastic Beanstalk attaches "Default Environment" to this instance and I find no way to change this to my EC2 instance. How can I attach my EC2 instance (that I created earlier) to this Elastic Beanstalk instance? I am using Amazon Free Tier to learn.
Thanks a lot for your time and patience.
You cannot add an existing instance into an Elastic Beanstalk configuration.
Under the hood Elastic beanstalk uses Containers and a ton of configuration hooks, files, etc.
An instance is not the same and cannot even be guaranteed to be of matching types (perhaps the instance is CentOS and the Container runs on an ubuntu host).
It's simply not possible.

AWS Elastic Beanstalk Vs EC2 Container Service (ECS) - Docker

Have been running Docker with Elastic Beanstalk to deploy a relatively simple app, and it has been working great. Now with ECS on the horizon, I am interested to know what the differences are between the two services, and why one might use one over the other?
Amazon's documentation says the following:
Q: How is Amazon ECS different from AWS Elastic Beanstalk?
AWS Elastic Beanstalk is an application management platform that helps customers easily deploy and scale web applications and services. It keeps the provisioning of building blocks (e.g., EC2, RDS, Elastic Load Balancing, Auto Scaling, CloudWatch), deployment of applications, and health monitoring abstracted from the user so they can just focus on writing code. You simply specify which container images are to be deployed, the CPU and memory requirements, the port mappings, and the container links. Elastic Beanstalk will automatically handle all the details such as provisioning an Amazon ECS cluster, balancing load, auto-scaling, monitoring, and placing your containers across your cluster.
Elastic Beanstalk is ideal if you want to leverage the benefits of containers but just want the simplicity of deploying applications from development to production by uploading a container image. You can work with Amazon ECS directly if you want more fine-grained control for custom application architectures.

Customizing an Elastic Beanstalk AMI

I need to use on Elastic Beanstalk a Java application written for Glassfish server.
Beacuse of Amazon doesn't let me choose an AMI with Glassfish, I choosed one with Tomcat and i modified my application to work properly on Tomcat.
Now, I've seen I also needed to use a Sun JDK, while by default Elastic Beanstalk AMI comes with openjdk. I googled a lot, finding some (not so many resources) interesting posts like this answer on StackOverflow
What I can't understand is this part of the answer:
Create your custom AMI from a running instance of Amazon's beanstalk
AMI that you manually launch from EC2, NOT one that was launched from
starting your application through beanstalk.
So, my question is: does anyone how to use a custom AMI with Glassfish on Elastic Beanstalk?
If it's not possible, can someone explain me how to create the custom AMI?
Thanks,
Andrea
That answer just means "Don't start a beanstalk application and cut an AMI directly from one of those instances. Instead, launch an instance based on the beanstalk AMIs (which are available in the public AMI listing)." I.e., use one of these; note there are 84 of them:
Cut your own private AMI when you're done configuring that instance, and specify it in your beanstalk environment.
I personally found the selected answer confusing for me to follow, maybe because I am still climbing up the AWS learning curve. Maybe this answer will help other newbies. Having just figured out how to successfully launch an Elastic Beanstalk instance with my own custom AMI, what I believe this quote is saying, is to do the following totally non-obvious steps which just worked for me:
Go to the EC2 services (not Elastic Beanstalk services) and launch an instance based on the Elastic Beanstalk AMI that you would like to use as a starting point for your custom AMI. You will throw this away in a minute.
Select the instance and choose "Create Image / EBS AMI". Once created, you can delete the temporary EC2 instance you created. It's only purpose was to create the custom AMI.
Now go to Elastic Beanstalk services and edit your configuration to reference your custom AMI.
#Danger It would speed up the scaling up process.
I'm using a docker app on EB but "docker pull" from Docker Hub is so slow so when all instances are unhealthy my site would be down in 15-30 minutes. Create a customize AMI and pull a base Docker image will save time.