SlideShare ist ein Scribd-Unternehmen logo
1 von 93
Downloaden Sie, um offline zu lesen
, 

@wan2land
Incheon
Infrastructure as Code
(with AWS, Hashicorp)
Incheon
(@wan2land),
“ ”
www.monkeyuser.com/2018/architecture
www.monkeyuser.com/2018/architecture
• AWS 

• Terraform 

• Ansible 

• Packer
.
1. Product(Backend + Frontend) .
2. t2.micro ( ..) .
3. git clone Product .
.
4. git pull, build .
1. AMI .
2. .
3. logrotate
.
1. .bash_history .
2. Stackoverflow .
1. DynamoDB
2. DynamoDB Lambda → RDS
3. DynamoDB Stream Kinesis Firehose
4. Kinesis Firehose S3
5. S3 Athena
6. IAM
1. DynamoDB
2. DynamoDB Lambda → RDS
3. DynamoDB Stream Kinesis Firehose
4. Kinesis Firehose S3
5. S3 Athena
6. IAM
..
Infrastructure as Code
…

1. AWS :
2. Terraform :
3. Packer :
4. Ansible :
Infrastructure as Code
…

1. AWS :
2. Terraform :
3. Packer :
4. Ansible :
?
,
( )
Incheon
.
AWS
AWS .
, AWS .
AWS
,
direnv .
blog.outsider.ne.kr/1306
AdministratorAccess ,
.
docs.aws.amazon.com/ko_kr/general/latest/gr/aws-arns-and-namespaces.html
IAM?
AWS ,
Action + Resource .
Action .
( ..)
#	.envrc	파일에	다음과	같이	작성합니다.

export	AWS_ACCESS_KEY_ID='AKIAJQNQ5AHCU7DO2XTQ'

export	AWS_SECRET_ACCESS_KEY='*******'	#	비밀	액세스	키
.envrc
direnv:	error	.envrc	is	blocked.	Run	`direnv	allow`	to	
approve	its	content.

$	direnv	allow
AWS
,

Terraform, Packer 

AWS .
Terraform
(EC2, RDS, VPC )
.
AWS .
www.terraform.io/docs/providers
Desired State Current State Real State
Terraform -
AWS CLI Parameter
. ( )
docs.aws.amazon.com/ko_kr/cli/latest/userguide/
cli-ec2-launch.html
www.terraform.io/docs/providers/aws/r/
instance.html
Terraform -
Terraform ,

AWS CLI .
#	AWS	인스턴스	만들기

resource	"aws_instance"	"service"	{

		count	=	1

		ami											=	"${data.aws_ami.python3_latest.id}"

		instance_type	=	"t2.small"

		key_name	=	"${var.ec2_keyname}"

		subnet_id	=	"${aws_subnet.default.id}"

		vpc_security_group_ids	=	[

				"${aws_security_group.ssh.id}",

		]

		root_block_device	{

				volume_size	=	200

		}

		private_ip	=	"10.0.1.${11	+	count.index}"

		associate_public_ip_address	=	true

		tags	{

				Name	=	"myservice"

		}

}
main.tf
#	AWS	인스턴스	만들기

resource	"aws_instance"	“service"	{

		count	=	1

		ami											=	"${data.aws_ami.python3_latest.id}"

		instance_type	=	"t2.small"

		key_name	=	"${var.ec2_keyname}"

		subnet_id	=	"${aws_subnet.default.id}"

		vpc_security_group_ids	=	[

				"${aws_security_group.ssh.id}",

		]

		root_block_device	{

				volume_size	=	200

		}

		private_ip	=	"10.0.1.${11	+	count.index}"

		associate_public_ip_address	=	true

		tags	{

				Name	=	"myservice"

		}

}
AMI ..
Subnet ..
Security Group ..
main.tf
#	Subnet도	필요해서...

resource	"aws_subnet"	"default"	{

		vpc_id	=	"${aws_vpc.default.id}"

		cidr_block	=	"10.0.0.0/20"

		availability_zone	=	"ap-northeast-2a"

		map_public_ip_on_launch	=	true	#	인스턴스	생성시	자동	IP	매핑

		tags	{

				Name	=	"default"

		}

}
main.tf
Terraform
• aws_instance ..
• ami ..
• subnet
• vpc
• route table
• security group
• vpc
• ….
,

