ECS with ubuntu container - amazon-web-services

I have seen some documents in the AWS stating we can use ubuntu instead of default amazon instances. But my question, let's say i created the ubuntu machine and installed the ecs agents with pointing the ECS cluster and in the cluster the ubuntu machine appears - a happy flow. But tomorrow if i need to do a horizontal scaling, how it will do ? do we need to do manually ?

Related

How can I bundle a aws ec2 windows machine with installed applications

I have a ec2 windows machine with adobe after effects running. I am trying to create a template from this ec2 instance which should allow me to launch new ec2 windows instances with adobe after effects already being preinstalled. However, it looks like that is not possible. The option to "bundle instance" is greyed out. Or have I misconfigured the ec2 template?
"Bundle" commands are outdated.
You should simply use Create Image to create an Amazon Machine Image (AMI) of the existing instance. Then, you can Launch an instance from the AMI and it will contain an exact copy of the AMI.
See: Creating a Custom Windows AMI - Amazon Elastic Compute Cloud
Recommendation: Run sysprep before creating the image. This will avoid conflicting machine IDs.
See: Create a Standard Amazon Machine Image Using Sysprep - Amazon Elastic Compute Cloud

Creation of VMS within AWS Ec2

I am trying to design and making architecture of cloud application deployment resources in AWS cloud using EC2, S3, and RDS. Here I have a little bit of confusion about AWS infrastructure, which I am describing here.
I already have a AWS EC2 machine - Ubuntu 16.04 LTS. Is possible to create another VMs within my Ubuntu? I mean, can I use Linux or CentOS within my EC2 Ubuntu machine?
I am a beginner in cloud and AWS world, still exploring about AWS infrastructure.
When you instantiate your EC2 instance you are required to select an AMI. the AMI is an amazon machine image. This essentially describes what OS (CentOS, Ubuntu, RedHat, etc) will be installed on your EC2 instance. Most likely you selected the Amazon Linux AMI which installs amazon's own flavor of CentOS. Once the instance is up, you will not be able to install a different OS on it. You will have to terminate your existing instance and spin up a new EC2 instance with the AMI that you want.
That being said, you can also use a tool such as Docker https://www.docker.com/. This allows you to spin up docker containers. Each docker container acts like a VM and will allow you to spin up multiple different docker containers with whatever OS you want within your single EC2 instance.

Microservice deployment using AWS ECS service

I am trying to creating a microservice using spring boot and trying to deploy using AWS ECS cloud service. I Have doubts in deployment using ECS. In ECS there is a facility of EC2 launch type.
Here my doubt is that, when I am using ECS EC2 launch type, can I choose my own Ubuntu machine instances? I need to know whether the ECS provide provision to launch with my own Ubuntu machine?
Yes, you can use your own Ubuntu AMI, but it requires a little bit of work. Here are the requirements:
A modern Linux distribution running at least version 3.10 of the Linux kernel.
The Amazon ECS container agent (preferably the latest version). For more information, see Amazon ECS Container Agent.
A Docker daemon running at least version 1.5.0, and any Docker runtime dependencies. For more information, see Check runtime dependencies in the Docker documentation.
So, apart from installing Docker, you need o install and configure the ECS Agent. You will find the instructions here. See section 'To install the Amazon ECS container agent on a non-Amazon Linux EC2 instance'
Once you have your AMI built, you just create your cluster and then launch the instances into it.

Deployment using AWS Elastic BeanStalk in details

