2016/10/03 KDLインフラ勉強会 AWS勉強会#2
AWSΛGUIͰૢ࡞͢Δͷதֶੜ·ͰͩΑͶʙʂਆށσδλϧɾϥϘᖛɹਅҰਆށσδλϧɾϥϘ ΠϯϑϥษڧձAWSษڧձ #2
View Slide
ͯ͞ɾɾɾ·ͣॳΊʹͰ͕͢ɺ
օ͞ΜɺAWSϦιʔεΛίʔυͰཧͰ͖ͯ·͔͢ʁ
͑ʁ·ͩϚωʔδϝϯτίϯιʔϧʂʁ
Ϛωʛδϝϯτίϯιʛϧ⁉︎GUIத
ܾͯ͠ɺࠓ·ͰͷൃදΛdisΓ͍ͨΘ͚Ͱ͍͟͝·ͤΜ(ʀ´Дʆ)
ͱ͍͏Θ͚ͰɺࠓAWSΛίʔυͰૢ࡞ɾཧ͢Δ
ͻ͍ͯࠓCLI(Command Line Interface)ʹ͍͓͍ͭͯͨ͠͠Ͱ͢ɻ
୭Ͱ͔͢ʁ{ɹɹ“Myself”:{ɹɹɹɹ“Name”: “Shinichi Hama (ᖛɹਅҰ)”,ɹɹɹɹ“BelongTo”: “Kobe Digital Labo Inc. WEB Section(גࣜձࣾਆށσδλϧϥϘ ιϦϡʔγϣϯຊ෦ WEBηΫγϣϯ)”,ɹɹɹɹ“Role”: “Infrastructure Engineer (ΠϯϑϥΤϯδχΞ)”,ɹɹɹɹ“LikeAWSService”:[ɹɹɹɹɹɹ{ɹɹɹɹɹɹɹɹ“AWS Service”: “Amazon S3”,ɹɹɹɹɹɹɹɹ“AWS Service”: “AWS IAM”ɹɹɹɹɹɹ}ɹɹɹɹ],ɹɹɹɹ“Histrory”: [ɹɹɹɹɹɹ{ɹɹɹɹɹɹɹɹ"TheNumberOfYearsWorked": 3(৽ଔೖࣾࡾͰ͢ɻ),ɹɹɹɹɹɹɹɹ”RoutineWork”: "E-Commerce Site developments and SysOps work(ECαΠτͷ։ൃɺӡ༻อकΛͯ͠·͢)"ɹɹɹɹɹɹ}ɹɹɹɹ],ɹɹ}}[hama@Macbbok] ~% aws-shellaws> kdl describe-presenter
ͬͱຊͰ͢ɻ
։ൃݱͷΠϯϑϥ୲ͷΈͦͦΠϯϑϥͰ͖Δਓ͕ؒগͳ͍ɻ
։ൃݱͷΠϯϑϥ୲ͷΈ͍͍ͩͨಉ͡࡞ۀͷ܁Γฦ͠৽ָͯͦ͘͠͠͏ͳҊ݅ͱ͔֎͞ΕΔ orz• ͖Δɻ• ϛεΔɻ• ౖΒΕΔɻ• ධՁ͕Լ͕Δɻ͍͔ͯɺͦͦ͏·͘Ͱ͖ͯධՁ͞Εͳ͍…ΠϯϑϥՔಇͯͯͨ͠Γલɺࢭ·ΔͱධՁ͕͕͞Δɻ
ཧෆਚͩʂʂʂʂʢٽʣ
։ൃݱͷΠϯϑϥ୲ͷΈ• AWSΛͬͯͯҰॹɻGUIͰѻͬͯΔݶΓɺखॱͱ͍͏ྨΛ͠ʹ͘͘ɺޙͰ͖ͣɺͣͬͱਓґଘͷ··ɻ• ಉ͡࡞ۀʹ͔͚࣌ؒͨ͘ͳ͍ɻϛεΓͨ͘ͳ͍ɻ• Πϯϑϥ୲ͩͬͯɺશʹ٬؍Խ͠ɺཧղͯ͠Δ࡞ۀ͘Β͍ࣗಈԽ͍ͨ͠ʂʂʂʂ
ࣗಈԽʹΑΔ҆ఆԽɾܧଓԽΛࢦ͢ʂ
ίʔυͰAWSΛѻ͏͜ͱͰશͯղܾʂʂʂ
ࠓ͢͜ͱɾ͞ͳ͍͜ͱ•͢͜ͱʢΞδΣϯμʣ1.AWSͷྑ͍ͳʔͬͯࢥ͏ͱ͜Ζ2.AWS-CLIʹ͍ͭͯ3.Infrastructure as code4.CLIҎ֎ʹ(CloudFormation,CatalogService)•͞ͳ͍͜ͱ•CloudFormationͷৄࡉͳ͍ํͱ͔ɺࡉ͔͍αʔϏεͷઆ໌
AWSͷྑ͍͍ͳʔͬͯࢥ͏ͱ͜Ζ৭ʑ͋Δ͚ͲɺͣΓɺ“ɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹ ”ͩͱࢥ͍·͢ɻϚωʔδϝϯτίϯιʔϧͰͰ͖Δ͜ͱͷ΄΅શͯͷૢ࡞͕APIͰఏڙ͞Ε͓ͯΓɺCLIɺSDKʹΑΔ֤ݴޠͰAWSϦιʔεΛѻ͏͜ͱ͕Ͱ͖Δ͜ͱ
AWS-CLI͍·͠ΐ͏ʂ
CLI͕ͳ͍ͱ͖ʂ͜Μͳͷͷखॱॻ͕͍Δͬͯͳͬͨʹ͏ʂʂ͑ɺͪΖΜઃܭॻ͍Γ·͢Αʁ
CLI͕͋Δͱ͖ʂ[hama@Macbbok] ~% aws ec2 run-instances --image-id ami-374db956 --count 1 --instance-type t2.micro --key-namehama_test_id_rsa --security-group-ids sg-××××××× --subnet-id subnet-××××××× --associate-public-ip-address | jq .{"OwnerId": "××××××××××","ReservationId": "r-××××××××××××","Groups": [],"Instances": [{"Monitoring": {"State": "disabled"},"PublicDnsName": "","RootDeviceType": "ebs","State": {"Code": 0,"Name": "pending"},"EbsOptimized": false,"LaunchTime": "2016-10-02T17:16:34.000Z","PrivateIpAddress": "10.0.4.101","ProductCodes": [],"VpcId": "vpc-××××××××","StateTransitionReason": "","InstanceId": "i-×××××××××××××××××","ImageId": "ami-374db956","PrivateDnsName": "ip-10-0-4-101.ap-northeast-1.compute.internal","KeyName": "hama_test_id_rsa",ɾɾɾʙҎԼলུʙ͜Μ͚ͩͰ͢ɻͦͯ͠CLIJSONΛಡΈࠐΜͰ࣮ߦͰ͖ΔͷͰɺͦͷjsonΛ͓͚ͯ͠ɺͦΕ͕ઃܭॻʹͳΓ·͢ɻจࣈ௨ΓɺίʔυͰཧͰ͖Δɻ
AWS-CLIΛ͓͏
AWS-CLIΛ͓͏•for MAC(or for Linux)•PIPͷΠϯετʔϧ$ sudo easy_install pip (MACͷ࣌)•aws-cliͷΠϯετʔϧ$ sudo pip install awscli•for Windowsϒϥβ͔Βμϯϩʔυͨ͠Β↓Έ͍ͨͳΠϯετʔϥʔ͕μϯϩʔυ͞ΕΔͷͰɹ͋ͱྲྀΕʹΛ͍ͤͯͩ͘͞ʢgg͍ͬͯͩ͘͞ɻʣ
$ aws configureAWS access key ID [**ABCD]:AWS secret access key [****************EFGH]:Default region name [ap-northeast-1]:Default output format [None]:
σϞ
aws-cliΛ͏্Ͱͷิɾҙ•CLIʹݶΒͣͰ͕͢ɺඞཁҎ্ʹIAMϢʔβʹݖݶΛ༩͑ͳ͍Α͏ʹ͠·͠ΐ͏ɻ•ϩʔΧϧ͔Β࣮ߦ͢Δࡍɺaws-configureͰೝূใΛอ࣋ͤ͟͞ΔΛಘ·ͤΜ͕ɺEC2ͷαʔό্͔ΒCLIͰawsϦιʔεΛૢ࡞͢ΔࡍɺIAMϩʔϧΛEC2ʹ༩͢Δɻ• جຊ̍linerͰͷCLIͷར༻ආ͚·͠ΐ͏ɻΉ͠ΖjsonΛಡ·ͤΔΑ͏ͳCLIͷ͍ํΛ͍ͯͩ͘͠͞ɻ
aws-shellΛͬͯΈΑ͏• aws-cliศར͚ͩͲɺͦͷ໘ɺଟػೳա͗ͯαϒίϚϯυ໊Φϓγϣϯ໊ɺΦϓγϣϯͷ͍ํΛ֮͑Δͷ͕େมɻ• ͦΕͳΒGUIͰ͍͍͔ͳʔ• ͦΕ͡Ό͍ͭ·Ͱͨͬͯதֶੜͷ··Ͱ͢ʂ• ࿅श͠·͠ΐ͏ʂͦΜͳ͋ͳͨʹɺaws-shellʂʂ
aws-shellΛͬͯΈΑ͏•αδΣετʗΦʔτίϯϓϦʔτ•αϒίϚϯυ•Φϓγϣϯ•ΦϓγϣϯʹԠͨ͡•AWSϦιʔε•ϑΝδʔݕࡧ•ϔϧϓදࣔ•γΣϧίϚϯυ•ϓϩϑΝΠϧαϙʔτ•ཤྺཧҎԼͷػೳʹରԠ
aws-shellΛͬͯΈΑ͏Πϯετʔϧ$ pip install aws-shellͷΈʂ
σϞ̎
jqͷεεϝ• ࠷ऴతʹCLI୯ମͰ͏ͷͰͳ͘ɺCLIͷ݁ՌΛ͞ΒʹͬͯɺॲཧΛߦ͏Α͏ͳεΫϦϓτʹΑΔ࡞ۀͷࣗಈԽ͕ਐΉ͜ͱʹͳΔɻ• jqίϚϯυͱJSON͔Β؆୯ʹΛൈ͖ग़ͨ͠Γɺूܭͨ͠Γɺܗͯ͠දࣔͨ͠ΓͰ͖ΔJSON༻ͷgrepͱ͔awkΈ͍ͨͳίϚϯυɻ• awsίϚϯυͷϨεϙϯεΛjsonܗࣜʹ͓ͯ͘͠ͱɺ͜ͷjqͱ૬ੑ͕ඇৗʹΑ͘ɺجຊతʹηοτͰΘΕͯ·͢ɻ
jqͷεεϝ•୯७ͳ͍ํάά͍ͬͯͨͩ͘ͱͯ͠ɺҎԼͷΑ͏ͳ͍ํͰͬͨΓ͠·͢ɻ1.Value͚ͩදࣔ$ aws ec2 describe-instances | jq '.Reservations[].Instances[].Tags[].Value'"app.example.com""db.example.com""elasticsearch.example.com""example.com"2.ϓϥΠϕʔτIPΞυϨεͱTagʢName)Λλϒ۠ΓͰදࣔ$ aws ec2 describe-instances | jq -r '.Reservations[].Instances[] | .PrivateIpAddress + "\t"+ .Tags[].Value'192.168.1.125 app.example.com192.168.1.14 db.example.com192.168.1.250 elasticsearch.example.com192.168.1.230 example.com
CLIҎ֎ͷαʔϏε•CloudFormation•͕ࣗ࡞Γ͍ͨڥΛఆٛͨ͠ϑΝΠϧ(template)Λ࡞ͬͯɺͦͷఆٛॻΛಡΈࠐΜͰࣗಈͰڥΛ࡞ͬͯ͘ΕΔαʔϏεɻ•AWSͷϦιʔε୯ҐͰͳ͘ɺVPCͷωοτϫʔΫͱؚ͔Ίͨશͯͷڥ୯ҐͰͷΠϯϑϥߏஙͷࣗಈԽΛߦ͏ɻCLIͰͷཧʹ͑͞׳Ε͖ͯͨΒૣʑͱͬͪ͜ʹҠΓ·͠ΐ͏ɻ
cloudFormationΠϝʔδ
Infrastructure as code•AWSͱ͍͏ΫϥυαʔϏεΛϑϧʹ׆༻͢Δ͜ͱͰɺInfrastructure as codeΛ࣮ݱ͢Δɻ•Πϯϑϥͦͷଞͷιʔείʔυͱִ͚ͯͳ͘ɺཧɾӡ༻Ͱ͖Δ͕࣌དྷͨɻ•ΠϯϑϥΤϯδχΞͷઐੑԼ͕Δͱࢥ͏ɻ•ϑϧελοΫͳΤϯδχΞΛࢦ͢ͷ͔ɺΫϥυαʔϏεΛᘳʹ͍͜ͳ͢ʰεʔύʔΠϯϑϥΤϯδχΞʱʹͳΔͷ͔ͷબͷ͍ۙͱײ͡Δɻ
·ͱΊ•AWS-CLIΛͱΓ͋͑ͣͬͯΈΔͱ͜Ζ͔Β࢝Ί·͠ΐ͏ɻɹ→͑Θ͔Δ͜ͱͷํ͕ଟ͍ɹˠ͋ͱ৭ʑۀతʹศརɻ•infrastructure as codeʹΑΔࣗಈԽखஈͰ͋ͬͯɺతͰͳ͍ɻ→ࣗͨͪͷ͍ͬͯΔ͜ͱͷ҆ఆԽɾܧଓԽΛతͱͯ͠ɹࣗಈԽͱ͍͏खஈͰɺߏԽ͞ΕͨۀͷҰ෦ΛࣗಈԽ͢Δɻ• શͯͷਓ͕AWSΛCLIͰҙຯΒͣʹѻ͏ͷɺ۪ࡦɻ• ͰɺΠϯϑϥΛAWSΛઐతʹΖ͏ͱ͍ͯ͠Δզʑ͘Β͍ͤΊͯCLIͰѻ͑ΔΑ͏ʹͳ͓ͬͯ͘͜ͱ͕ɺॾʑ͍ΖΜͳ໘Ͱʹͨͪ·͢ɻ
ALL You Need Is Code !!