.
Terraform - import
state
.
www.terraform.io/docs/import/usage.html
Terraform - data resource
data .
www.terraform.io/docs/configuration/data-
sources.html
Terraform
ID .
#	AWS	인스턴스	만들기

resource	"aws_instance"	“service"	{

		count	=	1

		ami											=	"${data.aws_ami.python3_latest.id}"

		instance_type	=	"t2.small"

		key_name	=	"${var.ec2_keyname}"

		subnet_id	=	"subnet-00000000000000000"

		vpc_security_group_ids	=	[

				"sg-00000000000000000",

		]

		root_block_device	{

				volume_size	=	200

		}

		private_ip	=	"10.0.1.${11	+	count.index}"

		associate_public_ip_address	=	true

		tags	{

				Name	=	"myservice"

		}

}
main.tf
Terraform
ID ,
.
Terraform -
terraform apply
.
Terraform - tfstate
terraform.tfstate
.gitignore .
Desired State Current State Real State
Terraform - tfstate
tfstate PC
.
resource	"aws_vpc"	"default"	{

		cidr_block	=	"10.0.0.0/16"

		enable_dns_hostnames	=	true	#	인스턴스	생성시	dns	자동	매핑

		tags	{

				Name	=	"default"

				Terraform	=	"true"

		}

}

resource	"aws_internet_gateway"	"default"	{

		vpc_id	=	"${aws_vpc.default.id}"

		tags	{

				Name	=	"default"

				Terraform	=	"true"

		}

}

resource	"aws_default_route_table"	"default"	{

		default_route_table_id	=	"${aws_vpc.default.default_route_table_id}"

		route	{

				cidr_block	=	"0.0.0.0/0"

				gateway_id	=	"${aws_internet_gateway.default.id}"

		}

		tags	{

				Name	=	"default"

				Terraform	=	"true"

		}

}

resource	"aws_subnet"	"default_a"	{

		vpc_id	=	"${aws_vpc.default.id}"

		cidr_block	=	"10.0.0.0/20"

		availability_zone	=	"ap-northeast-2a"

		map_public_ip_on_launch	=	true

		tags	{

				Name	=	"default-a"

				Terraform	=	"true"

		}

} main.tf
resource	"aws_security_group"	"ssh"	{

		name								=	"ssh"

		description	=	"SSH"

		vpc_id	=	"${aws_vpc.default.id}"

		tags	{

				Name	=	"ssh"

				Terraform	=	"true"

		}	
		ingress	{

				from_port			=	22

				to_port					=	22

				protocol				=	"tcp"

				description	=	"SSH"

				cidr_blocks	=	"10.0.0.0/16"

		}	
		egress	{

				from_port			=	0

				to_port					=	0

				protocol				=	"-1"

				description	=	"all"

				cidr_blocks						=	["0.0.0.0/0"]

				ipv6_cidr_blocks	=	["::/0"]

		}

}
resource	"aws_security_group"	"http"	{

		name								=	"http"

		description	=	"HTTP"

		vpc_id	=	"${aws_vpc.default.id}"

		tags	{

				Name	=	"http"

				Terraform	=	"true"

		}	
		ingress	{

				from_port			=	80

				to_port					=	80

				protocol				=	"tcp"

				description	=	"HTTP"

				cidr_blocks						=	["0.0.0.0/0"]

		}	
		egress	{

				from_port			=	0

				to_port					=	0

				protocol				=	"-1"

				description	=	"all"

				cidr_blocks						=	["0.0.0.0/0"]

				ipv6_cidr_blocks	=	["::/0"]

		}

} main.tf
resource	"aws_instance"	"service"	{

		count	=	1

		ami											=	"${data.aws_ami.python3_latest.id}"

		instance_type	=	"t2.small"

		key_name	=	"${var.ec2_keyname}"

		subnet_id	=	"${aws_subnet.default_a.id}"

		vpc_security_group_ids	=	[

				"${aws_security_group.ssh.id}",

				"${aws_security_group.http.id}",

		]

		root_block_device	{

				volume_size	=	200

		}

		private_ip	=	"10.0.1.${11	+	count.index}"

		associate_public_ip_address	=	true

		tags	{

				Name	=	"myservice"

		}

} main.tf
Terraform
VPC ,

VPC .

VPC , .
Terraform Registry
python pip .
registry.terraform.io
Terraform Registry
. ,
.
…
55
.
Incheon
Terraform Provisioner
chef / puppet
Ansible .
Ansible
ansible-playbook .
(Push) ,