I am trying to deploy my Spring Boot microservices on using Elastic Beanstalk from AWS. It provides preconfigured environment for deployment. I have one Ubuntu machine with EBS with 80 GB(free tier option). I have some doubts. I am adding as points
When I am deploying using Elastic Beanstalk, where it actually deploying? In my EBS storage ? Or any other space which belongs to AWS ?
Is it possible to deploy anything without creating an EC2 instance? If possible, then where will it actually physical space occupy?
When I deploy my microservices, I choose Tomcat option. So under the box there is a sentence that Java Tomcat server environment is in Amazon Linux or something like that. I have Ubuntu machine; if Beanstalk using my EC2 instance, then why it showing message related to Amazon Linux 2017? Since my machine is Ubuntu?
And I found docs saying BeanStalk is not charging payments. Payment is going according to the AWS resources that we choose. So how I can relate this point with my 3rd point?
I'll start with #4 Elastic Beanstalk is a service you are NOT charged for, just the resources you consume, so EC2, EBS, ELB's.
When you deploy an Elastic Beanstalk application you select what version of Tomcat you want and with it the version of Linux
64bit Amazon Linux 2017.09 v2.7.2 running Tomcat 8 Java 8
64bit Amazon Linux 2017.09 v2.7.2 running Tomcat 7 Java 7
64bit Amazon Linux 2017.09 v2.7.2 running Tomcat 7 Java 6
https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/concepts.platforms.html#concepts.platforms.java
#1 - It is deploying to an environment on EC2, which is why there is an AMI in the platform you provision.
When you launch an environment, you choose a platform configuration.
We update platform configurations periodically to provide performance
improvements and new features. You can update your environment to the
latest platform configuration at any time.
https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.managing.ec2.html
#2 You can deploy your application on Docker, but that still needs EC2 hosts to run, you can manage them or you can use Multi Container platform, which provisions them to ECS .
https://docs.aws.amazon.com/elasticbeanstalk/latest
/dg/create_deploy_docker.html
#3 Elastic Beanstalk likes to keep resource under it's control, When you provision an Environment, it will provision the resources needed, no need to provision a machine outside of Elastic beanstalk.
You can create a custom platform if you want too based on Ubuntu.
Note
Modify the resources in your environment only by using Elastic Beanstalk. If you modify resources using another service's console,
CLI commands, or SDKs, Elastic Beanstalk won't be able to accurately
monitor the state of those resources, and you won't be able to save
the configuration or reliably recreate the environment. Out-of
band-changes can also cause issues when terminating an environment.
Some other points about Elastic Beanstalk from a great answer on Stack Overlfow

What is the difference between Amazon ECS and Amazon EC2?

