SlideShare a Scribd company logo
P U B L I C S E C T O R
S U M M I T
WASHINGTON DC
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R
S U M M I T
AWS CloudFormation: Deep Dive
and Recent Enhancements
Luis Colon (@luiscolon1)
Senior Developer Advocate
AWS CloudFormation
3 0 1 5 9 2
Dan Blanco (@thedanblanco)
Developer Advocate
AWS CloudFormation
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R
S U M M I T
Deep dive: agenda
• Modernizing and Extending AWS CloudFormation
• Updates to UX/Console
• Service Coverage
• Public Coverage Roadmap
• Enterprise Management
• Drift Detection
• Updates to AWS CloudFormation Stacksets
• Operational Safety: Managing Secrets
• Developer Productivity
• Authoring with Linter
• Template Schema Plugin
• Macros
• CDK
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R
S U M M I T
Infrastructure as code with AWS CloudFormation
Code in YAML or
JSON directly or
use sample
templates
Upload local
files or from
an S3 bucket
Create stack
using console,
API or CLI
Stacks and
resources are
provisioned
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R
S U M M I T
Modernizing and Extending
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R
S U M M I T
Redesigned console
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R
S U M M I T
Redesigned console: split pane
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R
S U M M I T
Redesigned console: nested stack - parent only view
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R
S U M M I T
New and updated resource types
Close to 400 resource types supported today
Added or updated support for over 70 resource types since January
Amazon API Gateway V2
Amazon CloudWatch Events
Amazon Elastic Cloud Compute
(Amazon EC2)
Amazon GuardDuty
Amazon MQ
Amazon Neptune
Amazon SageMaker
Amazon Simple Email Service
(Amazon SES)
Amazon AppStream
AWS AppSync
AWS Lambda Layers
AWS Service Discovery
AWS Greengrass
AWS AppMesh
AWS RoboMaker
Amazon Kinesis Analytics V2
AWS IoT 1-Click
Amazon DocumentDB
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R
S U M M I T
Coming soon: public coverage roadmap
Get more feedback from the community on most impactful coverage
Focusing on existing resource types coverage
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R
S U M M I T
Enterprise Management
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R
S U M M I T
Drift detection
Allows you to detect if configuration changes were made to your stack resources outside of
AWS CloudFormation via the AWS Management Console, CLI, and SDKs
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R
S U M M I T
Drift detection
Use the diff viewer in
the console to
pinpoint the changes
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R
S U M M I T
Drift detection
Also available via CLI and API
Supports the most commonly
used resources
Automatic drift alerts via AWS
Config rule
Remediate by updating live
configuration values to match the
template values
Looking ahead: supporting more
resources, preventing false
positives, handling edge cases -
help us by providing feedback!
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R
S U M M I T
AWS Private Link support
AWS PrivateLink is a purpose-built
technology designed to access
AWS services, while keeping all the
network traffic within the AWS
network
Use AWS CloudFormation APIs
inside of your Amazon Virtual
Private Cloud (Amazon VPC) and
route data between your Amazon
VPC and AWS CloudFormation
entirely within the AWS network.
No proxies, NATs, or Internet
Gateways required
Improve security posture. E.g.
sending a signal back to AWS
CloudFormation stack from within
a private Amazon VPC without
going across the public internet
Private Subnet
Amazon VPC
Private
Instance
172.16.0.0
172.16.3.0
172.16.2.0
S3
Endpoint
AWS CloudFormation
Endpoint
Amazon
S3
AWS CloudFormation
Wait Condition
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R
S U M M I T
Updates to StackSets
Stacksets extends the
functionality of stacks by
enabling you to create,
update, or delete stacks
across multiple accounts and
regions with a single
operation
Limit increase: 1500 stack
instance operations running
on a region concurrently, per
admin account
Override parameters gives
more fine-grained control of
stack instance updates
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R
S U M M I T
Operational safety: improved handling of secrets
Parameters:
InstanceType:
Type: 'AWS::SSM::Parameter::Value<String>'
Default: ssbEC2iDev
KeyName:
Type: 'AWS::EC2::KeyPair::KeyName'
Default: brinks
LatestAmiId:
Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>'
Default: '/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2'
Resources:
PSBInstance:
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R
S U M M I T
Operational safety: improved handling of secrets
Parameters:
InstanceType:
Type: 'AWS::SSM::Parameter::Value<String>'
Default: ssbEC2iDev
KeyName:
Type: 'AWS::EC2::KeyPair::KeyName'
Default: brinks
LatestAmiId:
Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>'
Default: '/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2'
Resources:
PSBInstance:
Type: ‘AWS::EC2::Instance’
Properties:
ImageId: !Ref LatestAmiId
KeyName: !Ref KeyName
InstanceType: !Ref InstanceType
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R
S U M M I T
Operational safety: new dynamic references
Parameters:
KeyName:
Type: 'AWS::EC2::KeyPair::KeyName'
Default: brinks
LatestAmiId:
Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>'
Default: '/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2'
Resources:
PSBInstance:
Type: ‘AWS::EC2::Instance’
Properties:
ImageId: !Ref LatestAmiId
KeyName: !Ref KeyName
InstanceType: '{{resolve:ssm:ssbEC2iDev:1}}'
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R
S U M M I T
Operational safety: new dynamic references
Parameters:
KeyName:
Type: 'AWS::EC2::KeyPair::KeyName'
Default: brinks
LatestAmiId:
Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>'
Default: '/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2'
Resources:
PSBInstance:
Type: ‘AWS::EC2::Instance’
Properties:
ImageId: !Ref LatestAmiId
KeyName: !Ref KeyName
InstanceType: '{{resolve:ssm:ssbEC2iDev:1}}'
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R
S U M M I T
Dynamic references: with secure strings
Resources:
MyRDSDB:
Type: "AWS::RDS::DBInstance"
Properties:
DBInstanceClass: db.t2.medium
AllocatedStorage: ’20’
Engine: mariadb
EngineVersion: ’10.2’
MasterUsername: appadmin
MasterUserPassword: ch4ng1ng-s3cr3t
Resources:
MyRDSDB:
Type: "AWS::RDS::DBInstance"
Properties:
DBInstanceClass: db.t2.medium
AllocatedStorage: ’20’
Engine: mariadb
EngineVersion: ’10.2’
MasterUsername: appadmin
MasterUserPassword: ‘{{resolve:ssm-secure:ssbRDSmEcntl:1}}'
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R
S U M M I T
Dynamic references: with secrets manager
Resources:
MyRDSDB:
Type: "AWS::RDS::DBInstance"
Properties:
DBInstanceClass: db.t2.medium
AllocatedStorage: ’20’
Engine: mariadb
EngineVersion: ’10.2’
MasterUsername: appadmin
MasterUserPassword: ch4ng1ng-s3cr3t
Resources:
MyRDSDB:
Type: "AWS::RDS::DBInstance"
Properties:
DBInstanceClass: db.t2.medium
AllocatedStorage: ’20’
Engine: mariadb
EngineVersion: ’10.2’
MasterUsername: '{{resolve:secretsmanager:MyRDSSecret:SecretString:username}}'
MasterUserPassword: '{{resolve:secretsmanager:MyRDSSecret:SecretString:password}}'
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R
S U M M I T
Developer Productivity
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R
S U M M I T
Linter
https://github.com/aws-cloudformation/cfn-python-lint
• Plugins for Atom, VisualStudio
Code, Sublime, VIM
• Run headless in pipelines
• Process multiple files
• Handles Conditions/Fn::If
• SAM Local integration
• Available now on GitHub, over
100,000 downloads
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R
S U M M I T
Template Schema Plugin
https://github.com/aws-cloudformation/aws-cloudformation-template-schem
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R
S U M M I T
Taskcat
https://github.com/aws-quickstart/taskcat
• From the AWS QuickStart team
• Open Source
• Catches problems that aren’t
obvious in a single template or
stack
• Tests templates by creating stacks
in multiple AWS regions
simultaneously
• Generates a report with a pass/fail
grade for each region
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R
S U M M I T
Pipeline
Build Test Promote
AWS Cloud
Region
Developers
Git Push
Templates Taskcat
• Cfn-lint
Source
Staging
Production
Testing Change set
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R
S U M M I T
Macros
• Write short-hand, abbreviated instructions that expand automatically
before deployment
• Add utility functions, iteration loops, strings …
• Ensure resources are defined to comply to standards
• Easy to share code to reuse across stacks
• Key Benefit: once deployed, downstream users can be isolated from
macro program details
• Macros are AWS Lambda functions and can use all supported languages
• New: run macros without change sets
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R
S U M M I T
Macros: examples
Iterator/Loop
• Make me X number of this resource
Execute Python
• Pass arbitrary code
Perform String Functions
• Upper, Lower …
Globals
• Add Global Variables
Defaults
• If resource X is declared, add default attributes
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R
S U M M I T
Iterator: Code
import copy
def process_template(template):
new_template = copy.deepcopy(template)
status = 'success'
for name, resource in template['Resources'].items():
if 'Count' in resource:
count = new_template['Resources'][name].pop('Count')
multiplied = multiply(name, new_template['Resources'][name], count)
if not set(multiplied.keys()) & set(new_template['Resources'].keys()):
new_template['Resources'].update(multiplied)
else:
status = 'failed'
return status, template
return status, new_template
def multiply(resource_name, resource_structure, count):
resources = {}
for iteration in range(1, count):
resources[resource_name+str(iteration)] = resource_structure
return resources
def handler(event, context):
result = process_template(event['fragment'])
return {
'requestId': event['requestId'],
'status': result[0],
'fragment': result[1],
}
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R
S U M M I T
Iterator: Deploy the macro
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
Macro:
Type: AWS::CloudFormation::Macro
Properties:
Name: Count
FunctionName: !GetAtt CountMacroFunction.Arn
CountMacroFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: src
Handler: index.handler
Runtime: python3.6
Timeout: 5
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R
S U M M I T
Iterator: Using your macro
Transform:
- Count
Resources:
Bucket:
Type: AWS::S3::Bucket
Count: 3
Transform:
- Count
Sqs:
Type: AWS:::SQS::Queue
Count: 2
Resources:
Bucket1:
Type: AWS::S3::Bucket
Bucket2:
Type: AWS::S3::Bucket
Bucket3:
Type: AWS::S3::Bucket
Resources:
Sqs1:
Type: AWS:::SQS::Queue
Sqs2:
Type: AWS:::SQS::Queue
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R
S U M M I T
Macro: Execute Python
AWSTemplateFormatVersion: "2010-09-09"
Description: tests String macro functions
Parameters:
Tags:
Default:
"Env=Prod,Application=MyApp,BU=ModernisationTeam"
Type: "CommaDelimitedList"
Resources:
S3Bucket:
Type: "AWS::S3::Bucket"
Properties:
Tags: |
#!PyPlate
output = []
for tag in params['Tags']:
key, value = tag.split('=')
output.append({"Key": key, "Value": value})
Transform: [PyPlate]
def handler(event, context):
macro_response = {
"requestId": event["requestId"],
"status": "success"
}
try:
params = {
"params": event["templateParameterValues"],
"template": event["fragment"],
"account_id": event["accountId"],
"region": event["region"]
}
response = event["fragment"]
macro_response["fragment"] =
obj_iterate(response, params)
except Exception as e:
traceback.print_exc()
macro_response["status"] = "failure"
macro_response["errorMessage"] = str(e)
return macro_response
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R
S U M M I T
Macro: Add String Functions
Parameters:
InputString:
Default: "This is a test input string"
Type: String
Resources:
S3Bucket:
Type: "AWS::S3::Bucket"
Properties:
Tags:
- Key: Upper
Value:
'Fn::Transform':
- Name: 'StringMacro'
Parameters:
InputString: !Ref InputString
Operation: Upper
Parameters:
InputString:
Default: "This is a test input string"
Type: String
Resources:
S3Bucket:
Type: "AWS::S3::Bucket"
Properties:
Tags:
- Key: Upper
Value: “THIS IS A TEST INPUT STRING”
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R
S U M M I T
Code: Add String Functionsdef handler(event, context):
response = {
"requestId": event["requestId"],
"status": "success"
}
try:
operation = event["params"]["Operation"]
input = event["params"]["InputString"]
no_param_string_funcs = [
"Upper", "Lower", "Capitalize",
"Title", "SwapCase"]
if operation in no_param_string_funcs:
…
elif operation == "Strip":
…
elif operation == "Replace":
…
elif operation == "MaxLength":
…
except Exception:
traceback.print_exc()
response["status"] = "failure"
macro_response["errorMessage"] = str(e)
return response
Multiple Functions in a single macro:
• Upper
• Lower
• Capitalize
• Title
• SwapCase
• Strip
• Replace
• MaxLength
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R
S U M M I T
Macro: Global Variables
Transform: Globals
Globals:
SomeText: some-text
ThingTag:
Key: Thing
Value: This is a thing
Resources:
Bucket:
Type: AWS::S3::Bucket
Properties:
BucketName: "@SomeText"
Tags:
- "@ThingTag"
- Key: OtherThing
Value: Other thing value
Resources:
Bucket:
Type: AWS::S3::Bucket
Properties:
BucketName: “some-text"
Tags:
- Key: Thing
Value: This is a thing
- Key: OtherThing
Value: Other thing value
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R
S U M M I T
Code: Globals
Transform: Globals
Globals:
SomeText: some-text
ThingTag:
Key: Thing
Value: This is a thing
Resources:
Bucket:
Type: AWS::S3::Bucket
Properties:
BucketName: "@SomeText"
Tags:
- "@ThingTag"
- Key: OtherThing
Value: Other thing value
class Repeater():
def __init__(self, template):
self.repeaters = template["Globals"]
del template["Globals"]
self.template = template
def process(self):
return self.__walk(self.template)
def __walk(self, fragment):
if isinstance(fragment, str) and any(fragment == "@{}".format(key) for key in
self.repeaters):
return self.repeaters[fragment[1:]]
elif isinstance(fragment, dict):
return {
key: self.__walk(value)
for key, value
in fragment.items()
}
elif isinstance(fragment, list):
return [
self.__walk(value)
for value in fragment
]
return fragment
def handler(event, context):
return {
"requestId": event["requestId"],
"status": "success",
"fragment": Repeater(event["fragment"]).process(),
}
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R
S U M M I T
Macro: Generate Additional Resources
Transform: Defaults
Resources:
Bucket1:
Type: AWS::S3::Bucket
Resources:
Bucket1:
Type: AWS::S3::Bucket
Properties:
AccessControl: Private
Bucket1Policy:
Type: AWS::S3::BucketPolicy
Properties:
Bucket:
Ref: Bucket1
PolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Deny
Principal: "*"
Action: "s3:Delete*"
Resource:
Fn::Sub:
"arn:aws:s3:::${Bucket1}/*"
Condition:
Bool:
aws:MultiFactorAuthPresent:
"false"
Whenever a bucket is defined…
• Add access control property
• Add bucket policy
• Generate additional resources, intrinsic
function calls, conditions, more
• Macro can allow user to override defaults
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R
S U M M I T
Advanced: Setting up Defaults
DEFAULTS = json.load(open("defaults.json"))
def interpolate(name, string):
return string.replace("{$}", name)
def get_additional_resources(name, props):
additional_resources = {}
for key, value in props.items():
key = interpolate(name, key)
if isinstance(value, dict):
additional_resources[key] = get_additional_resources(name, value)
elif isinstance(value, list):
additional_resources[key] = [
get_additional_resources(name, v)
for v in value
]
elif isinstance(value, str):
additional_resources[key] = interpolate(name, value)
else:
additional_resources[key] = value
return additional_resources
def process_property(key, default, resource):
# Recursive
prop = resource[key]
if isinstance(prop, dict):
if "Defaults::Override" in prop:
resource[key] = prop["Defaults::Override"]
else:
resource[key] = default
elif isinstance(default, dict):
for k in default.keys():
if k in prop.keys():
process_property(k, default[k], prop)
else:
prop[k] = default[k]
else:
resource[key] = default
def process_resource(name, resource, additional_resources):
default = DEFAULTS[resource["Type"]]
if "Properties" not in resource:
resource["Properties"] = {}
# Handle properties
for key, prop in default["Properties"].items():
if key not in resource["Properties"]:
resource["Properties"][key] = prop
else:
process_property(key, prop, resource["Properties"])
# Add additional resources
additional_resources.update(get_additional_resources(name,
default.get("AdditionalResources", {})))
def process(template):
additional_resources = {}
for name, resource in template["Resources"].items():
if resource["Type"] in DEFAULTS:
process_resource(name, resource, additional_resources)
template["Resources"].update(additional_resources)
return template
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R
S U M M I T
Advanced: Setting up Defaults
{
"AWS::S3::Bucket": {
"Properties": {
"AccessControl": "Private",
"VersioningConfiguration": {
"Status": "Enabled"
}
},
"AdditionalResources": {
"{$}Policy": {
"Type": "AWS::S3::BucketPolicy",
"Properties": {
"Bucket": {
"Ref": "{$}"
},
"PolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Principal": "*",
"Action": "s3:Delete*",
"Resource": {
"Fn::Sub": "arn:aws:s3:::${{$}}/*"
},
"Condition": {
"Bool": {
"aws:MultiFactorAuthPresent": "false"
}
…
Specify additional resources in a side file
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R
S U M M I T
AWS CDK (Cloud Development Kit) in Dev Preview
CDK Application
Stack(s)
Construct(s)
CDK
CLI
AWS CloudFormation
Templates“compiler”
“assembly
language”
“processor”
TypeScript/JavaScript, Java, .Net, Python in Dev Preview
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R
S U M M I T
Summary
• Updates to UX/Console
• Service Coverage
• Public Coverage Roadmap
• Drift Detection
• Updates to Stacksets
• Operational Safety: Managing Secrets
• Authoring with Linter
• Template Schema Plugin
• Macros
• CDK
Thank you!
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R
S U M M I T
Luis Colon (@luiscolon1)
Senior Developer Advocate
AWS CloudFormation
Dan Blanco (@thedanblanco)
Developer Advocate
AWS CloudFormation
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Please complete the
session survey.
!
P U B L I C S E C T O R
S U M M I T

More Related Content

What's hot

AWS SAM(Serverless Application Model) 을 이용한 백오피스 마이그레이션 (현창훈, HBSmith) :: AWS...
AWS SAM(Serverless Application Model) 을 이용한 백오피스 마이그레이션 (현창훈, HBSmith) :: AWS...AWS SAM(Serverless Application Model) 을 이용한 백오피스 마이그레이션 (현창훈, HBSmith) :: AWS...
AWS SAM(Serverless Application Model) 을 이용한 백오피스 마이그레이션 (현창훈, HBSmith) :: AWS...
Amazon Web Services Korea
 
Automatically Scaling Your Kubernetes Workloads - SVC209-S - Anaheim AWS Summit
Automatically Scaling Your Kubernetes Workloads - SVC209-S - Anaheim AWS SummitAutomatically Scaling Your Kubernetes Workloads - SVC209-S - Anaheim AWS Summit
Automatically Scaling Your Kubernetes Workloads - SVC209-S - Anaheim AWS Summit
Amazon Web Services
 
Interstella GTC: Monolith to Microservices with ECS
Interstella GTC: Monolith to Microservices with ECSInterstella GTC: Monolith to Microservices with ECS
Interstella GTC: Monolith to Microservices with ECS
Amazon Web Services
 
Architecting ASP.NET Core Microservices Applications on AWS (WIN401) - AWS re...
Architecting ASP.NET Core Microservices Applications on AWS (WIN401) - AWS re...Architecting ASP.NET Core Microservices Applications on AWS (WIN401) - AWS re...
Architecting ASP.NET Core Microservices Applications on AWS (WIN401) - AWS re...
Amazon Web Services
 
re:Invent Deep Dive on Lambda Layers and Runtime API
re:Invent Deep Dive on Lambda Layers and Runtime APIre:Invent Deep Dive on Lambda Layers and Runtime API
re:Invent Deep Dive on Lambda Layers and Runtime API
Amazon Web Services
 
AWSome Day Digital LATAM
AWSome Day Digital LATAMAWSome Day Digital LATAM
AWSome Day Digital LATAM
Amazon Web Services LATAM
 
Kubernetes/ EKS - 김광영 (AWS 솔루션즈 아키텍트)
Kubernetes/ EKS - 김광영 (AWS 솔루션즈 아키텍트)Kubernetes/ EKS - 김광영 (AWS 솔루션즈 아키텍트)
Kubernetes/ EKS - 김광영 (AWS 솔루션즈 아키텍트)
Amazon Web Services Korea
 
AWS ECS Workshop A Journey to Modern Applications
AWS ECS Workshop A Journey to Modern ApplicationsAWS ECS Workshop A Journey to Modern Applications
AWS ECS Workshop A Journey to Modern Applications
Amazon Web Services
 
AWS Lambda use cases and best practices - Builders Day Israel
AWS Lambda use cases and best practices - Builders Day IsraelAWS Lambda use cases and best practices - Builders Day Israel
AWS Lambda use cases and best practices - Builders Day Israel
Amazon Web Services
 
Control for Your Cloud Environment Using AWS Management Tools (ENT226-R1) - A...
Control for Your Cloud Environment Using AWS Management Tools (ENT226-R1) - A...Control for Your Cloud Environment Using AWS Management Tools (ENT226-R1) - A...
Control for Your Cloud Environment Using AWS Management Tools (ENT226-R1) - A...
Amazon Web Services
 
AWS Container services
AWS Container servicesAWS Container services
AWS Container services
Aleksandr Maklakov
 
Deep Dive on Serverless Application Development
Deep Dive on Serverless Application DevelopmentDeep Dive on Serverless Application Development
Deep Dive on Serverless Application Development
Amazon Web Services
 
Modernize your Microsoft Applications on AWS
Modernize your Microsoft Applications on AWSModernize your Microsoft Applications on AWS
Modernize your Microsoft Applications on AWS
Amazon Web Services
 
Containers State of the Union I AWS Dev Day 2018
Containers State of the Union I AWS Dev Day 2018Containers State of the Union I AWS Dev Day 2018
Containers State of the Union I AWS Dev Day 2018
AWS Germany
 
Build and Deploy Serverless Applications with AWS SAM
Build and Deploy Serverless Applications with AWS SAM Build and Deploy Serverless Applications with AWS SAM
Build and Deploy Serverless Applications with AWS SAM
Amazon Web Services
 
Building serverless enterprise applications - SRV315 - Toronto AWS Summit
Building serverless enterprise applications - SRV315 - Toronto AWS SummitBuilding serverless enterprise applications - SRV315 - Toronto AWS Summit
Building serverless enterprise applications - SRV315 - Toronto AWS Summit
Amazon Web Services
 
Workshop: Building Serverless Real-time Data Processing (Now with Unicorns!)
Workshop: Building Serverless Real-time Data Processing (Now with Unicorns!)Workshop: Building Serverless Real-time Data Processing (Now with Unicorns!)
Workshop: Building Serverless Real-time Data Processing (Now with Unicorns!)
Amazon Web Services
 
AWSome Day - 2018
AWSome Day - 2018AWSome Day - 2018
AWSome Day - 2018
Amazon Web Services
 
SRV205 Architectures and Strategies for Building Modern Applications on AWS
 SRV205 Architectures and Strategies for Building Modern Applications on AWS SRV205 Architectures and Strategies for Building Modern Applications on AWS
SRV205 Architectures and Strategies for Building Modern Applications on AWS
Amazon Web Services
 
AWS Containers Day.pdf
AWS Containers Day.pdfAWS Containers Day.pdf
AWS Containers Day.pdf
Amazon Web Services
 

What's hot (20)

AWS SAM(Serverless Application Model) 을 이용한 백오피스 마이그레이션 (현창훈, HBSmith) :: AWS...
AWS SAM(Serverless Application Model) 을 이용한 백오피스 마이그레이션 (현창훈, HBSmith) :: AWS...AWS SAM(Serverless Application Model) 을 이용한 백오피스 마이그레이션 (현창훈, HBSmith) :: AWS...
AWS SAM(Serverless Application Model) 을 이용한 백오피스 마이그레이션 (현창훈, HBSmith) :: AWS...
 
Automatically Scaling Your Kubernetes Workloads - SVC209-S - Anaheim AWS Summit
Automatically Scaling Your Kubernetes Workloads - SVC209-S - Anaheim AWS SummitAutomatically Scaling Your Kubernetes Workloads - SVC209-S - Anaheim AWS Summit
Automatically Scaling Your Kubernetes Workloads - SVC209-S - Anaheim AWS Summit
 
Interstella GTC: Monolith to Microservices with ECS
Interstella GTC: Monolith to Microservices with ECSInterstella GTC: Monolith to Microservices with ECS
Interstella GTC: Monolith to Microservices with ECS
 
Architecting ASP.NET Core Microservices Applications on AWS (WIN401) - AWS re...
Architecting ASP.NET Core Microservices Applications on AWS (WIN401) - AWS re...Architecting ASP.NET Core Microservices Applications on AWS (WIN401) - AWS re...
Architecting ASP.NET Core Microservices Applications on AWS (WIN401) - AWS re...
 
re:Invent Deep Dive on Lambda Layers and Runtime API
re:Invent Deep Dive on Lambda Layers and Runtime APIre:Invent Deep Dive on Lambda Layers and Runtime API
re:Invent Deep Dive on Lambda Layers and Runtime API
 
AWSome Day Digital LATAM
AWSome Day Digital LATAMAWSome Day Digital LATAM
AWSome Day Digital LATAM
 
Kubernetes/ EKS - 김광영 (AWS 솔루션즈 아키텍트)
Kubernetes/ EKS - 김광영 (AWS 솔루션즈 아키텍트)Kubernetes/ EKS - 김광영 (AWS 솔루션즈 아키텍트)
Kubernetes/ EKS - 김광영 (AWS 솔루션즈 아키텍트)
 
AWS ECS Workshop A Journey to Modern Applications
AWS ECS Workshop A Journey to Modern ApplicationsAWS ECS Workshop A Journey to Modern Applications
AWS ECS Workshop A Journey to Modern Applications
 
AWS Lambda use cases and best practices - Builders Day Israel
AWS Lambda use cases and best practices - Builders Day IsraelAWS Lambda use cases and best practices - Builders Day Israel
AWS Lambda use cases and best practices - Builders Day Israel
 
Control for Your Cloud Environment Using AWS Management Tools (ENT226-R1) - A...
Control for Your Cloud Environment Using AWS Management Tools (ENT226-R1) - A...Control for Your Cloud Environment Using AWS Management Tools (ENT226-R1) - A...
Control for Your Cloud Environment Using AWS Management Tools (ENT226-R1) - A...
 
AWS Container services
AWS Container servicesAWS Container services
AWS Container services
 
Deep Dive on Serverless Application Development
Deep Dive on Serverless Application DevelopmentDeep Dive on Serverless Application Development
Deep Dive on Serverless Application Development
 
Modernize your Microsoft Applications on AWS
Modernize your Microsoft Applications on AWSModernize your Microsoft Applications on AWS
Modernize your Microsoft Applications on AWS
 
Containers State of the Union I AWS Dev Day 2018
Containers State of the Union I AWS Dev Day 2018Containers State of the Union I AWS Dev Day 2018
Containers State of the Union I AWS Dev Day 2018
 
Build and Deploy Serverless Applications with AWS SAM
Build and Deploy Serverless Applications with AWS SAM Build and Deploy Serverless Applications with AWS SAM
Build and Deploy Serverless Applications with AWS SAM
 
Building serverless enterprise applications - SRV315 - Toronto AWS Summit
Building serverless enterprise applications - SRV315 - Toronto AWS SummitBuilding serverless enterprise applications - SRV315 - Toronto AWS Summit
Building serverless enterprise applications - SRV315 - Toronto AWS Summit
 
Workshop: Building Serverless Real-time Data Processing (Now with Unicorns!)
Workshop: Building Serverless Real-time Data Processing (Now with Unicorns!)Workshop: Building Serverless Real-time Data Processing (Now with Unicorns!)
Workshop: Building Serverless Real-time Data Processing (Now with Unicorns!)
 
AWSome Day - 2018
AWSome Day - 2018AWSome Day - 2018
AWSome Day - 2018
 
SRV205 Architectures and Strategies for Building Modern Applications on AWS
 SRV205 Architectures and Strategies for Building Modern Applications on AWS SRV205 Architectures and Strategies for Building Modern Applications on AWS
SRV205 Architectures and Strategies for Building Modern Applications on AWS
 
AWS Containers Day.pdf
AWS Containers Day.pdfAWS Containers Day.pdf
AWS Containers Day.pdf
 

Similar to AWS CloudFormation Deep Dive and Recent Enhancements

Built & Delivered in Six Months Using Serverless Technical Patterns and Micro...
Built & Delivered in Six Months Using Serverless Technical Patterns and Micro...Built & Delivered in Six Months Using Serverless Technical Patterns and Micro...
Built & Delivered in Six Months Using Serverless Technical Patterns and Micro...
Amazon Web Services
 
Continuous Delivery Best Practices
Continuous Delivery Best PracticesContinuous Delivery Best Practices
Continuous Delivery Best Practices
Amazon Web Services
 
Getting Started with Serverless Architectures
Getting Started with Serverless ArchitecturesGetting Started with Serverless Architectures
Getting Started with Serverless Architectures
Amazon Web Services
 
To Infinity and Beyond: What's new with Serverless
To Infinity and Beyond: What's new with ServerlessTo Infinity and Beyond: What's new with Serverless
To Infinity and Beyond: What's new with Serverless
Amazon Web Services
 
Simplifying Microsoft Architectures with AWS Services
Simplifying Microsoft Architectures with AWS ServicesSimplifying Microsoft Architectures with AWS Services
Simplifying Microsoft Architectures with AWS Services
AWS Summits
 
Getting Started with Serverless Architectures
Getting Started with Serverless ArchitecturesGetting Started with Serverless Architectures
Getting Started with Serverless Architectures
AWS Summits
 
Building a Critical Communications Platform Using Serverless Technologies
Building a Critical Communications Platform Using Serverless TechnologiesBuilding a Critical Communications Platform Using Serverless Technologies
Building a Critical Communications Platform Using Serverless Technologies
Amazon Web Services
 
Infrastructure is code with the AWS CDK - MAD312 - New York AWS Summit
Infrastructure is code with the AWS CDK - MAD312 - New York AWS SummitInfrastructure is code with the AWS CDK - MAD312 - New York AWS Summit
Infrastructure is code with the AWS CDK - MAD312 - New York AWS Summit
Amazon Web Services
 
Serverless Functions Deep Dive
Serverless Functions Deep DiveServerless Functions Deep Dive
Serverless Functions Deep Dive
Amazon Web Services
 
Breaking the Monolith using AWS Container Services
Breaking the Monolith using AWS Container ServicesBreaking the Monolith using AWS Container Services
Breaking the Monolith using AWS Container Services
Amazon Web Services
 
Websites go Serverless - AWS Summit Berlin
Websites go Serverless - AWS Summit BerlinWebsites go Serverless - AWS Summit Berlin
Websites go Serverless - AWS Summit Berlin
Boaz Ziniman
 
AWS Summit Singapore 2019 | Microsoft DevOps on AWS
AWS Summit Singapore 2019 | Microsoft DevOps on AWSAWS Summit Singapore 2019 | Microsoft DevOps on AWS
AWS Summit Singapore 2019 | Microsoft DevOps on AWS
AWS Summits
 
Integrate Your Favourite Microsoft DevOps Tools with AWS - AWS Summit Sydney
Integrate Your Favourite Microsoft DevOps Tools with AWS - AWS Summit SydneyIntegrate Your Favourite Microsoft DevOps Tools with AWS - AWS Summit Sydney
Integrate Your Favourite Microsoft DevOps Tools with AWS - AWS Summit Sydney
Amazon Web Services
 
.NET on AWS
.NET on AWS.NET on AWS
.NET on AWS
Amazon Web Services
 
Favorire l'innovazione passando da applicazioni monolitiche ad architetture m...
Favorire l'innovazione passando da applicazioni monolitiche ad architetture m...Favorire l'innovazione passando da applicazioni monolitiche ad architetture m...
Favorire l'innovazione passando da applicazioni monolitiche ad architetture m...
Amazon Web Services
 
Security at the Speed of Cloud How to Think About it & How You Can Do it Now
Security at the Speed of Cloud How to Think About it & How You Can Do it NowSecurity at the Speed of Cloud How to Think About it & How You Can Do it Now
Security at the Speed of Cloud How to Think About it & How You Can Do it Now
Amazon Web Services
 
Re cap2018
Re cap2018Re cap2018
Re cap2018
Richard Harvey
 
DevOps - Moving to DevOps the Amazon Way
DevOps - Moving to DevOps the Amazon WayDevOps - Moving to DevOps the Amazon Way
DevOps - Moving to DevOps the Amazon WayAmazon Web Services
 
.NET Development and Debugging in AWS
.NET Development and Debugging in AWS.NET Development and Debugging in AWS
.NET Development and Debugging in AWS
Amazon Web Services
 
Scale - Best Practices for Migrating your Microsoft Workloads to AWS
Scale - Best Practices for Migrating your Microsoft Workloads to AWSScale - Best Practices for Migrating your Microsoft Workloads to AWS
Scale - Best Practices for Migrating your Microsoft Workloads to AWS
Amazon Web Services
 

Similar to AWS CloudFormation Deep Dive and Recent Enhancements (20)

Built & Delivered in Six Months Using Serverless Technical Patterns and Micro...
Built & Delivered in Six Months Using Serverless Technical Patterns and Micro...Built & Delivered in Six Months Using Serverless Technical Patterns and Micro...
Built & Delivered in Six Months Using Serverless Technical Patterns and Micro...
 
Continuous Delivery Best Practices
Continuous Delivery Best PracticesContinuous Delivery Best Practices
Continuous Delivery Best Practices
 
Getting Started with Serverless Architectures
Getting Started with Serverless ArchitecturesGetting Started with Serverless Architectures
Getting Started with Serverless Architectures
 
To Infinity and Beyond: What's new with Serverless
To Infinity and Beyond: What's new with ServerlessTo Infinity and Beyond: What's new with Serverless
To Infinity and Beyond: What's new with Serverless
 
Simplifying Microsoft Architectures with AWS Services
Simplifying Microsoft Architectures with AWS ServicesSimplifying Microsoft Architectures with AWS Services
Simplifying Microsoft Architectures with AWS Services
 
Getting Started with Serverless Architectures
Getting Started with Serverless ArchitecturesGetting Started with Serverless Architectures
Getting Started with Serverless Architectures
 
Building a Critical Communications Platform Using Serverless Technologies
Building a Critical Communications Platform Using Serverless TechnologiesBuilding a Critical Communications Platform Using Serverless Technologies
Building a Critical Communications Platform Using Serverless Technologies
 
Infrastructure is code with the AWS CDK - MAD312 - New York AWS Summit
Infrastructure is code with the AWS CDK - MAD312 - New York AWS SummitInfrastructure is code with the AWS CDK - MAD312 - New York AWS Summit
Infrastructure is code with the AWS CDK - MAD312 - New York AWS Summit
 
Serverless Functions Deep Dive
Serverless Functions Deep DiveServerless Functions Deep Dive
Serverless Functions Deep Dive
 
Breaking the Monolith using AWS Container Services
Breaking the Monolith using AWS Container ServicesBreaking the Monolith using AWS Container Services
Breaking the Monolith using AWS Container Services
 
Websites go Serverless - AWS Summit Berlin
Websites go Serverless - AWS Summit BerlinWebsites go Serverless - AWS Summit Berlin
Websites go Serverless - AWS Summit Berlin
 
AWS Summit Singapore 2019 | Microsoft DevOps on AWS
AWS Summit Singapore 2019 | Microsoft DevOps on AWSAWS Summit Singapore 2019 | Microsoft DevOps on AWS
AWS Summit Singapore 2019 | Microsoft DevOps on AWS
 
Integrate Your Favourite Microsoft DevOps Tools with AWS - AWS Summit Sydney
Integrate Your Favourite Microsoft DevOps Tools with AWS - AWS Summit SydneyIntegrate Your Favourite Microsoft DevOps Tools with AWS - AWS Summit Sydney
Integrate Your Favourite Microsoft DevOps Tools with AWS - AWS Summit Sydney
 
.NET on AWS
.NET on AWS.NET on AWS
.NET on AWS
 
Favorire l'innovazione passando da applicazioni monolitiche ad architetture m...
Favorire l'innovazione passando da applicazioni monolitiche ad architetture m...Favorire l'innovazione passando da applicazioni monolitiche ad architetture m...
Favorire l'innovazione passando da applicazioni monolitiche ad architetture m...
 
Security at the Speed of Cloud How to Think About it & How You Can Do it Now
Security at the Speed of Cloud How to Think About it & How You Can Do it NowSecurity at the Speed of Cloud How to Think About it & How You Can Do it Now
Security at the Speed of Cloud How to Think About it & How You Can Do it Now
 
Re cap2018
Re cap2018Re cap2018
Re cap2018
 
DevOps - Moving to DevOps the Amazon Way
DevOps - Moving to DevOps the Amazon WayDevOps - Moving to DevOps the Amazon Way
DevOps - Moving to DevOps the Amazon Way
 
.NET Development and Debugging in AWS
.NET Development and Debugging in AWS.NET Development and Debugging in AWS
.NET Development and Debugging in AWS
 
Scale - Best Practices for Migrating your Microsoft Workloads to AWS
Scale - Best Practices for Migrating your Microsoft Workloads to AWSScale - Best Practices for Migrating your Microsoft Workloads to AWS
Scale - Best Practices for Migrating your Microsoft Workloads to AWS
 

More from Amazon Web Services

Come costruire servizi di Forecasting sfruttando algoritmi di ML e deep learn...
Come costruire servizi di Forecasting sfruttando algoritmi di ML e deep learn...Come costruire servizi di Forecasting sfruttando algoritmi di ML e deep learn...
Come costruire servizi di Forecasting sfruttando algoritmi di ML e deep learn...
Amazon Web Services
 
Big Data per le Startup: come creare applicazioni Big Data in modalità Server...
Big Data per le Startup: come creare applicazioni Big Data in modalità Server...Big Data per le Startup: come creare applicazioni Big Data in modalità Server...
Big Data per le Startup: come creare applicazioni Big Data in modalità Server...
Amazon Web Services
 
Esegui pod serverless con Amazon EKS e AWS Fargate
Esegui pod serverless con Amazon EKS e AWS FargateEsegui pod serverless con Amazon EKS e AWS Fargate
Esegui pod serverless con Amazon EKS e AWS Fargate
Amazon Web Services
 
Costruire Applicazioni Moderne con AWS
Costruire Applicazioni Moderne con AWSCostruire Applicazioni Moderne con AWS
Costruire Applicazioni Moderne con AWS
Amazon Web Services
 
Come spendere fino al 90% in meno con i container e le istanze spot
Come spendere fino al 90% in meno con i container e le istanze spot Come spendere fino al 90% in meno con i container e le istanze spot
Come spendere fino al 90% in meno con i container e le istanze spot
Amazon Web Services
 
Open banking as a service
Open banking as a serviceOpen banking as a service
Open banking as a service
Amazon Web Services
 
Rendi unica l’offerta della tua startup sul mercato con i servizi Machine Lea...
Rendi unica l’offerta della tua startup sul mercato con i servizi Machine Lea...Rendi unica l’offerta della tua startup sul mercato con i servizi Machine Lea...
Rendi unica l’offerta della tua startup sul mercato con i servizi Machine Lea...
Amazon Web Services
 
OpsWorks Configuration Management: automatizza la gestione e i deployment del...
OpsWorks Configuration Management: automatizza la gestione e i deployment del...OpsWorks Configuration Management: automatizza la gestione e i deployment del...
OpsWorks Configuration Management: automatizza la gestione e i deployment del...
Amazon Web Services
 
Microsoft Active Directory su AWS per supportare i tuoi Windows Workloads
Microsoft Active Directory su AWS per supportare i tuoi Windows WorkloadsMicrosoft Active Directory su AWS per supportare i tuoi Windows Workloads
Microsoft Active Directory su AWS per supportare i tuoi Windows Workloads
Amazon Web Services
 
Computer Vision con AWS
Computer Vision con AWSComputer Vision con AWS
Computer Vision con AWS
Amazon Web Services
 
Database Oracle e VMware Cloud on AWS i miti da sfatare
Database Oracle e VMware Cloud on AWS i miti da sfatareDatabase Oracle e VMware Cloud on AWS i miti da sfatare
Database Oracle e VMware Cloud on AWS i miti da sfatare
Amazon Web Services
 
Crea la tua prima serverless ledger-based app con QLDB e NodeJS
Crea la tua prima serverless ledger-based app con QLDB e NodeJSCrea la tua prima serverless ledger-based app con QLDB e NodeJS
Crea la tua prima serverless ledger-based app con QLDB e NodeJS
Amazon Web Services
 
API moderne real-time per applicazioni mobili e web
API moderne real-time per applicazioni mobili e webAPI moderne real-time per applicazioni mobili e web
API moderne real-time per applicazioni mobili e web
Amazon Web Services
 
Database Oracle e VMware Cloud™ on AWS: i miti da sfatare
Database Oracle e VMware Cloud™ on AWS: i miti da sfatareDatabase Oracle e VMware Cloud™ on AWS: i miti da sfatare
Database Oracle e VMware Cloud™ on AWS: i miti da sfatare
Amazon Web Services
 
Tools for building your MVP on AWS
Tools for building your MVP on AWSTools for building your MVP on AWS
Tools for building your MVP on AWSAmazon Web Services
 
How to Build a Winning Pitch Deck
How to Build a Winning Pitch DeckHow to Build a Winning Pitch Deck
How to Build a Winning Pitch DeckAmazon Web Services
 
Building a web application without servers
Building a web application without serversBuilding a web application without servers
Building a web application without serversAmazon Web Services
 
AWS_HK_StartupDay_Building Interactive websites while automating for efficien...
AWS_HK_StartupDay_Building Interactive websites while automating for efficien...AWS_HK_StartupDay_Building Interactive websites while automating for efficien...
AWS_HK_StartupDay_Building Interactive websites while automating for efficien...Amazon Web Services
 
Introduzione a Amazon Elastic Container Service
Introduzione a Amazon Elastic Container ServiceIntroduzione a Amazon Elastic Container Service
Introduzione a Amazon Elastic Container Service
Amazon Web Services
 

More from Amazon Web Services (20)

Come costruire servizi di Forecasting sfruttando algoritmi di ML e deep learn...
Come costruire servizi di Forecasting sfruttando algoritmi di ML e deep learn...Come costruire servizi di Forecasting sfruttando algoritmi di ML e deep learn...
Come costruire servizi di Forecasting sfruttando algoritmi di ML e deep learn...
 
Big Data per le Startup: come creare applicazioni Big Data in modalità Server...
Big Data per le Startup: come creare applicazioni Big Data in modalità Server...Big Data per le Startup: come creare applicazioni Big Data in modalità Server...
Big Data per le Startup: come creare applicazioni Big Data in modalità Server...
 
Esegui pod serverless con Amazon EKS e AWS Fargate
Esegui pod serverless con Amazon EKS e AWS FargateEsegui pod serverless con Amazon EKS e AWS Fargate
Esegui pod serverless con Amazon EKS e AWS Fargate
 
Costruire Applicazioni Moderne con AWS
Costruire Applicazioni Moderne con AWSCostruire Applicazioni Moderne con AWS
Costruire Applicazioni Moderne con AWS
 
Come spendere fino al 90% in meno con i container e le istanze spot
Come spendere fino al 90% in meno con i container e le istanze spot Come spendere fino al 90% in meno con i container e le istanze spot
Come spendere fino al 90% in meno con i container e le istanze spot
 
Open banking as a service
Open banking as a serviceOpen banking as a service
Open banking as a service
 
Rendi unica l’offerta della tua startup sul mercato con i servizi Machine Lea...
Rendi unica l’offerta della tua startup sul mercato con i servizi Machine Lea...Rendi unica l’offerta della tua startup sul mercato con i servizi Machine Lea...
Rendi unica l’offerta della tua startup sul mercato con i servizi Machine Lea...
 
OpsWorks Configuration Management: automatizza la gestione e i deployment del...
OpsWorks Configuration Management: automatizza la gestione e i deployment del...OpsWorks Configuration Management: automatizza la gestione e i deployment del...
OpsWorks Configuration Management: automatizza la gestione e i deployment del...
 
Microsoft Active Directory su AWS per supportare i tuoi Windows Workloads
Microsoft Active Directory su AWS per supportare i tuoi Windows WorkloadsMicrosoft Active Directory su AWS per supportare i tuoi Windows Workloads
Microsoft Active Directory su AWS per supportare i tuoi Windows Workloads
 
Computer Vision con AWS
Computer Vision con AWSComputer Vision con AWS
Computer Vision con AWS
 
Database Oracle e VMware Cloud on AWS i miti da sfatare
Database Oracle e VMware Cloud on AWS i miti da sfatareDatabase Oracle e VMware Cloud on AWS i miti da sfatare
Database Oracle e VMware Cloud on AWS i miti da sfatare
 
Crea la tua prima serverless ledger-based app con QLDB e NodeJS
Crea la tua prima serverless ledger-based app con QLDB e NodeJSCrea la tua prima serverless ledger-based app con QLDB e NodeJS
Crea la tua prima serverless ledger-based app con QLDB e NodeJS
 
API moderne real-time per applicazioni mobili e web
API moderne real-time per applicazioni mobili e webAPI moderne real-time per applicazioni mobili e web
API moderne real-time per applicazioni mobili e web
 
Database Oracle e VMware Cloud™ on AWS: i miti da sfatare
Database Oracle e VMware Cloud™ on AWS: i miti da sfatareDatabase Oracle e VMware Cloud™ on AWS: i miti da sfatare
Database Oracle e VMware Cloud™ on AWS: i miti da sfatare
 
Tools for building your MVP on AWS
Tools for building your MVP on AWSTools for building your MVP on AWS
Tools for building your MVP on AWS
 
How to Build a Winning Pitch Deck
How to Build a Winning Pitch DeckHow to Build a Winning Pitch Deck
How to Build a Winning Pitch Deck
 
Building a web application without servers
Building a web application without serversBuilding a web application without servers
Building a web application without servers
 
Fundraising Essentials
Fundraising EssentialsFundraising Essentials
Fundraising Essentials
 
AWS_HK_StartupDay_Building Interactive websites while automating for efficien...
AWS_HK_StartupDay_Building Interactive websites while automating for efficien...AWS_HK_StartupDay_Building Interactive websites while automating for efficien...
AWS_HK_StartupDay_Building Interactive websites while automating for efficien...
 
Introduzione a Amazon Elastic Container Service
Introduzione a Amazon Elastic Container ServiceIntroduzione a Amazon Elastic Container Service
Introduzione a Amazon Elastic Container Service
 

AWS CloudFormation Deep Dive and Recent Enhancements

  • 1. P U B L I C S E C T O R S U M M I T WASHINGTON DC
  • 2. © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R S U M M I T AWS CloudFormation: Deep Dive and Recent Enhancements Luis Colon (@luiscolon1) Senior Developer Advocate AWS CloudFormation 3 0 1 5 9 2 Dan Blanco (@thedanblanco) Developer Advocate AWS CloudFormation
  • 3. © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R S U M M I T Deep dive: agenda • Modernizing and Extending AWS CloudFormation • Updates to UX/Console • Service Coverage • Public Coverage Roadmap • Enterprise Management • Drift Detection • Updates to AWS CloudFormation Stacksets • Operational Safety: Managing Secrets • Developer Productivity • Authoring with Linter • Template Schema Plugin • Macros • CDK
  • 4. © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R S U M M I T Infrastructure as code with AWS CloudFormation Code in YAML or JSON directly or use sample templates Upload local files or from an S3 bucket Create stack using console, API or CLI Stacks and resources are provisioned
  • 5. © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R S U M M I T Modernizing and Extending
  • 6. © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R S U M M I T Redesigned console
  • 7. © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R S U M M I T Redesigned console: split pane
  • 8. © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R S U M M I T Redesigned console: nested stack - parent only view
  • 9. © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R S U M M I T New and updated resource types Close to 400 resource types supported today Added or updated support for over 70 resource types since January Amazon API Gateway V2 Amazon CloudWatch Events Amazon Elastic Cloud Compute (Amazon EC2) Amazon GuardDuty Amazon MQ Amazon Neptune Amazon SageMaker Amazon Simple Email Service (Amazon SES) Amazon AppStream AWS AppSync AWS Lambda Layers AWS Service Discovery AWS Greengrass AWS AppMesh AWS RoboMaker Amazon Kinesis Analytics V2 AWS IoT 1-Click Amazon DocumentDB
  • 10. © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R S U M M I T Coming soon: public coverage roadmap Get more feedback from the community on most impactful coverage Focusing on existing resource types coverage
  • 11. © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R S U M M I T Enterprise Management
  • 12. © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R S U M M I T Drift detection Allows you to detect if configuration changes were made to your stack resources outside of AWS CloudFormation via the AWS Management Console, CLI, and SDKs
  • 13. © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R S U M M I T Drift detection Use the diff viewer in the console to pinpoint the changes
  • 14. © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R S U M M I T Drift detection Also available via CLI and API Supports the most commonly used resources Automatic drift alerts via AWS Config rule Remediate by updating live configuration values to match the template values Looking ahead: supporting more resources, preventing false positives, handling edge cases - help us by providing feedback!
  • 15. © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R S U M M I T AWS Private Link support AWS PrivateLink is a purpose-built technology designed to access AWS services, while keeping all the network traffic within the AWS network Use AWS CloudFormation APIs inside of your Amazon Virtual Private Cloud (Amazon VPC) and route data between your Amazon VPC and AWS CloudFormation entirely within the AWS network. No proxies, NATs, or Internet Gateways required Improve security posture. E.g. sending a signal back to AWS CloudFormation stack from within a private Amazon VPC without going across the public internet Private Subnet Amazon VPC Private Instance 172.16.0.0 172.16.3.0 172.16.2.0 S3 Endpoint AWS CloudFormation Endpoint Amazon S3 AWS CloudFormation Wait Condition
  • 16. © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R S U M M I T Updates to StackSets Stacksets extends the functionality of stacks by enabling you to create, update, or delete stacks across multiple accounts and regions with a single operation Limit increase: 1500 stack instance operations running on a region concurrently, per admin account Override parameters gives more fine-grained control of stack instance updates
  • 17. © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R S U M M I T Operational safety: improved handling of secrets Parameters: InstanceType: Type: 'AWS::SSM::Parameter::Value<String>' Default: ssbEC2iDev KeyName: Type: 'AWS::EC2::KeyPair::KeyName' Default: brinks LatestAmiId: Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>' Default: '/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2' Resources: PSBInstance:
  • 18. © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R S U M M I T Operational safety: improved handling of secrets Parameters: InstanceType: Type: 'AWS::SSM::Parameter::Value<String>' Default: ssbEC2iDev KeyName: Type: 'AWS::EC2::KeyPair::KeyName' Default: brinks LatestAmiId: Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>' Default: '/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2' Resources: PSBInstance: Type: ‘AWS::EC2::Instance’ Properties: ImageId: !Ref LatestAmiId KeyName: !Ref KeyName InstanceType: !Ref InstanceType
  • 19. © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R S U M M I T Operational safety: new dynamic references Parameters: KeyName: Type: 'AWS::EC2::KeyPair::KeyName' Default: brinks LatestAmiId: Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>' Default: '/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2' Resources: PSBInstance: Type: ‘AWS::EC2::Instance’ Properties: ImageId: !Ref LatestAmiId KeyName: !Ref KeyName InstanceType: '{{resolve:ssm:ssbEC2iDev:1}}'
  • 20. © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R S U M M I T Operational safety: new dynamic references Parameters: KeyName: Type: 'AWS::EC2::KeyPair::KeyName' Default: brinks LatestAmiId: Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>' Default: '/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2' Resources: PSBInstance: Type: ‘AWS::EC2::Instance’ Properties: ImageId: !Ref LatestAmiId KeyName: !Ref KeyName InstanceType: '{{resolve:ssm:ssbEC2iDev:1}}'
  • 21. © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R S U M M I T Dynamic references: with secure strings Resources: MyRDSDB: Type: "AWS::RDS::DBInstance" Properties: DBInstanceClass: db.t2.medium AllocatedStorage: ’20’ Engine: mariadb EngineVersion: ’10.2’ MasterUsername: appadmin MasterUserPassword: ch4ng1ng-s3cr3t Resources: MyRDSDB: Type: "AWS::RDS::DBInstance" Properties: DBInstanceClass: db.t2.medium AllocatedStorage: ’20’ Engine: mariadb EngineVersion: ’10.2’ MasterUsername: appadmin MasterUserPassword: ‘{{resolve:ssm-secure:ssbRDSmEcntl:1}}'
  • 22. © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R S U M M I T Dynamic references: with secrets manager Resources: MyRDSDB: Type: "AWS::RDS::DBInstance" Properties: DBInstanceClass: db.t2.medium AllocatedStorage: ’20’ Engine: mariadb EngineVersion: ’10.2’ MasterUsername: appadmin MasterUserPassword: ch4ng1ng-s3cr3t Resources: MyRDSDB: Type: "AWS::RDS::DBInstance" Properties: DBInstanceClass: db.t2.medium AllocatedStorage: ’20’ Engine: mariadb EngineVersion: ’10.2’ MasterUsername: '{{resolve:secretsmanager:MyRDSSecret:SecretString:username}}' MasterUserPassword: '{{resolve:secretsmanager:MyRDSSecret:SecretString:password}}'
  • 23. © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R S U M M I T Developer Productivity
  • 24. © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R S U M M I T Linter https://github.com/aws-cloudformation/cfn-python-lint • Plugins for Atom, VisualStudio Code, Sublime, VIM • Run headless in pipelines • Process multiple files • Handles Conditions/Fn::If • SAM Local integration • Available now on GitHub, over 100,000 downloads
  • 25. © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R S U M M I T Template Schema Plugin https://github.com/aws-cloudformation/aws-cloudformation-template-schem
  • 26. © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R S U M M I T Taskcat https://github.com/aws-quickstart/taskcat • From the AWS QuickStart team • Open Source • Catches problems that aren’t obvious in a single template or stack • Tests templates by creating stacks in multiple AWS regions simultaneously • Generates a report with a pass/fail grade for each region
  • 27. © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R S U M M I T Pipeline Build Test Promote AWS Cloud Region Developers Git Push Templates Taskcat • Cfn-lint Source Staging Production Testing Change set
  • 28. © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R S U M M I T Macros • Write short-hand, abbreviated instructions that expand automatically before deployment • Add utility functions, iteration loops, strings … • Ensure resources are defined to comply to standards • Easy to share code to reuse across stacks • Key Benefit: once deployed, downstream users can be isolated from macro program details • Macros are AWS Lambda functions and can use all supported languages • New: run macros without change sets
  • 29. © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R S U M M I T Macros: examples Iterator/Loop • Make me X number of this resource Execute Python • Pass arbitrary code Perform String Functions • Upper, Lower … Globals • Add Global Variables Defaults • If resource X is declared, add default attributes
  • 30. © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R S U M M I T Iterator: Code import copy def process_template(template): new_template = copy.deepcopy(template) status = 'success' for name, resource in template['Resources'].items(): if 'Count' in resource: count = new_template['Resources'][name].pop('Count') multiplied = multiply(name, new_template['Resources'][name], count) if not set(multiplied.keys()) & set(new_template['Resources'].keys()): new_template['Resources'].update(multiplied) else: status = 'failed' return status, template return status, new_template def multiply(resource_name, resource_structure, count): resources = {} for iteration in range(1, count): resources[resource_name+str(iteration)] = resource_structure return resources def handler(event, context): result = process_template(event['fragment']) return { 'requestId': event['requestId'], 'status': result[0], 'fragment': result[1], }
  • 31. © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R S U M M I T Iterator: Deploy the macro AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Resources: Macro: Type: AWS::CloudFormation::Macro Properties: Name: Count FunctionName: !GetAtt CountMacroFunction.Arn CountMacroFunction: Type: AWS::Serverless::Function Properties: CodeUri: src Handler: index.handler Runtime: python3.6 Timeout: 5
  • 32. © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R S U M M I T Iterator: Using your macro Transform: - Count Resources: Bucket: Type: AWS::S3::Bucket Count: 3 Transform: - Count Sqs: Type: AWS:::SQS::Queue Count: 2 Resources: Bucket1: Type: AWS::S3::Bucket Bucket2: Type: AWS::S3::Bucket Bucket3: Type: AWS::S3::Bucket Resources: Sqs1: Type: AWS:::SQS::Queue Sqs2: Type: AWS:::SQS::Queue
  • 33. © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R S U M M I T Macro: Execute Python AWSTemplateFormatVersion: "2010-09-09" Description: tests String macro functions Parameters: Tags: Default: "Env=Prod,Application=MyApp,BU=ModernisationTeam" Type: "CommaDelimitedList" Resources: S3Bucket: Type: "AWS::S3::Bucket" Properties: Tags: | #!PyPlate output = [] for tag in params['Tags']: key, value = tag.split('=') output.append({"Key": key, "Value": value}) Transform: [PyPlate] def handler(event, context): macro_response = { "requestId": event["requestId"], "status": "success" } try: params = { "params": event["templateParameterValues"], "template": event["fragment"], "account_id": event["accountId"], "region": event["region"] } response = event["fragment"] macro_response["fragment"] = obj_iterate(response, params) except Exception as e: traceback.print_exc() macro_response["status"] = "failure" macro_response["errorMessage"] = str(e) return macro_response
  • 34. © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R S U M M I T Macro: Add String Functions Parameters: InputString: Default: "This is a test input string" Type: String Resources: S3Bucket: Type: "AWS::S3::Bucket" Properties: Tags: - Key: Upper Value: 'Fn::Transform': - Name: 'StringMacro' Parameters: InputString: !Ref InputString Operation: Upper Parameters: InputString: Default: "This is a test input string" Type: String Resources: S3Bucket: Type: "AWS::S3::Bucket" Properties: Tags: - Key: Upper Value: “THIS IS A TEST INPUT STRING”
  • 35. © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R S U M M I T Code: Add String Functionsdef handler(event, context): response = { "requestId": event["requestId"], "status": "success" } try: operation = event["params"]["Operation"] input = event["params"]["InputString"] no_param_string_funcs = [ "Upper", "Lower", "Capitalize", "Title", "SwapCase"] if operation in no_param_string_funcs: … elif operation == "Strip": … elif operation == "Replace": … elif operation == "MaxLength": … except Exception: traceback.print_exc() response["status"] = "failure" macro_response["errorMessage"] = str(e) return response Multiple Functions in a single macro: • Upper • Lower • Capitalize • Title • SwapCase • Strip • Replace • MaxLength
  • 36. © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R S U M M I T Macro: Global Variables Transform: Globals Globals: SomeText: some-text ThingTag: Key: Thing Value: This is a thing Resources: Bucket: Type: AWS::S3::Bucket Properties: BucketName: "@SomeText" Tags: - "@ThingTag" - Key: OtherThing Value: Other thing value Resources: Bucket: Type: AWS::S3::Bucket Properties: BucketName: “some-text" Tags: - Key: Thing Value: This is a thing - Key: OtherThing Value: Other thing value
  • 37. © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R S U M M I T Code: Globals Transform: Globals Globals: SomeText: some-text ThingTag: Key: Thing Value: This is a thing Resources: Bucket: Type: AWS::S3::Bucket Properties: BucketName: "@SomeText" Tags: - "@ThingTag" - Key: OtherThing Value: Other thing value class Repeater(): def __init__(self, template): self.repeaters = template["Globals"] del template["Globals"] self.template = template def process(self): return self.__walk(self.template) def __walk(self, fragment): if isinstance(fragment, str) and any(fragment == "@{}".format(key) for key in self.repeaters): return self.repeaters[fragment[1:]] elif isinstance(fragment, dict): return { key: self.__walk(value) for key, value in fragment.items() } elif isinstance(fragment, list): return [ self.__walk(value) for value in fragment ] return fragment def handler(event, context): return { "requestId": event["requestId"], "status": "success", "fragment": Repeater(event["fragment"]).process(), }
  • 38. © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R S U M M I T Macro: Generate Additional Resources Transform: Defaults Resources: Bucket1: Type: AWS::S3::Bucket Resources: Bucket1: Type: AWS::S3::Bucket Properties: AccessControl: Private Bucket1Policy: Type: AWS::S3::BucketPolicy Properties: Bucket: Ref: Bucket1 PolicyDocument: Version: "2012-10-17" Statement: - Effect: Deny Principal: "*" Action: "s3:Delete*" Resource: Fn::Sub: "arn:aws:s3:::${Bucket1}/*" Condition: Bool: aws:MultiFactorAuthPresent: "false" Whenever a bucket is defined… • Add access control property • Add bucket policy • Generate additional resources, intrinsic function calls, conditions, more • Macro can allow user to override defaults
  • 39. © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R S U M M I T Advanced: Setting up Defaults DEFAULTS = json.load(open("defaults.json")) def interpolate(name, string): return string.replace("{$}", name) def get_additional_resources(name, props): additional_resources = {} for key, value in props.items(): key = interpolate(name, key) if isinstance(value, dict): additional_resources[key] = get_additional_resources(name, value) elif isinstance(value, list): additional_resources[key] = [ get_additional_resources(name, v) for v in value ] elif isinstance(value, str): additional_resources[key] = interpolate(name, value) else: additional_resources[key] = value return additional_resources def process_property(key, default, resource): # Recursive prop = resource[key] if isinstance(prop, dict): if "Defaults::Override" in prop: resource[key] = prop["Defaults::Override"] else: resource[key] = default elif isinstance(default, dict): for k in default.keys(): if k in prop.keys(): process_property(k, default[k], prop) else: prop[k] = default[k] else: resource[key] = default def process_resource(name, resource, additional_resources): default = DEFAULTS[resource["Type"]] if "Properties" not in resource: resource["Properties"] = {} # Handle properties for key, prop in default["Properties"].items(): if key not in resource["Properties"]: resource["Properties"][key] = prop else: process_property(key, prop, resource["Properties"]) # Add additional resources additional_resources.update(get_additional_resources(name, default.get("AdditionalResources", {}))) def process(template): additional_resources = {} for name, resource in template["Resources"].items(): if resource["Type"] in DEFAULTS: process_resource(name, resource, additional_resources) template["Resources"].update(additional_resources) return template
  • 40. © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R S U M M I T Advanced: Setting up Defaults { "AWS::S3::Bucket": { "Properties": { "AccessControl": "Private", "VersioningConfiguration": { "Status": "Enabled" } }, "AdditionalResources": { "{$}Policy": { "Type": "AWS::S3::BucketPolicy", "Properties": { "Bucket": { "Ref": "{$}" }, "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": "s3:Delete*", "Resource": { "Fn::Sub": "arn:aws:s3:::${{$}}/*" }, "Condition": { "Bool": { "aws:MultiFactorAuthPresent": "false" } … Specify additional resources in a side file
  • 41. © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R S U M M I T AWS CDK (Cloud Development Kit) in Dev Preview CDK Application Stack(s) Construct(s) CDK CLI AWS CloudFormation Templates“compiler” “assembly language” “processor” TypeScript/JavaScript, Java, .Net, Python in Dev Preview
  • 42. © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R S U M M I T Summary • Updates to UX/Console • Service Coverage • Public Coverage Roadmap • Drift Detection • Updates to Stacksets • Operational Safety: Managing Secrets • Authoring with Linter • Template Schema Plugin • Macros • CDK
  • 43. Thank you! © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.P U B L I C S E C T O R S U M M I T Luis Colon (@luiscolon1) Senior Developer Advocate AWS CloudFormation Dan Blanco (@thedanblanco) Developer Advocate AWS CloudFormation
  • 44. © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved. Please complete the session survey. ! P U B L I C S E C T O R S U M M I T