Ansible .
.
Ansible vs Shell
Ansible .

, 100
.
( ,  : idempotent)    
,
.
Ansible vs Shell
, ,
(Shell)
.

Ansible
.
Ansible - Shell
Ansible
.
.
docs.ansible.com/ansible/2.5/modules/
shell_module.html
#	fstab에	device를	추가하는	예시..

grep	-q	$DEVICE	/etc/fstab

if	[	$?	==	1	];	then

				echo	"append	fstab..."

				echo	"$DEVICE	$MOUNTPOINT	ext4	defaults,nofail	0	2"	|	sudo	tee	--append	/etc/
fstab	>	/dev/null

else

				echo	"skip	append	fstab"

fi
Ansible + Terraform
Terraform Ansible 

Terraform local_file .
resource	"local_file"	"ansible_hosts"	{

		#	서버가	여러대일수도	있어서	*를	사용합니다.

		content	=	<<EOF

[service]

${join("n",	aws_instance.service.*.public_ip)}

EOF

		filename	=	"${path.module}/inventories/prod/hosts"	#	사용할	inventories	디렉토리

}

main.tf
Ansible + Terraform
hosts
.
ansible-playbook -i inventories/prod role/
example.yml
Ansible + Terraform
Terraform Provisioner Ansible ,

local-exec .
www.terraform.io/docs/provisioners/local-exec.html
---

-	name:	Service	Up

		hosts:	"{{	host	|	default('service')	}}"

		connection:	ssh

		user:	ubuntu

		vars:

				ansible_ssh_private_key_file:	"./certs/ansible.pem"

				ansible_python_interpreter:	"/usr/bin/python3"

		tasks:

				-	name:	install	nginx

						apt:

								name:	nginx

								state:	present

				-	name:	install	nodejs

						apt:

								name:	nodejs

								state:	present

