않5FSSBGPSN솒핓믾,PSFB%FW0QT.FFUVQ[email protected]않푾슪핆않큲얻슪옪핺헣픦믾
View Slide
˖ 슪옪컪픦핆않큲얻˖ 않5FSSBGPSN콚맪퐎)$-믾˖ "84읺콚큲읊않픊옪핺헣픦˖ 핆않큲얻픦짪헒뫊않폲쁦핂퍊믾훊헪
않ˑ8SJUF 1MBO BOE$SFBUF*OGSBTUSVDUVSFBT$PEF˒ˑ핆않큲얻읊슪옪컪핟컿 몒 캫컿쁢솒묺˒5FSSBGPSN
슪옪컪픦핆않큲얻핆않큲얻읊샎쁢빦픦얺삲핒*OGSBTUSVDUVSFBT$PEF *B$
핆않큲얻픦헣픦˖ 핆않큲얻쁢읺콚큲슲픦힟˖ 줊읺헏몋뻲풚핳찒 컪쩒슿˖ 않푾슪많캏핞풞 잲삖힎슪컪찒큲슿˖ 슪옪컪픦핆않큲얻*B$솒묺˖ 읺콚큲읊슪옪뫎읺쁢솒묺
슪옪컪픦핆않큲얻슪옪읺콚큲읊뫎읺쁢솒묺슲˖ 컪쩒큲잋4FSWFS4DSJQUJOH˖ 컲헣뫎읺$POHVSBUJPO.BOBHFNFOU˖ 읺콚큲컮펆솒묺3FTPVSDF.BOBHFNFOU
ҙܻ ߑߨ ࢚ࢸ ҙܻConfiguration Management٘ ࢲߡܻࣗझ ࢶ بҳ Resource Management٘ ܻࣗझ
컲헣뫎읺$POHVSBUJPO.BOBHFNFOU˖ 켾$IFG 1VQQFU 팲컪쯢"OTJCMF슿˖ %4-슪옪컪쩒픦캏읊헣픦몮뫎읺˖ 컪쩒졓옇펂쫂삲캏쇦펂핖픚˖ 삲쿦픦컪쩒퐎삲퍟몋픒힎풞˖ 퐒쪋힎쁢팘힎잚젿슿컿픒힎풞
핂빦폲퍊
ˑ ➙䎃ך剢חⰅ$IFG4PMP*OGSBTUSVDUVSFBT$PEFהְֲ劤剅ְկךせך$IFGךⰅ剅זךֽוծֿך؟ـة؎زٕכ$POHVSBUJPO.BOBHFNFOU5PPM 䧭盖椚خ٦ٕדזֻ1SPWJTJPOJOH'SBNFXPSL فٗؽآّصؚٝؿٖ٦يٙ٦ؙדזֻծכת"VUPNBUFE*OGSBTUSVDUVSF 荈⹛ׁ؎ٝؿٓדזֻծ*OGSBTUSVDUVSFBT$PEFח׃կ*OGSBTUSVDUVSFBT$PEF 뼒풢 핂빦폲퍊
ˑ 폺풢펞$IFG4PMP*OGSBTUSVDUVSFBT$PEF않쁢픒힟킃삖삲헪졷펞컪팚쿦핖슽핂$IFG핓줆컪핓삖삲힎잚핂픦쭎헪쁢$POHVSBUJPO.BOBHFNFOU5PPM솒팒삖몮 1SPWJTJPOJOH'SBNFXPSL솒팒삖몮 "VUPNBUFE*OGSBTUSVDUVSF솒팒삚*OGSBTUSVDUVSFBT$PEF옪헣킃삖삲*OGSBTUSVDUVSFBT$PEF 뼒풢 핂빦폲퍊
˖ 슪읊핟컿˖ 밑(JU헎핳콚옪졶슮쪎몋픒뫎읺˖ 밑쯚(JU)VC옪펓˖ 핂큖뫎읺˖ 읺큲퐎슪읺쮾˖ 힎콛헏핊짦헏핆콚풶펂맪짪
˖ 슪읊핟컿˖ 밑(JU헎핳콚옪졶슮쪎몋픒뫎읺˖ 밑쯚(JU)VC옪펓˖ 핂큖뫎읺˖ 읺큲퐎슪읺쮾˖ 힎콛헏핊짦헏핆 핆않큲얻맪짪
핆않큲얻많슪많쇦졂
࣓ ࣗ
Pull Request
ܻ࠭ ਃ
٘ ܻ࠭(ݭ)
࠽٘ Ѿҗ
ݠ
콚풶펂엊맪짪쿦핖삲
읺콚큲컮펆솒묺3FTPVSDF.BOBHFNFOU˖ 않5FSSBGPSN 않푾슪젢핂켦슿˖ %4-슪옪읺콚큲읊컮펆몮뫎읺˖ 훊옪않푾슪픦많캏쇪읺콚큲읊뫎읺˖ 슪많몵팒
ܻࣗझ ࢶ بҳࢸ ҙܻ
ܻࣗझ ࢶ بҳࢸ ҙܻࢲߡ ҙܻܻࣗझ ҙܻ
않5FSSBGPSN
˖ )BTIJ$PSQ펞컪잚슮폲콚큲핆않뫎읺솒묺˖ )$-읊칺푷핆않큲얻읊슪옪헣픦˖ 삲퍟옪짢핂섢읊힎풞˖ 잶슪않핆핆핂큲˖ 펢않핂흖컪찒큲헪뫃않5FSSBGPSN
)BTIJDPSQ
옪짢핂섢
핆핂큲$ terraform applyaws_instance.bastion: Creating...ami: "" => "ami-1eabd32"type: "" => "m4.large"...aws_instance.bastion: Creation complete (ID: bastion)Apply complete! 1 added, 0 changed, 0 destroyed.
픦홂컿4FDVSJUZ(SPVQOBNFQVCMJDJEDPNQVUFE*OTUBODF".*BNJFD[email protected]<>
)$-resource "aws_instance" "bastion" {ami = "${ var.ami_id }"instance_type = "${ var.type }"}
)$-뫊않믾)BTIJ$PSQ$POHVSBUJPO-BOHVBHF
˖ 킪)BTIJ$PSQ펞컪잚슮컲헣헒푷%4-˖ 컲$POTVM 않5FSSBGPSN펞컪힎풞˖ +40/뫊˖ 쪎쿦 혾멂줆 핆엖핂켦슿힎풞)$-뫊않믾)BTIJ$PSQ$POHVSBUJPO-BOHVBHF
)$-읺콚큲폖"84&$핆큲큲resource "aws_instance" "bastion" {ami = "${ var.ami_id }"instance_type = "${ var.type }"}
)$-읺콚큲resource "aws_instance" "bastion" {ami = "${ var.ami_id }"instance_type = "${ var.type }"}
)$-읺콚큲resource "aws_instance" "bastion" {ami = "${ var.ami_id }"instance_type = "${ var.type }"}쬲팒퐪
)$-읺콚큲resource "aws_instance" "bastion" {ami = "${ var.ami_id }"instance_type = "${ var.type }"}쬲팒퐪쬊
)$-읺콚큲resource "aws_instance" "bastion" {ami = "${ var.ami_id }"instance_type = "${ var.type }"}팓튷쬊 팓튷붘
)$-읺콚큲resource "aws_instance" "bastion" {ami = "${ var.ami_id }"instance_type = "${ var.type }"}쬲팒퐪 쬲팒퐪쬊팓튷쬊 팓튷붘
않풚옪푾5FSSBGPSN8PSLPX8SJUF 1MBO $SFBUF
8SJUFresource "aws_instance" "bastion" {ami = "${ var.ami_id }"instance_type = "${ var.type }"}instance.tf
8SJUFJOTUBODFUG "84҅[email protected]
1MBOJOTUBODFUG "84҅[email protected] [email protected]
1MBO$ terraform plan...+ aws_instance.bastionami: "ami-1eabd32"type: "m4.large"....Plan: 1 to add, 0 to change, 0 to destroy.
$SFBUFJOTUBODFUG "84҅[email protected] [email protected]
$SFBUFJOTUBODFUG UFSSBGPSNUGTUBUF[email protected] [email protected]
$SFBUF$ terraform applyaws_instance.bastion: Creating...ami: "" => "ami-1eabd32"type: "" => "m4.large"...aws_instance.bastion: Creation complete (ID: bastion)Apply complete! 1 added, 0 changed, 0 destroyed.
˖ 몒QMBO˖ 헏푷BQQMZ˖ 캏UGTUBUF푷펂
핆않큲얻뫎읺솒묺않핓줆퓇컪찒큲짾푷"84읺콚큲옪찒헎삫
"84읺콚큲읊않픊옪핺헣픦3FEFOJOH"84SFTPVSDFT
줂ڰ빦ږ캋힖픦묞
˖ 믎쯢옪믆˖ PVUTJEFS˖ BTCVCBN˖ KQ˖ OBDZPU캋힖뫊믾옫않픒삲욶몮핖쁢믎쯢옪믆
킪핟뼒풢킲헏픊옪않옪헫킪핟
˖ 않픒칺푷쁢숞많힎짷쩣˖ 캖옪잚슪쁢읺콚큲읊않픊옪핟컿˖ 풂폏훟핆않푾슪핞풞픒않슪옪핟컿˖ 솧핊핂읒픦욶찒않핂쯚얺읺˖ 않푾슪픦핞풞픒UG핊옪핒훊쁢솒묺않짛5FSSBGPSNJOH
˖ 않픒헏푷쁢숞많힎짷쩣˖ 캖옪잚슪쁢읺콚큲읊않픊옪핟컿˖ 풂폏훟핆않푾슪핞풞픒않슪옪핟컿˖ 솧핊핂읒픦욶찒않핂쯚얺읺˖ 않푾슪픦핞풞픒UG핊옪핒훊쁢솒묺않짛5FSSBGPSNJOH
˖ 않픎JNQPSU졓옇픒힎풞˖ 힎잚핂믾쁳픎핺캏잚픒UGTUBUF펞핒˖ UG핊픎캫컿쇦힎팘픚˖ UGTUBUF펞잚핞풞핂핖삲졂칻헪엲몮 퓒˖ 믾홂펞칺푷훟핆핆않많혆폲믾몮믾홂픦읺콚큲핒않픦JNQPSU졓옇펂
*NQPSU졓옇펂많퓒핂퓮JOTUBODFUG UGTUBUF[email protected]
˖ "84읺콚큲읊UGUGTUBUF옪핒힎풞˖ 읺콚큲핓쪒옪ퟆ옪핒˖ 졶슮읺콚큲핓픒힎풞힎쁢팘픚˖ 핒쇪멾뫊많퐒쪋힎쁢팘픚˖ 핒큲짝쿦핟펓픊옪쫂헣퍊˖ 픦홂뫎몒읊힎좉EUBOUFSSBGPSNJOH
$ terraforming vpcresource "aws_vpc" "default_vpc" {cidr_block = "10.1.0.0/24"enable_dns_hostnames = trueenable_dns_support = trueinstance_tenancy = "default"tags {"Name" = "default_vpc"}}
믾홂펞칺푷훟핆핆않읊5FSSBGPSN픊옪많혆폲믾ˋ0VUTJEFST%FW4UPSZ
˖ 푾컮않짛픊옪졶슮읺콚큲읊핒힒˖ 않픎읺콚큲맒픦픦홂뫎몒읊많쁳˖ "읺콚큲컮펆#펞컪"읺콚큲픦콛컿픒혾˖ 졶슮읺콚큲많벦핖픊졂홙멮삲˖ 빦픦먾샎옪헫먾샎킪핟
˖ 몒뫊헏푷핂뻖줂쁞엲힞˖ 졓옇펂빦펞쿦킻쭒˖ 읺콚큲빦컪찒큲쪒옪헏헖쭒읺퍊˖ 퐒쪋짷쩣픎펔픚헣
묺혾삲쿦픦않옪헫
UFSSBGPSN DPNNPO WQD JBN 옪헫묺혾UFSSBGPSNJOH픦핒짷킫펞싾않묺컿} ਬࢎೠ ܻࣗझٜਸ ٣۩ఠܻ ߹۽ ನ
˖ DPNNPO픎뫃퓮쇦쁢핞풞슲픒퓒훊옪헣읺˖ 뻲풚읺콚큲 *".칺푷핞짝믾쫆헣슿˖ 핒읺콚큲슲픎컪찒큲쪒옪쭒읺힒˖ 삲훟71$힎풞ˋ맪짪 큲핂힎 옪섣켦˖ 픚펞쁢컪찒큲슲픒훟쫃컪컮펆˖ 컪찒큲쪒옪졶슖힒맪컮
UFSSBGPSN DPNNPO TFSWJDFT [email protected] [email protected] 묺혾맪컮컪찒큲삶퓒옪쭒읺} ࢲ࠺झ ߹ ۽ં۽ ҙܻ
UFSSBGPSN DPNNPO TFSWJDFT NPEVMFT [email protected] [email protected]묺혾맪컮졶슖옪컪찒큲읺콚큲쭒읺
옪헫맒펞쁢읺콚큲읊힏헟뫃퓮쿦펔픚옪헫쪒읺콚큲뫃퓮
옪헫쪒읺콚큲뫃퓮71$ *".3%4 " # $Common Services
71$ *".3%4 " # $Common ServicesA ۽ંীࢲ ҕਬਗ ࢚కܳ ଵઑ옪헫쪒읺콚큲뫃퓮
*". " # $ServicesA ۽ંীࢲ ҕਬਗ ࢚కܳ ଵઑ옪헫쪒읺콚큲뫃퓮PVUQVU
5FSSBGPSN맒펞읺콚큲뫃퓮ˋ0VUTJEFST%FW4UPSZ
뫎읺많쁳핆않큲얻않픒솒핓핂퓮
˖ 않픒솒핓믾잚솒˖ 슪읊쪎몋칺헏많쁳ˋ뿒많펆헪퐪˖ 핆않옲짿짝쪎몋펞샎쭎샂핂헏펂힞˖ 몮솒핟펓˖ *".읺콚큲옪칺푷핞뫎읺짝뭚헣읺˖ 믆읊칺푷젢섾핂믾옫뫎읺많쁳핆않큲얻않픒솒핓핂퓮
*".읺콚큲*EFOUJUZBOE"DDFTT.BOBHFNFOU
졶슮맪짪핞펞멚쭎펺쇪큖펂슪짊뭚
펂싢컪칺푷쁢힎솒팚쿦펔쁢펻헣칺푷핞
칺칺앚픦칺푷핞뭚픊옪핟솧훟핆컪찒큲
*".힎폳
˖ 빦뫎읺믾펂엲풂읺콚큲˖ 뫎읺헣핂펔쁢몋푾펗잫핂쇦펂쩒잊˖ 뭚픒핦좉쿦헣졂컪찒큲핳팮옪핂펂힞˖ 않픊옪졶슮*".읺콚큲읊슪˖ 칺푷힎팘쁢졶슮헣뫊옲픎칻헪˖ 뫎읺헣픒헣몮칺푷핞펞샎뭚혾헣*".읺콚큲*EFOUJUZBOE"DDFTT.BOBHFNFOU
˖ 핆않펞샎쪎몋픎않잚픒칺푷˖ *".칺푷핞뭚슲픎헞힒헏픊옪콚˖ 헞힒헏픊옪퓇콢픒칺푷힎팘솒옫뭚퓮˖ 쭎슫핂멚퓇콢옪쪎몋뺂푷픎핂큖옪믾옫˖ 핂큖옪믾옫쇪뺂푷픎펞슪퓇콢칺푷콚
˖ "84펞컪쁢읺콚큲펞샎믆읊힎풞˖ 펂싢컪빦읺콚큲펞샎헣쫂핆많쁳˖ 퓇콢핂빦큲잋펞컪믆읊푷많쁳˖ 믆핟컿뮪픒뽊픦짝헣읺˖ 쿦믆퐎컮믆읊쭒읺˖ 쿦믆쁢짦슪킪빶밎읺콚큲믆읺콚큲펞힏헟믾옫쇦쁢젢섾핂
쿦˖ /BNF˖ 5FSSBGPSN.BOBHFE˖ 5FSSBGPSN1BUI˖ 71$˖ $SFBUPS퐃켦˖ 1SPKFDU˖ .BJOUBJOFS˖ 5FBN밓뮪
resource "aws_s3_bucket" "awesome_bucket" {bucket = "awsome_bucket"acl = "private"tags {"Name" = "Awesome Bucket""TerraformManaged" = "true""TerraformRepository" = "tech/infrastructure""TerraformPath" = "/terraform/common/s3/s3_bucket.tf""Organization" = "tech""Creator" = "asbubam""Deployer" = "asbubam""IsStaticHosting" = "false""IsCloudFrontOrigin" = "false"}}
˖ 졶슮읺콚큲핓핂믆읊힎풞힎쁢팘픚˖ 핊뫎헏핆뮪픒잚슲믾많펂엲풚힞˖ 읺콚큲핓펞싾않칺푷많쁳줆핞많삲읒˖ 핓펞싾않컪뫒많칺푷쭖많쁳몋푾많핖픚˖ 퓇콢펞컪믆옪잏핂쇦쁢몋푾많슪줒밓픦헣"84읺콚큲밓픦줆헪헞
˖ 읺졶큲핂읊칺푷캏UGTUBUF읊뫃퓮˖ 콚풶펂맪짪짷쩣픒믆샎옪칺푷˖ 밑쯚읊칺푷슪뫃퓮˖ 읺큲퐎슪읺쮾˖ 힎콛헏솒묺읊칺푷찚슪펓
˖ 옪캏픦캏쁢뫃퓮쇦힎팘픚˖ 캏많삲읂졂몒뫊헏푷픦멾뫊많삺않힞˖ 맏맪짪핞많핟펓엲졂캏읊뫃퓮퍊˖ 4 $POTVM FUDE슿삲퍟짿펢슪힎풞˖ 4읊칺푷쁢몋푾삲핂빦졶%#읊앋힎풞읺졶큲핂
terraform {required_version = "= 0.10.7"backend "s3" {bucket = "terraform-state"key = "projects/project/terraform.tfstate"region = "ap-northeast-1"encrypt = truekms_key_id = "alias/terraform_state"dynamodb_table = "terraform-lock"}}
않읺졶큲핂짿펢슪옪"844칺푷믾ˋ+1#MPH
˖ 졶슮핆않큲얻쿦헣픎슪옪핂욶펂힞˖ 쪎몋핂푢삲졂푾컮핂큖옪헪팖짝뽊픦˖ 젢핆헎핳콚픦슪쪎몋픎읺큲옪힒˖ 읺큲쁢43&픦읺쮾읊뫊퍊˖ 젆힎헏푷픎맪짪핞많힏헟헏푷않믾짦핆않큲얻뫎읺뮪밑쯚퐎읺큲믾짦펓
콚풶펂맪짪펞컪쁢뻖줂핞펾큲얺풂짷쩣
˖ 않옪헫쿦헣쌚잖삲$*찚슪˖ QMBO픒킲컪멾뫊읊팚엲훚˖ GNU읊킲컪슪큲핊픒맣헪˖ 슪읺쮾읺큲젆힎˖ BQQMZ읊킲컪쿦헣칺픒짦폏힎콛헏픒핞솧줂펕픒핞솧쿦핖픒밚
핞솧픦헣몒픎헏푷픦컿뫃펺쭎읊쫂핳힎좉
˖ 몒픎헏푷픦컿뫃펺쭎읊쫂핳힎좉˖ 몒픎삶쿪뽊읺헏핆멎흫잚훚˖ 젆힎펞헏푷핂킲졂뮎픎캏핂짪캫˖ 킲킪샎픟믾퓒킪빦읺폲많푢˖ 옪섣켦펞핞솧픊옪헏푷쌚픦퓒컿핞솧픦헣
˖ 않옪헫쿦헣쌚잖삲$*읊킲˖ QMBO픒킲컪멾뫊읊팚엲훚˖ GNU읊킲컪슪큲핊픒맣헪˖ 슪읺쮾읺큲읺쮾˖ BQQMZ읊킲컪쿦헣칺픒"84펞짦폏핞솧
$JSDMF$*펞컪5FSSBGPSNGNU쿦믾ˋBTCVCBNTCMPH
않솒핓뼒
526 ழ9 ஶܻ࠭ఠHCL 97%13
삶헞뫊핳헞믆읺몮짆앦
˖ 믾솒핓픦펂엲풎˖ 읺콚큲엖얾큲읊핃믾펂엲풎˖ 핞솧많캫맏쫂삲펂엲풎삶헞싿펔펖힎잚펃힎옪턶쫂졂
˖ 슪읊믾짦픊옪펓짝핞솧많쁳˖ 콚풶펂맪짪펞칺푷섦믾쩣슲픒헏푷많쁳˖ 슪읊핺칺푷쿦핖몮삲읆맪짪핞픦슪펞컪킃많쁳˖ 핆않큲얻쪎몋칺핂핞솧헏픊옪믾옫짝뫃퓮쇶˖ 뿒많펂썲핂퓮옪잚슲펖쁢힎헏많쁳˖ 옲짿핂빦핆않쪎몋펞쭎샂핂펔펂힞˖ 팒펞샎뽆푾퐎앧큲탡펺맞핳헞
˖ 슪읊믾짦픊옪펓짝핞솧많쁳˖ 콚풶펂맪짪펞칺푷섦믾쩣슲픒헏푷많쁳˖ 슪읊핺칺푷쿦핖몮삲읆맪짪핞픦슪펞컪킃많쁳˖ 핆않큲얻쪎몋칺핂핞솧헏픊옪믾옫짝뫃퓮쇶˖ 뿒많펂썲핂퓮옪잚슲펖쁢힎헏많쁳˖ 옲짿핂빦핆않쪎몋펞쭎샂핂펔펂힞˖ 팒펞샎뽆푾퐎엗큲많탡펺빦맞핳헞
˖ 쿦헣칺펞샎핆않킪쥺엖핂켦짝큲˖ 퓇콢픒칺푷쪎몋믖힎헣헏푷˖ 옪헫묺혾읊팖헣헏픊옪맪컮˖ 컪찒큲쪒졶슖퐎핺칺푷헣˖ 핳팮펞샎샎찒짝읺콚큲많캫컿킪쥺엖핂켦˖ 맪짪핞않졂뿒묺빦펺쿦핖솒옫퓮솒짆앦맪컮퍊헞슲
홙픎캋힖핂펖삲
핆않큲얻픦짪헒뫊않5IFGVUVSFPGJOGSBTUSVDUVSFPODMPVE
˖ 핂뻖퐎핂뻖믾짦폲큲엖핂켦˖ 쭖쪎핆않큲얻/P0QT˖ 슪옪컪픦핆않큲얻˖ 않졶슖뫊핆않캏핆않큲얻픦짪헒뫊않5IFGVUVSFPGJOGSBTUSVDUVSFPODMPVE
않졶슖뫊핆않캏핆않읊캏쁢멚헣잞옪많쁳밚
˖ 않푾슪읊믾짦픊옪졶슮읺콚큲많많캏˖ *B$솒묺슲픒컪컲몒많몵묺핂쇶˖ 않옪헫쁢않푾슪팒컲몒컪˖ 졶슖픒칺푷헏헖삶퓒옪캏않졶슖뫊핆않캏
./modules/module_v1resource "circle" "" {}resource "square" "" {}resource "diamond" "" {}resource "pentagon" "" {}
module "app1" {source = "module_v1"p_color= "blue"s_count = 2}module "app2" {source = "module_v1"p_color = "purple"s_count = 3}
module "app1" {source = "module_v2"p_color= "blue"s_count = 2}module "app2" {source = "module_v2"p_color = "red"s_count = 3}
않졶슖뫊핆않캏않졶슖픎팒캏않쁢캖옪풂솒헒
˖ *OGSBTUSVDUVSFBT$PEF 졶읺큲˖ $IFG4PMP핓줆 핂빦폲퍊˖ 5FSSBGPSN6QBOE3VOOJOH :FWHFOJZ#SJLNBO˖ 핆않큲얻뫎읺솒묺않핓줆 OBDZPU˖ 5FSSBGPSN .PP:FPM1SFTDPUU-FF˖ )BTIJ$PSQ픦솒 0VUTJEFS삦쩖펻˖ 5FSSBGPSN칺푷 0VUTJEFS삦쩖펻벦핋픊졂홙픎핞욚
맞칺삖삲