SlideShare a Scribd company logo
Immutable AWS Deployments
with Packer and Jenkins
Scale by the Bay, 2017
Manish Pandit
About
Manish Pandit
Director of Platform Engineering @Marqeta
Twitter : @lobster1234
Blog: lobster1234.github.io
Show of hands
Deployments
DevOps, CI/CD, Tooling,..
AWS (or something similar!)
Deployments
The process of pushing code beyond the development environment
Multi-step
Usually (heavily) scripted
Complete, or Partial
Complete
Provisioning the stack from ground up
Installation of O/S, Runtime, Application Server, Code, Agents, ...
# mkfs –t ext4 /dev/sda0
# mkdir /apps
# mount –t ext4 /dev/sda0 /apps
Partial
Very common across the board
In-place deployment
“Saves time”
Gives a false sense of automation
Typical Steps
~ scp builds/myService-1.0.2.war mpandit@prd.example.com:/usr/local/tomcat8/webapps
~ ssh mpandit@prd.example.com
~ sudo /usr/local/tomcat8/bin/catalina.sh restart
Typical Steps
~ ssh mpandit@prd.example.com
~ wget https://nx.example.com/com/foo/myService.war -O /usr/local/tomcat8/webapps
~ sudo /usr/local/tomcat8/catalina.sh restart
Automation?
Script this all
Run via a Jenkins job
Fabric (Python), Capistrano, etc.
What could go wrong?
What could go wrong?
Unpatched, outdated dependencies
Inconsistent app behavior
Changes outside of the deployment cycle
Human Error(s)
Does not scale
Immutability
Build the entire runtime infrastructure from ground up
Automate it!
Immutability
Build the entire runtime infrastructure from ground up
Automate it!
Runtime Infrastructure = O/S + Libraries + App Server + Code + Agents
AWS
AWS is collection of services for..
Compute
Storage
Databases
Messaging
+ many, many more...
AWS
AWS helps build architectures that are -
Highly Available
Fault Tolerant
Scalable
Cost-efficient
AMIs
Templates to launch EC2 instances
Specify O/S, Virtualization Type, Storage Type, Volume Attachments, etc.
Can be shared within accounts, or made public
Highest level of deployment abstraction
Immutable AWS Deployments with Packer and Jenkins
Customize AMIs
Trim the fat
Configure the libraries, tune the parameters
Summary : Make infrastructure, not war*
* Java Reference
Packer
A tool from Hashicorp to create Machine Images
Supports multiple providers
Supports multiple provisioners
Install
~ packer -v
1.1.1
~
Install via brew, or,
Download the binary from the packer.io website
Credentials
EC2 = Use IAM Role for Packer *
Non-EC2 = Use AWS Credentials
* Packer website has the IAM role details
Builders
Define Machine Images for many platforms
JSON-based
Popular : AWS AMI, VMWare, Docker, Azure, GCP…
Custom
AWS AMI Builder
{
"_comment":"Simple Packer Template using Amazon Linux 2017.09.0",
"variables":{
"aws_access_key":"",
"aws_secret_key":""
},
"builders":[
{
"type":"amazon-ebs",
"access_key":"{{user `aws_access_key`}}",
"secret_key":"{{user `aws_secret_key`}}",
"region":"us-east-1",
"source_ami":"ami-8c1be5f6",
"instance_type":"t2.micro",
"ssh_username":"ec2-user",
"ami_name":"ScaleByTheBay AMI"
}
]
}
Inspect
~ packer inspect packer.json
Optional variables and their defaults:
aws_access_key =
aws_secret_key =
Builders:
amazon-ebs
Provisioners:
<No provisioners>
Note: If your build names contain user variables or template
functions such as 'timestamp', these are processed at build time,
and therefore only show in their raw form here.
Build!
~ packer build packer.json
amazon-ebs output will be in this color.
==> amazon-ebs: Prevalidating AMI Name: ScaleByTheBay AMI
amazon-ebs: Found Image ID: ami-8c1be5f6
==> amazon-ebs: Launching a source AWS instance...
==> amazon-ebs: Waiting for instance (i-09f4b837ed80a659f) to become ready...
==> amazon-ebs: Waiting for SSH to become available...
==> amazon-ebs: Stopping the source instance...
==> amazon-ebs: Creating the AMI: ScaleByTheBay AMI
amazon-ebs: AMI: ami-5b18a121
==> amazon-ebs: Waiting for AMI to become ready...
==> amazon-ebs: Terminating the source AWS instance...
==> Builds finished. The artifacts of successful builds are:
--> amazon-ebs: AMIs were created:
us-east-1: ami-5b18a121
Immutable AWS Deployments with Packer and Jenkins
Immutable AWS Deployments with Packer and Jenkins
Provisioners
JSON based
Install and configure packages and components
+many, many more tasks
Popular : Ansible, Chef, Puppet, Shell, ..
Make our AMI ...useful
1. Apply updates and patches
2. Install OpenJDK 8
3. Install Tomcat 8
4. Download the application artifact, the war
5. Configure Tomcat to run at startup
Let’s Provision our AMI
"provisioners": [{
"type": "shell",
"inline": [
"sudo yum update -y",
"sudo yum install java-1.8.0 java-1.8.0-openjdk-devel tomcat8-webapps -y",
"sudo yum remove java-1.7.0-openjdk -y",
"sudo wget https://github.com/lobster1234/helloworld-api/files/953511/helloworld-api.war.gz -O
/usr/share/tomcat8/webapps/helloworld-api.war.gz",
"sudo gunzip /usr/share/tomcat8/webapps/helloworld-api.war.gz",
"sudo chkconfig tomcat8 on"
]
}]
{
"_comment":"Simple Packer Template using Amazon Linux 2017.09.0",
"variables":{
"aws_access_key":"",
"aws_secret_key":""
},
"builders":[
{
"type":"amazon-ebs",
"access_key":"{{user `aws_access_key`}}",
"secret_key":"{{user `aws_secret_key`}}",
"region":"us-east-1",
"source_ami":"ami-8c1be5f6",
"instance_type":"t2.micro",
"ssh_username":"ec2-user",
"ami_name":"ScaleByTheBay AMI with Tomcat8"
}
],
"provisioners": [{
"type": "shell",
"inline": [
"sleep 30",
"sudo yum update -y",
"sudo yum install java-1.8.0 java-1.8.0-openjdk-devel tomcat8-webapps -y",
"sudo yum remove java-1.7.0-openjdk -y",
"sudo wget https://github.com/lobster1234/helloworld-api/files/953511/helloworld-api.war.gz -O /usr/share/tomcat8/webapps/helloworld-
api.war.gz",
"sudo gunzip /usr/share/tomcat8/webapps/helloworld-api.war.gz",
"sudo chkconfig tomcat8 on"
]
}]
}
Build!
~ packer build packer.json
....
==> amazon-ebs: Connected to SSH!
==> amazon-ebs: Provisioning with shell script: /var/folders/vf/d0q4kjg964581kjjz4969dbny407x7/T/packer-shell539435218
amazon-ebs: Loaded plugins: priorities, update-motd, upgrade-helper
amazon-ebs: Resolving Dependencies
amazon-ebs: --> Running transaction check
amazon-ebs: ---> Package amazon-ssm-agent.x86_64 0:2.1.4.0-1.amzn1 will be updated
amazon-ebs:
amazon-ebs: 2017-11-11 07:51:33 (64.0 MB/s) - ‘/usr/share/tomcat8/webapps/helloworld-api.war.gz’ saved
[1918559/1918559]
amazon-ebs:
==> amazon-ebs: Creating the AMI: ScaleByTheBay AMI with Tomcat8
amazon-ebs: AMI: ami-73ed5509
==> amazon-ebs: Waiting for AMI to become ready...
Build 'amazon-ebs' finished.
==> Builds finished. The artifacts of successful builds are:
--> amazon-ebs: AMIs were created:
us-east-1: ami-73ed5509
Immutable AWS Deployments with Packer and Jenkins
Launch the instance
Check it out
Verify Tomcat
Verify the API
~ curl -iv http://ec2-54-88-249-121.compute-1.amazonaws.com:8080/helloworld-api/hello
* Trying 54.88.249.121...
* TCP_NODELAY set
* Connected to ec2-54-88-249-121.compute-1.amazonaws.com (54.88.249.121) port 8080 (#0)
> GET /helloworld-api/hello HTTP/1.1
> Host: ec2-54-88-249-121.compute-1.amazonaws.com:8080
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 200
HTTP/1.1 200
< Content-Type: text/html;charset=utf-8
< Transfer-Encoding: chunked
< Date: Sat, 11 Nov 2017 08:20:09 GMT
<
* Connection #0 to host ec2-54-88-249-121.compute-1.amazonaws.com left intact
Hello World!
~
Automate this - Jenkins
1. git clone <repo>
2. mvn clean install test
3. mvn release:prepare release:perform
4. export version=1.0.2
5. packer build packer.json
6. Output this AMI ID to Terraform to launch an
Autoscaling Group
Summary
Do not release code - release runtime infrastructure
Automate Everything
Legendary = Disable ssh from your AMIs
Resources
Packer - https://packer.io
AWS EC2 - https://aws.amazon.com/documentation/ec2/
My Blog Post - https://tinyurl.com/packer-jenkins
Questions
Manish Pandit
@lobster1234
lobster1234.github.io
Like what you saw? Come work with me @Marqeta!

More Related Content

PDF
AWS Lambda with Serverless Framework and Java
PDF
Infrastructure as Code: Manage your Architecture with Git
PDF
[AWS Dev Day] 앱 현대화 | AWS Fargate를 사용한 서버리스 컨테이너 활용 하기 - 삼성전자 개발자 포털 사례 - 정영준...
PPTX
Automation with Packer and TerraForm
PDF
Amazon EC2 Container Service Live Demo - Microservices Web Day
PPTX
Packer
PDF
Spinnaker 파트 1
PDF
The AWS DevOps combo (January 2017)
AWS Lambda with Serverless Framework and Java
Infrastructure as Code: Manage your Architecture with Git
[AWS Dev Day] 앱 현대화 | AWS Fargate를 사용한 서버리스 컨테이너 활용 하기 - 삼성전자 개발자 포털 사례 - 정영준...
Automation with Packer and TerraForm
Amazon EC2 Container Service Live Demo - Microservices Web Day
Packer
Spinnaker 파트 1
The AWS DevOps combo (January 2017)

What's hot (9)

PDF
Fargate 를 이용한 ECS with VPC 1부
PDF
Infrastructure as code with Amazon Web Services
PDF
Packer by HashiCorp
PDF
Service Delivery Assembly Line with Vagrant, Packer, and Ansible
PDF
A Introduction of Packer
PPTX
Learn you some Ansible for great good!
PDF
Deployment and Management on AWS:
 A Deep Dive on Options and Tools
PDF
A Hands-on Introduction on Terraform Best Concepts and Best Practices
PPTX
Packer, where DevOps begins
Fargate 를 이용한 ECS with VPC 1부
Infrastructure as code with Amazon Web Services
Packer by HashiCorp
Service Delivery Assembly Line with Vagrant, Packer, and Ansible
A Introduction of Packer
Learn you some Ansible for great good!
Deployment and Management on AWS:
 A Deep Dive on Options and Tools
A Hands-on Introduction on Terraform Best Concepts and Best Practices
Packer, where DevOps begins
Ad

Similar to Immutable AWS Deployments with Packer and Jenkins (13)

PDF
대용량 데이타 쉽고 빠르게 분석하기 :: 김일호 솔루션즈 아키텍트 :: Gaming on AWS 2016
PDF
A 60-minute tour of AWS Compute (November 2016)
PDF
Infrastructure as Code: Manage your Architecture with Git
PDF
EC2 AMI Factory with Chef, Berkshelf, and Packer
PPTX
Tech connect aws
PDF
OpenSource ToolChain for the Hybrid Cloud
PDF
AWS Serverless Workshop
PDF
Building Open Source Platforms on AWS (April 2017)
PDF
Hands-On AWS: Java SDK + CLI for Cloud Developers
PDF
Bare Metal to OpenStack with Razor and Chef
PPTX
CI/CD on pure AWS
ODP
Puppet and Apache CloudStack
PDF
EC2 Container Service
대용량 데이타 쉽고 빠르게 분석하기 :: 김일호 솔루션즈 아키텍트 :: Gaming on AWS 2016
A 60-minute tour of AWS Compute (November 2016)
Infrastructure as Code: Manage your Architecture with Git
EC2 AMI Factory with Chef, Berkshelf, and Packer
Tech connect aws
OpenSource ToolChain for the Hybrid Cloud
AWS Serverless Workshop
Building Open Source Platforms on AWS (April 2017)
Hands-On AWS: Java SDK + CLI for Cloud Developers
Bare Metal to OpenStack with Razor and Chef
CI/CD on pure AWS
Puppet and Apache CloudStack
EC2 Container Service
Ad

More from Manish Pandit (20)

PDF
Disaster recovery - What, Why, and How
PDF
Serverless Architectures on AWS in practice - OSCON 2018
PDF
Disaster Recovery and Reliability
PDF
OAuth2 primer
PDF
AWS Primer and Quickstart
PPTX
Securing your APIs with OAuth, OpenID, and OpenID Connect
PDF
Silicon Valley 2014 - API Antipatterns
PDF
Scalabay - API Design Antipatterns
PDF
OSCON 2014 - API Ecosystem with Scala, Scalatra, and Swagger at Netflix
PPTX
API Design Antipatterns - APICon SF
PPTX
Motivation : it Matters
PPTX
Building Apis in Scala with Playframework2
PPTX
Scala at Netflix
PPT
Introducing Scala to your Ruby/Java Shop : My experiences at IGN
PPT
Evolving IGN’s New APIs with Scala
PPTX
IGN's V3 API
PPTX
Java and the JVM
PPTX
Object Oriented Programming
PPTX
Silicon Valley Code Camp 2011: Play! as you REST
PPTX
Silicon Valley Code Camp: 2011 Introduction to MongoDB
Disaster recovery - What, Why, and How
Serverless Architectures on AWS in practice - OSCON 2018
Disaster Recovery and Reliability
OAuth2 primer
AWS Primer and Quickstart
Securing your APIs with OAuth, OpenID, and OpenID Connect
Silicon Valley 2014 - API Antipatterns
Scalabay - API Design Antipatterns
OSCON 2014 - API Ecosystem with Scala, Scalatra, and Swagger at Netflix
API Design Antipatterns - APICon SF
Motivation : it Matters
Building Apis in Scala with Playframework2
Scala at Netflix
Introducing Scala to your Ruby/Java Shop : My experiences at IGN
Evolving IGN’s New APIs with Scala
IGN's V3 API
Java and the JVM
Object Oriented Programming
Silicon Valley Code Camp 2011: Play! as you REST
Silicon Valley Code Camp: 2011 Introduction to MongoDB

Recently uploaded (20)

PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
NewMind AI Monthly Chronicles - July 2025
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PPTX
Big Data Technologies - Introduction.pptx
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PPTX
MYSQL Presentation for SQL database connectivity
PDF
Unlocking AI with Model Context Protocol (MCP)
Digital-Transformation-Roadmap-for-Companies.pptx
20250228 LYD VKU AI Blended-Learning.pptx
NewMind AI Monthly Chronicles - July 2025
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
Encapsulation_ Review paper, used for researhc scholars
Review of recent advances in non-invasive hemoglobin estimation
The Rise and Fall of 3GPP – Time for a Sabbatical?
Diabetes mellitus diagnosis method based random forest with bat algorithm
Big Data Technologies - Introduction.pptx
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Building Integrated photovoltaic BIPV_UPV.pdf
Chapter 3 Spatial Domain Image Processing.pdf
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Understanding_Digital_Forensics_Presentation.pptx
MYSQL Presentation for SQL database connectivity
Unlocking AI with Model Context Protocol (MCP)

Immutable AWS Deployments with Packer and Jenkins

  • 1. Immutable AWS Deployments with Packer and Jenkins Scale by the Bay, 2017 Manish Pandit
  • 2. About Manish Pandit Director of Platform Engineering @Marqeta Twitter : @lobster1234 Blog: lobster1234.github.io
  • 3. Show of hands Deployments DevOps, CI/CD, Tooling,.. AWS (or something similar!)
  • 4. Deployments The process of pushing code beyond the development environment Multi-step Usually (heavily) scripted Complete, or Partial
  • 5. Complete Provisioning the stack from ground up Installation of O/S, Runtime, Application Server, Code, Agents, ... # mkfs –t ext4 /dev/sda0 # mkdir /apps # mount –t ext4 /dev/sda0 /apps
  • 6. Partial Very common across the board In-place deployment “Saves time” Gives a false sense of automation
  • 7. Typical Steps ~ scp builds/myService-1.0.2.war mpandit@prd.example.com:/usr/local/tomcat8/webapps ~ ssh mpandit@prd.example.com ~ sudo /usr/local/tomcat8/bin/catalina.sh restart
  • 8. Typical Steps ~ ssh mpandit@prd.example.com ~ wget https://nx.example.com/com/foo/myService.war -O /usr/local/tomcat8/webapps ~ sudo /usr/local/tomcat8/catalina.sh restart
  • 9. Automation? Script this all Run via a Jenkins job Fabric (Python), Capistrano, etc.
  • 10. What could go wrong?
  • 11. What could go wrong? Unpatched, outdated dependencies Inconsistent app behavior Changes outside of the deployment cycle Human Error(s) Does not scale
  • 12. Immutability Build the entire runtime infrastructure from ground up Automate it!
  • 13. Immutability Build the entire runtime infrastructure from ground up Automate it! Runtime Infrastructure = O/S + Libraries + App Server + Code + Agents
  • 14. AWS AWS is collection of services for.. Compute Storage Databases Messaging + many, many more...
  • 15. AWS AWS helps build architectures that are - Highly Available Fault Tolerant Scalable Cost-efficient
  • 16. AMIs Templates to launch EC2 instances Specify O/S, Virtualization Type, Storage Type, Volume Attachments, etc. Can be shared within accounts, or made public Highest level of deployment abstraction
  • 18. Customize AMIs Trim the fat Configure the libraries, tune the parameters Summary : Make infrastructure, not war* * Java Reference
  • 19. Packer A tool from Hashicorp to create Machine Images Supports multiple providers Supports multiple provisioners
  • 20. Install ~ packer -v 1.1.1 ~ Install via brew, or, Download the binary from the packer.io website
  • 21. Credentials EC2 = Use IAM Role for Packer * Non-EC2 = Use AWS Credentials * Packer website has the IAM role details
  • 22. Builders Define Machine Images for many platforms JSON-based Popular : AWS AMI, VMWare, Docker, Azure, GCP… Custom
  • 23. AWS AMI Builder { "_comment":"Simple Packer Template using Amazon Linux 2017.09.0", "variables":{ "aws_access_key":"", "aws_secret_key":"" }, "builders":[ { "type":"amazon-ebs", "access_key":"{{user `aws_access_key`}}", "secret_key":"{{user `aws_secret_key`}}", "region":"us-east-1", "source_ami":"ami-8c1be5f6", "instance_type":"t2.micro", "ssh_username":"ec2-user", "ami_name":"ScaleByTheBay AMI" } ] }
  • 24. Inspect ~ packer inspect packer.json Optional variables and their defaults: aws_access_key = aws_secret_key = Builders: amazon-ebs Provisioners: <No provisioners> Note: If your build names contain user variables or template functions such as 'timestamp', these are processed at build time, and therefore only show in their raw form here.
  • 25. Build! ~ packer build packer.json amazon-ebs output will be in this color. ==> amazon-ebs: Prevalidating AMI Name: ScaleByTheBay AMI amazon-ebs: Found Image ID: ami-8c1be5f6 ==> amazon-ebs: Launching a source AWS instance... ==> amazon-ebs: Waiting for instance (i-09f4b837ed80a659f) to become ready... ==> amazon-ebs: Waiting for SSH to become available... ==> amazon-ebs: Stopping the source instance... ==> amazon-ebs: Creating the AMI: ScaleByTheBay AMI amazon-ebs: AMI: ami-5b18a121 ==> amazon-ebs: Waiting for AMI to become ready... ==> amazon-ebs: Terminating the source AWS instance... ==> Builds finished. The artifacts of successful builds are: --> amazon-ebs: AMIs were created: us-east-1: ami-5b18a121
  • 28. Provisioners JSON based Install and configure packages and components +many, many more tasks Popular : Ansible, Chef, Puppet, Shell, ..
  • 29. Make our AMI ...useful 1. Apply updates and patches 2. Install OpenJDK 8 3. Install Tomcat 8 4. Download the application artifact, the war 5. Configure Tomcat to run at startup
  • 30. Let’s Provision our AMI "provisioners": [{ "type": "shell", "inline": [ "sudo yum update -y", "sudo yum install java-1.8.0 java-1.8.0-openjdk-devel tomcat8-webapps -y", "sudo yum remove java-1.7.0-openjdk -y", "sudo wget https://github.com/lobster1234/helloworld-api/files/953511/helloworld-api.war.gz -O /usr/share/tomcat8/webapps/helloworld-api.war.gz", "sudo gunzip /usr/share/tomcat8/webapps/helloworld-api.war.gz", "sudo chkconfig tomcat8 on" ] }]
  • 31. { "_comment":"Simple Packer Template using Amazon Linux 2017.09.0", "variables":{ "aws_access_key":"", "aws_secret_key":"" }, "builders":[ { "type":"amazon-ebs", "access_key":"{{user `aws_access_key`}}", "secret_key":"{{user `aws_secret_key`}}", "region":"us-east-1", "source_ami":"ami-8c1be5f6", "instance_type":"t2.micro", "ssh_username":"ec2-user", "ami_name":"ScaleByTheBay AMI with Tomcat8" } ], "provisioners": [{ "type": "shell", "inline": [ "sleep 30", "sudo yum update -y", "sudo yum install java-1.8.0 java-1.8.0-openjdk-devel tomcat8-webapps -y", "sudo yum remove java-1.7.0-openjdk -y", "sudo wget https://github.com/lobster1234/helloworld-api/files/953511/helloworld-api.war.gz -O /usr/share/tomcat8/webapps/helloworld- api.war.gz", "sudo gunzip /usr/share/tomcat8/webapps/helloworld-api.war.gz", "sudo chkconfig tomcat8 on" ] }] }
  • 32. Build! ~ packer build packer.json .... ==> amazon-ebs: Connected to SSH! ==> amazon-ebs: Provisioning with shell script: /var/folders/vf/d0q4kjg964581kjjz4969dbny407x7/T/packer-shell539435218 amazon-ebs: Loaded plugins: priorities, update-motd, upgrade-helper amazon-ebs: Resolving Dependencies amazon-ebs: --> Running transaction check amazon-ebs: ---> Package amazon-ssm-agent.x86_64 0:2.1.4.0-1.amzn1 will be updated amazon-ebs: amazon-ebs: 2017-11-11 07:51:33 (64.0 MB/s) - ‘/usr/share/tomcat8/webapps/helloworld-api.war.gz’ saved [1918559/1918559] amazon-ebs: ==> amazon-ebs: Creating the AMI: ScaleByTheBay AMI with Tomcat8 amazon-ebs: AMI: ami-73ed5509 ==> amazon-ebs: Waiting for AMI to become ready... Build 'amazon-ebs' finished. ==> Builds finished. The artifacts of successful builds are: --> amazon-ebs: AMIs were created: us-east-1: ami-73ed5509
  • 37. Verify the API ~ curl -iv http://ec2-54-88-249-121.compute-1.amazonaws.com:8080/helloworld-api/hello * Trying 54.88.249.121... * TCP_NODELAY set * Connected to ec2-54-88-249-121.compute-1.amazonaws.com (54.88.249.121) port 8080 (#0) > GET /helloworld-api/hello HTTP/1.1 > Host: ec2-54-88-249-121.compute-1.amazonaws.com:8080 > User-Agent: curl/7.54.0 > Accept: */* > < HTTP/1.1 200 HTTP/1.1 200 < Content-Type: text/html;charset=utf-8 < Transfer-Encoding: chunked < Date: Sat, 11 Nov 2017 08:20:09 GMT < * Connection #0 to host ec2-54-88-249-121.compute-1.amazonaws.com left intact Hello World! ~
  • 38. Automate this - Jenkins 1. git clone <repo> 2. mvn clean install test 3. mvn release:prepare release:perform 4. export version=1.0.2 5. packer build packer.json 6. Output this AMI ID to Terraform to launch an Autoscaling Group
  • 39. Summary Do not release code - release runtime infrastructure Automate Everything Legendary = Disable ssh from your AMIs
  • 40. Resources Packer - https://packer.io AWS EC2 - https://aws.amazon.com/documentation/ec2/ My Blog Post - https://tinyurl.com/packer-jenkins