…	생략	…
role/example.yml
Ansible
Infra Ansible .
.
Ansible
.
1. Packer AMI .
2. Elastic Beanstalk, ECS AWS
.
Ansible
Ansible .
AMI
.
Ansible - Galaxy
Ansible .
galaxy.ansible.com
Packer
AMI .
Dockerfile , Shell
.
Packer
Instance
. ( )
{

		"_comment":	"우분투	한국어	AMI",

		"_comment1":	"-	한국어	언어팩	설치",

		"_comment2":	"-	CloudWatch	Server	Agent	설치",

		"builders":	[

				{

						"type":	"amazon-ebs",

						"region":	"ap-northeast-2",

						"instance_type":	"t2.micro",

						"source_ami_filter":	{

								"filters":	{

										"virtualization-type":	"hvm",

										"name":	"ubuntu/images/*ubuntu-xenial-16.04-amd64-server-*",

										"root-device-type":	"ebs"

								},

								"owners":	[“0000000000”],

								"most_recent":	true

						},

						"ssh_username":	"ubuntu",

						"ami_name":	"ubuntu-ko-{{isotime	"060102-150405"}}",

						"tags":	{

								"Name":	"ubuntu-ko",

								"Packer":	"true"

						}

				}

		],

ami/ubuntu-ko.json
		"provisioners":	[

				{

						"type":	"shell",

						"inline":	[

								"sudo	apt	update",

								"sudo	apt	upgrade	-y",

								"sudo	apt	install	-y	language-pack-ko",

								"sudo	locale-gen	ko_KR.UTF-8",

								"sudo	update-locale	LANG=ko_KR.UTF-8	LC_MESSAGES=POSIX	
LANGUAGE=ko_KR.UTF-8	LC_ALL=ko_KR.UTF-8",

								"sudo	apt	install	-y	unzip	libwww-perl	libdatetime-perl",

								"curl	https://aws-cloudwatch.s3.amazonaws.com/downloads/
CloudWatchMonitoringScripts-1.2.2.zip	-O",

								"unzip	CloudWatchMonitoringScripts-1.2.2.zip	&&	rm	
CloudWatchMonitoringScripts-1.2.2.zip"

						]

				},

				{

						"type":	"file",

						"source":	"ami/ubuntu-ko/awscreds.conf",

						"destination":	"/home/ubuntu/aws-scripts-mon/awscreds.conf"

				},

				{

						"type":	"shell",

						"inline":	[

								"echo	"*/5	*	*	*	*	/home/ubuntu/aws-scripts-mon/mon-put-instance-
data.pl	--mem-used-incl-cache-buff	--mem-util	--disk-space-util	--disk-path=/	--
from-cron"	|	sudo	tee	/etc/cron.d/aws-scripts-mon"

						]

				}

		]

}
AWS User ID
"provisioners":	[

				{

						"type":	"shell",

						"inline":	[

								"sudo	apt	update",

								"sudo	apt	upgrade	-y",

								"sudo	apt	install	-y	build-essential",

								"curl	-sL	https://deb.nodesource.com/setup_10.x	|	sudo	-E	bash	-",

								"sudo	apt	install	-y	nodejs",

								"sudo	npm	install	-g	npm",

								"sudo	npm	install	-g	pm2",

								"sudo	pm2	startup	systemd	-u	ubuntu	--hp	/home/ubuntu",

								"sudo	pm2	logrotate	-u	ubuntu",

								"sudo	chown	-R	$USER:$(id	-gn	$USER)	~/.config",

								"sudo	chown	-R	$USER:$(id	-gn	$USER)	~/.pm2",

								"echo	"nodejs	$(node	-v)"",

								"echo	"npm	$(npm	-v)"",

								"echo	"pm2	$(pm2	-v)"",

								"echo	"install	complete!"",

								"sudo	dd	if=/dev/zero	of=/home/swapfile	bs=1024	count=2000000",

								"sudo	mkswap	/home/swapfile",

								"sudo	chmod	0644	/home/swapfile",

								"sudo	swapon	/home/swapfile",

								"echo	"/home/swapfile	none	swap	sw	0	0"	|	sudo	tee	--append	/etc/
fstab	>	/dev/null",

								"echo	"swap	setting	complete!""

						]

				}

		]

}
{

		"_comment":	"우분투	한국어	+	NodeJS	AMI",

		"_comment1":	"-	NodeJS	설치",

		"builders":	[

				{

						"type":	"amazon-ebs",

						"region":	"ap-northeast-2",

						"instance_type":	"t2.micro",

						"source_ami_filter":	{

								"filters":	{

										"tag:Name":	"ubuntu-ko",

										"root-device-type":	"ebs"

								},

								"owners":	["0000000000"],

								"most_recent":	true

						},

						"ssh_username":	"ubuntu",

						"ami_name":	"ubuntu-nodejs-{{isotime	"060102-150405"}}",

						"tags":	{

								"Name":	"ubuntu-nodejs",

								"Packer":	"true"

						}

				}

		],

ami/ubuntu-nodejs.json
AWS User ID
Packer
AMI
.
git
.
{

						"type":	"file",

						"source":	"ami/service/bitbucket_rsa",

						"destination":	"~/.ssh/bitbucket_rsa"

				},

				{

						"type":	"shell",

						"inline":	[

								"chmod	0400	~/.ssh/bitbucket_rsa",

								"echo	"Host	bitbucket-service"	>>	~/.ssh/config",

								"echo	"				Hostname	bitbucket.org"	>>	~/.ssh/config",

								"echo	"				IdentityFile	~/.ssh/bitbucket_rsa"	>>	~/.ssh/config",

								"echo	"				IdentitiesOnly	yes"	>>	~/.ssh/config",

								"touch	~/.ssh/known_hosts	&&	ssh-keyscan	bitbucket.org	>>	~/.ssh/known_hosts",

								"git	clone	git@bitbucket-service:datableteam/service.git",

								"cd	~/service	&&	git	show",

								"cd	~/service	&&	npm	ci	&&	npm	run	build"

						]

				},

				{

						"type":	"file",

						"source":	"ami/service/.env",

						"destination":	"~/service/.env"

				},

				{

						"type":	"file",

						"source":	"ami/service/pm2-app.json",

						"destination":	"~/service/pm2-app.json"

				},

				{

						"type":	"shell",

						"inline":	[

								"pm2	start	~/service/pm2-app.json	&&	pm2	stop	service	&&	pm2	dump"

						]

				}
ami/service.json
Packer + Terraform
Terraform data aws_ami
.
data	"aws_ami"	"nodejs_latest"	{

		most_recent	=	true

		filter	{

				name			=	"name"

				values	=	["ubuntu-nodejs-*"]

		}

		owners	=	["self"]

}

main.tf
Packer + Terraform
ubuntu-nodejs-* ,

terraform apply ,
.
.
Packer + Terraform
.
.
1. direnv AWS .
2. Packer AMI .
3. AMI Terraform
. (Packer + Terraform )
4. Ansible
. (Ansible + Terraform )
1. EC2 70
2. Elastic Beanstalk 2
3. RDS 2
4. DynamoDB 500GB
5. Lambda 10
6. Kinesis + S3 + Athena
3 terraform ,

.
,

.
1. 

→ vault / consul
2. EC2 

→ Elastic Beanstalk / ECS
3. Terraform
4. 

CI / Data Pipeline / Blue-Green
5. Serverless Framework for Lambda
• https://blog.outsider.ne.kr/1266

• https://medium.com/build-acl/state-drift-
detection-using-terraform-d0383628d2ea
Incheon
Thank you!
, 

@wan2land
Q&A
Incheon

Weitere ähnliche Inhalte

Was ist angesagt?

Writing JavaScript Applications with the AWS SDK (TLS303) | AWS re:Invent 2013
Writing JavaScript Applications with the AWS SDK (TLS303) | AWS re:Invent 2013Writing JavaScript Applications with the AWS SDK (TLS303) | AWS re:Invent 2013
Writing JavaScript Applications with the AWS SDK (TLS303) | AWS re:Invent 2013Amazon Web Services
 
Immutable AWS Deployments with Packer and Jenkins
Immutable AWS Deployments with Packer and JenkinsImmutable AWS Deployments with Packer and Jenkins
Immutable AWS Deployments with Packer and JenkinsManish Pandit
 
AWS Lambda with Serverless Framework and Java
AWS Lambda with Serverless Framework and JavaAWS Lambda with Serverless Framework and Java
AWS Lambda with Serverless Framework and JavaManish Pandit
 
Advanced technic for OS upgrading in 3 minutes
Advanced technic for OS upgrading in 3 minutesAdvanced technic for OS upgrading in 3 minutes
Advanced technic for OS upgrading in 3 minutesHiroshi SHIBATA
 
Let us make clear the aws directconnect
Let us make clear the aws directconnectLet us make clear the aws directconnect
Let us make clear the aws directconnectTomoaki Hira
 
Web sockets in Angular
Web sockets in AngularWeb sockets in Angular
Web sockets in AngularYakov Fain
 
Google App Engine With Java And Groovy
Google App Engine With Java And GroovyGoogle App Engine With Java And Groovy
Google App Engine With Java And GroovyKen Kousen
 
Java script at backend nodejs
Java script at backend   nodejsJava script at backend   nodejs
Java script at backend nodejsAmit Thakkar
 
[143]Inside fuse deview 2016
[143]Inside fuse   deview 2016[143]Inside fuse   deview 2016
[143]Inside fuse deview 2016NAVER D2
 
Automation with Packer and TerraForm
Automation with Packer and TerraFormAutomation with Packer and TerraForm
Automation with Packer and TerraFormWesley Charles Blake
 
docker-machine, docker-compose, docker-swarm 覚書
docker-machine, docker-compose, docker-swarm 覚書docker-machine, docker-compose, docker-swarm 覚書
docker-machine, docker-compose, docker-swarm 覚書じゅん なかざ
 
OpenSource ToolChain for the Hybrid Cloud
OpenSource ToolChain for the Hybrid CloudOpenSource ToolChain for the Hybrid Cloud
OpenSource ToolChain for the Hybrid CloudIsaac Christoffersen
 
REST to JavaScript for Better Client-side Development
REST to JavaScript for Better Client-side DevelopmentREST to JavaScript for Better Client-side Development
REST to JavaScript for Better Client-side DevelopmentHyunghun Cho
 
Online game server on Akka.NET (NDC2016)
Online game server on Akka.NET (NDC2016)Online game server on Akka.NET (NDC2016)
Online game server on Akka.NET (NDC2016)Esun Kim
 
Baking in the cloud with packer and puppet
Baking in the cloud with packer and puppetBaking in the cloud with packer and puppet
Baking in the cloud with packer and puppetAlan Parkinson
 
Java/Spring과 Node.js의 공존 시즌2
Java/Spring과 Node.js의 공존 시즌2Java/Spring과 Node.js의 공존 시즌2
Java/Spring과 Node.js의 공존 시즌2동수 장
 
Integrating React.js Into a PHP Application
Integrating React.js Into a PHP ApplicationIntegrating React.js Into a PHP Application
Integrating React.js Into a PHP ApplicationAndrew Rota
 
TDD a REST API With Node.js and MongoDB
TDD a REST API With Node.js and MongoDBTDD a REST API With Node.js and MongoDB
TDD a REST API With Node.js and MongoDBValeri Karpov
 

Was ist angesagt? (20)

Writing JavaScript Applications with the AWS SDK (TLS303) | AWS re:Invent 2013
Writing JavaScript Applications with the AWS SDK (TLS303) | AWS re:Invent 2013Writing JavaScript Applications with the AWS SDK (TLS303) | AWS re:Invent 2013
Writing JavaScript Applications with the AWS SDK (TLS303) | AWS re:Invent 2013
 
Immutable AWS Deployments with Packer and Jenkins
Immutable AWS Deployments with Packer and JenkinsImmutable AWS Deployments with Packer and Jenkins
Immutable AWS Deployments with Packer and Jenkins
 
AWS Lambda with Serverless Framework and Java
AWS Lambda with Serverless Framework and JavaAWS Lambda with Serverless Framework and Java
AWS Lambda with Serverless Framework and Java
 
Advanced technic for OS upgrading in 3 minutes
Advanced technic for OS upgrading in 3 minutesAdvanced technic for OS upgrading in 3 minutes
Advanced technic for OS upgrading in 3 minutes
 
Let us make clear the aws directconnect
Let us make clear the aws directconnectLet us make clear the aws directconnect
Let us make clear the aws directconnect
 
Web sockets in Angular
Web sockets in AngularWeb sockets in Angular
Web sockets in Angular
 
Google App Engine With Java And Groovy
Google App Engine With Java And GroovyGoogle App Engine With Java And Groovy
Google App Engine With Java And Groovy
 
NodeJS @ ACS
NodeJS @ ACSNodeJS @ ACS
NodeJS @ ACS
 
Java script at backend nodejs
Java script at backend   nodejsJava script at backend   nodejs
Java script at backend nodejs
 
[143]Inside fuse deview 2016
[143]Inside fuse   deview 2016[143]Inside fuse   deview 2016
[143]Inside fuse deview 2016
 
Automation with Packer and TerraForm
Automation with Packer and TerraFormAutomation with Packer and TerraForm
Automation with Packer and TerraForm
 
docker-machine, docker-compose, docker-swarm 覚書
docker-machine, docker-compose, docker-swarm 覚書docker-machine, docker-compose, docker-swarm 覚書
docker-machine, docker-compose, docker-swarm 覚書
 
OpenSource ToolChain for the Hybrid Cloud
OpenSource ToolChain for the Hybrid CloudOpenSource ToolChain for the Hybrid Cloud
OpenSource ToolChain for the Hybrid Cloud
 
REST to JavaScript for Better Client-side Development
REST to JavaScript for Better Client-side DevelopmentREST to JavaScript for Better Client-side Development
REST to JavaScript for Better Client-side Development
 
Online game server on Akka.NET (NDC2016)
Online game server on Akka.NET (NDC2016)Online game server on Akka.NET (NDC2016)
Online game server on Akka.NET (NDC2016)
 
now
nownow
now
 
Baking in the cloud with packer and puppet
Baking in the cloud with packer and puppetBaking in the cloud with packer and puppet
Baking in the cloud with packer and puppet
 
Java/Spring과 Node.js의 공존 시즌2
Java/Spring과 Node.js의 공존 시즌2Java/Spring과 Node.js의 공존 시즌2
Java/Spring과 Node.js의 공존 시즌2
 
Integrating React.js Into a PHP Application
Integrating React.js Into a PHP ApplicationIntegrating React.js Into a PHP Application
Integrating React.js Into a PHP Application
 
TDD a REST API With Node.js and MongoDB
TDD a REST API With Node.js and MongoDBTDD a REST API With Node.js and MongoDB
TDD a REST API With Node.js and MongoDB
 

Ähnlich wie Infrastructure as Code 삽질기

Containers Meetup (AWS+CNCF) Milano Jan 15th 2020
Containers Meetup (AWS+CNCF) Milano Jan 15th 2020Containers Meetup (AWS+CNCF) Milano Jan 15th 2020
Containers Meetup (AWS+CNCF) Milano Jan 15th 2020Massimo Ferre'
 
Containers Docker Kind Kubernetes Istio
Containers Docker Kind Kubernetes IstioContainers Docker Kind Kubernetes Istio
Containers Docker Kind Kubernetes IstioAraf Karsh Hamid
 
Atlantisで実現するTerraformのGitOps
Atlantisで実現するTerraformのGitOpsAtlantisで実現するTerraformのGitOps
Atlantisで実現するTerraformのGitOps理弘 山崎
 
Packer + Ansible을 이용한 AMI 생성 및 AutoScaling Group 이미지 교체 이야기
Packer + Ansible을 이용한 AMI 생성 및 AutoScaling Group 이미지 교체 이야기Packer + Ansible을 이용한 AMI 생성 및 AutoScaling Group 이미지 교체 이야기
Packer + Ansible을 이용한 AMI 생성 및 AutoScaling Group 이미지 교체 이야기AWSKRUG - AWS한국사용자모임
 
Packer + Ansible을 이용한 AMI 생성 및 AutoScaling Group 이미지 교체 이야기
Packer + Ansible을 이용한 AMI 생성 및 AutoScaling Group 이미지 교체 이야기Packer + Ansible을 이용한 AMI 생성 및 AutoScaling Group 이미지 교체 이야기
Packer + Ansible을 이용한 AMI 생성 및 AutoScaling Group 이미지 교체 이야기창훈 정
 
Running Spark In Production in the Cloud is Not Easy with Nayur Khan
Running Spark In Production in the Cloud is Not Easy with Nayur KhanRunning Spark In Production in the Cloud is Not Easy with Nayur Khan
Running Spark In Production in the Cloud is Not Easy with Nayur KhanDatabricks
 
Terraform modules and best-practices - September 2018
Terraform modules and best-practices - September 2018Terraform modules and best-practices - September 2018
Terraform modules and best-practices - September 2018Anton Babenko
 
Immutable Deployments with AWS CloudFormation and AWS Lambda
Immutable Deployments with AWS CloudFormation and AWS LambdaImmutable Deployments with AWS CloudFormation and AWS Lambda
Immutable Deployments with AWS CloudFormation and AWS LambdaAOE
 
IDI 2020 - Containers Meet Serverless
IDI 2020 - Containers Meet ServerlessIDI 2020 - Containers Meet Serverless
IDI 2020 - Containers Meet ServerlessMassimo Ferre'
 
Building APIs in an easy way using API Platform
Building APIs in an easy way using API PlatformBuilding APIs in an easy way using API Platform
Building APIs in an easy way using API PlatformAntonio Peric-Mazar
 
Project Frankenstein: A multitenant, horizontally scalable Prometheus as a se...
Project Frankenstein: A multitenant, horizontally scalable Prometheus as a se...Project Frankenstein: A multitenant, horizontally scalable Prometheus as a se...
Project Frankenstein: A multitenant, horizontally scalable Prometheus as a se...Weaveworks
 
AWS Update | London - Elastic Beanstalk
AWS Update | London - Elastic BeanstalkAWS Update | London - Elastic Beanstalk
AWS Update | London - Elastic BeanstalkAmazon Web Services
 
Serverless Geospatial Mobile Apps with AWS
Serverless Geospatial Mobile Apps with AWSServerless Geospatial Mobile Apps with AWS
Serverless Geospatial Mobile Apps with AWSAmazon Web Services
 
A Year of Droplr Cloud Architecture Evolution with AWS and Serverless
A Year of Droplr Cloud Architecture Evolution with AWS and ServerlessA Year of Droplr Cloud Architecture Evolution with AWS and Serverless
A Year of Droplr Cloud Architecture Evolution with AWS and ServerlessAntoni Orfin
 
GlobalAzureBootCamp 2018
GlobalAzureBootCamp 2018GlobalAzureBootCamp 2018
GlobalAzureBootCamp 2018girish goudar
 

Ähnlich wie Infrastructure as Code 삽질기 (20)

Containers Meetup (AWS+CNCF) Milano Jan 15th 2020
Containers Meetup (AWS+CNCF) Milano Jan 15th 2020Containers Meetup (AWS+CNCF) Milano Jan 15th 2020
Containers Meetup (AWS+CNCF) Milano Jan 15th 2020
 
Containers Docker Kind Kubernetes Istio
Containers Docker Kind Kubernetes IstioContainers Docker Kind Kubernetes Istio
Containers Docker Kind Kubernetes Istio
 
Atlantisで実現するTerraformのGitOps
Atlantisで実現するTerraformのGitOpsAtlantisで実現するTerraformのGitOps
Atlantisで実現するTerraformのGitOps
 
Packer + Ansible을 이용한 AMI 생성 및 AutoScaling Group 이미지 교체 이야기
Packer + Ansible을 이용한 AMI 생성 및 AutoScaling Group 이미지 교체 이야기Packer + Ansible을 이용한 AMI 생성 및 AutoScaling Group 이미지 교체 이야기
Packer + Ansible을 이용한 AMI 생성 및 AutoScaling Group 이미지 교체 이야기
 
Packer + Ansible을 이용한 AMI 생성 및 AutoScaling Group 이미지 교체 이야기
Packer + Ansible을 이용한 AMI 생성 및 AutoScaling Group 이미지 교체 이야기Packer + Ansible을 이용한 AMI 생성 및 AutoScaling Group 이미지 교체 이야기
Packer + Ansible을 이용한 AMI 생성 및 AutoScaling Group 이미지 교체 이야기
 
Running Spark In Production in the Cloud is Not Easy with Nayur Khan
Running Spark In Production in the Cloud is Not Easy with Nayur KhanRunning Spark In Production in the Cloud is Not Easy with Nayur Khan
Running Spark In Production in the Cloud is Not Easy with Nayur Khan
 
Terraform modules and best-practices - September 2018
Terraform modules and best-practices - September 2018Terraform modules and best-practices - September 2018
Terraform modules and best-practices - September 2018
 
Log Analysis At Scale
Log Analysis At ScaleLog Analysis At Scale
Log Analysis At Scale
 
AWS Kinesis
AWS KinesisAWS Kinesis
AWS Kinesis
 
Immutable Deployments with AWS CloudFormation and AWS Lambda
Immutable Deployments with AWS CloudFormation and AWS LambdaImmutable Deployments with AWS CloudFormation and AWS Lambda
Immutable Deployments with AWS CloudFormation and AWS Lambda
 
IDI 2020 - Containers Meet Serverless
IDI 2020 - Containers Meet ServerlessIDI 2020 - Containers Meet Serverless
IDI 2020 - Containers Meet Serverless
 
CI/CD on pure AWS
CI/CD on pure AWSCI/CD on pure AWS
CI/CD on pure AWS
 
Building APIs in an easy way using API Platform
Building APIs in an easy way using API PlatformBuilding APIs in an easy way using API Platform
Building APIs in an easy way using API Platform
 
Project Frankenstein: A multitenant, horizontally scalable Prometheus as a se...
Project Frankenstein: A multitenant, horizontally scalable Prometheus as a se...Project Frankenstein: A multitenant, horizontally scalable Prometheus as a se...
Project Frankenstein: A multitenant, horizontally scalable Prometheus as a se...
 
AWS Update | London - Elastic Beanstalk
AWS Update | London - Elastic BeanstalkAWS Update | London - Elastic Beanstalk
AWS Update | London - Elastic Beanstalk
 
Serverless Geospatial Mobile Apps with AWS
Serverless Geospatial Mobile Apps with AWSServerless Geospatial Mobile Apps with AWS
Serverless Geospatial Mobile Apps with AWS
 
Top conf serverlezz
Top conf   serverlezzTop conf   serverlezz
Top conf serverlezz
 
A Year of Droplr Cloud Architecture Evolution with AWS and Serverless
A Year of Droplr Cloud Architecture Evolution with AWS and ServerlessA Year of Droplr Cloud Architecture Evolution with AWS and Serverless
A Year of Droplr Cloud Architecture Evolution with AWS and Serverless
 
GlobalAzureBootCamp 2018
GlobalAzureBootCamp 2018GlobalAzureBootCamp 2018
GlobalAzureBootCamp 2018
 
DevOps in Droplr
DevOps in DroplrDevOps in Droplr
DevOps in Droplr
 

Kürzlich hochgeladen

W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension AidPhilip Schwarz
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 
How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...software pro Development
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsJhone kinadey
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplatePresentation.STUDIO
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Steffen Staab
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerThousandEyes
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfVishalKumarJha10
 

Kürzlich hochgeladen (20)

W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
 

Infrastructure as Code 삽질기