I'm just getting started on AWS EC2. I understand that EC2 is like a remote computer where I can do pretty much everything I want. Then I found out about ECS. I know it uses Docker, but I'm confused about the relationship between these two.
Is ECS just a Docker install in EC2?
If I already have an EC2 and I start an ECS, does it mean I have two instances?
Your question
Is ECS just a docker install in EC2? If I already have a EC2, then I
start a ECS, does it mean I have two instance?
No. AWS ECS is just a logical grouping (cluster) of EC2 instances, and all the EC2 instances part of an ECS act as Docker host i.e. ECS can send command to launch a container on them (EC2).
If you already have an EC2, and then launch ECS, you'll still have a single instance. If you add/register (by installing the AWS ECS Container Agent) the EC2 to ECS it'll become the part of the cluster, but still a single instance of EC2.
An Amazon ECS without any EC2 registered (added to the cluster) is good for nothing.
TL; DR
An overview
EC2 - is simply a remote (virtual) machine.
ECS stands for Elastic Container Service - as per basic definition of computer cluster, ECS is basically a logical grouping of
EC2 machines/instances. Technically speaking ECS is a mere
configuration for an efficient use and management of your EC2
instance(s) resources i.e. storage, memory, CPU, etc.
To simplify it further, if you have launched an Amazon ECS with no EC2 instances added to it, it's good for nothing i.e. you can't do anything about it. ECS makes sense only once one (or more) EC2 instances are added to it.
The next confusing thing here is the container term - which is not fully virtualized machine instances, and Docker is one technology we can use to create container instances. Docker is a utility you can install on our machine, which makes it a Docker host, and on this host you can create containers (same as virtual machines - but much more light-weight). To sum up, ECS is just about clustering of EC2 instances, and uses Docker to instantiate containers/instances/virtual machines on these (EC2) hosts.
All you need to do is launch an ECS, and register/add as much EC2 instances to it as you need. You can add/register EC2 instances, all you need is Amazon ECS Container Agent running on your EC2 instance/machine, which can be done manually or directly using the special AMI (Amazon Machine Image) i.e. Amazon ECS-optimized AMI, which already has the Amazon ECS Container Agent. During the launch of a new EC2 instance the Agent automatically registers it to the default ECS cluster.
The container agent running on each of the instances (EC2 instances) within an Amazon ECS cluster sends information about the instance's current running tasks and resource utilization to Amazon ECS, and starts and stops tasks whenever it receives a request from Amazon ECS. For more information, see Amazon ECS Container Agent. Once set, each of the created container instances (of whatever EC2 machine/node) will be an instance in Amazon ECS's swarm.
For more information – read step 10 from this documentation: Launching an Amazon ECS Container Instance:
Choose an AMI for your container instance. You can choose the Amazon
ECS-optimized AMI, or another operating system, such as CoreOS or
Ubuntu. If you do not choose the Amazon ECS-optimized AMI, you need to
follow the procedures in Installing the Amazon ECS Container Agent.
By default, your container instance launches into your default
cluster. If you want to launch into your own cluster instead of the
default, choose the Advanced Details list and paste the following
script into the User data field, replacing your_cluster_name with the
name of your cluster.
#!/bin/bash
echo ECS_CLUSTER=your_cluster_name >> /etc/ecs/ecs.config
Or, if you have an ecs.config file in Amazon S3 and have enabled
Amazon S3 read-only access to your container instance role, choose the
Advanced Details list and paste the following script into the User
data field, replacing your_bucket_name with the name of your bucket to
install the AWS CLI and write your configuration file at launch time.
Note For more information about this configuration, see Storing
Container Instance Configuration in Amazon S3.
#!/bin/bash
yum install -y aws-cli
aws s3 cp s3://your_bucket_name/ecs.config /etc/ecs/ecs.config
Just to clarify it further – you can create containers on your single EC2 instance without ECS. Install any of the containerization technology i.e. Docker and run the create container command, setting your EC2 as a Docker host, and have as much Docker containers as you want (or as much as your EC2's resources allow).
In simple words,ECS is a manager while EC2 instances are just like employees.
All the employees (EC2) under this manager(ECS) can perform "Docker" tasks and the manager also understands "docker" pretty well. So,whenever you need "docker" resources, you show up to the Manager. Manager already has status from every employee(EC2) decides which one should perform the task.
Now, coming back to your question, a manager without an "employee" does not make sense but is definitely possible.
EC2 allows you to launch individual instances which you can use for pretty much whatever you like.
ECS is a container service, which means it will launch instances that will be ready to launch container applications.
The main distinction between the two services is that with EC2 you have to manage each instance separately in whatever method you choose (manually, using a CM tool or any other way) - deploy your applications and maintain the connection between the servers yourself.
ECS allows you to launch a cluster of machines that will serve as the deployment ground of your container apps, allowing you to treat all instances in the cluster as one big instance available for your container workload.
And to answer your question - You can start an ECS cluster with no instances in it, but then it won't be able to run anything on it. Once you register an EC2 instance inside an ECS cluster, containers are ready to run in it. So the bottom line is - you can use both ECS and EC2 with only one instance, but that is not the actual use case these services were built for.
Put simply, Elastic Container Service (ECS) is a Docker container orchestration service.
You can ask it to run one or more Docker images, either as an auto-scaling capable "Service" or as an ad-hoc "Task".
The services and tasks run on a "Cluster". Originally, a Cluster was a group of one or more pre-configured EC2 servers running ECS Cluster Agent. The Cluster Agent would schedule the containers on the EC2 server. These EC2 servers show up in your EC2 Instances list and are charged at regular EC2 per-minute costs - You can even SSH onto them like any normal EC2 server.
If you wanted more capacity to run more Services or Tasks, or if you wanted resilience against EC2 failure, then you would more EC2 servers.
Around November 2017, AWS added ECS Fargate. Now a Cluster can run "serverless" without provisioning EC2 nodes. You simply define the amount of CPU and memory your Task or Service requires to operate, meaning that you just pay for the CPU and memory time rather than the EC2.
ECS stands for 'Elastic Container Service'. It is a container orchestration service.
Lets say you have a Docker container running and you decide to update the Docker image. It's relatively easy task to stop, pull and run if you have one container running but its tedious to do the same steps if you have 10 to 100 of containers running.
With AWS ECS you can have this control. You specify if update is required provide the latest image id and ECS will handle the stop, pull and run etc. commands for you. It also provides with much more additional features, refer - https://aws.amazon.com/ecs/features/
EC2 stand for 'Elastic Compute Cloud'. In simple terms its a virtual machine.
ECS uses EC2 to run your containers.
'These running docker containers (tasks) are run on EC2 instances'.
ECS is a container orchestrator just like Kubernetes or Docker swarm, EC2 is an Amazon Elastic Compute Cloud platform for Creating Virtual Machines. ECS allows you to run containers on either serverless environments (Fargate) where you don't have to run any VM or in a non managed environments where you host the containers on EC2 instances.
Okay, as you know EC2 is a virtual machine on AWS and ECS is a container orchestration system on AWS.
To use ECS, you need to run your container into some virtual machines which EC2 is one of an option to provide that.
You will need to install ecs-agent on EC2 to make a connection with ECS. And ECS also can monitor the resource usages on your EC2. So basically you choose the more high-level EC2 type, then more resource(CPU/MEM) your container can use.
EC2 is a compute service that enables applications to run on AWS, whereas ECS is an AWS service used primarily to orchestrate Docker containers.