Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

AWS CLI Conference 2016

AWS CLI Conference 2016 in 18th Julyの資料です

  • Identifiez-vous pour voir les commentaires

AWS CLI Conference 2016

  1. 1. AWS  CLI  CONFERENCE  2016 Amazon  Web  Services  Japan Partner  Solutions  Architect -­‐ Tomoaki Sakatoku -­‐ Takashi  Koyanagawa
  2. 2. sakatoku$  aws-­‐shell aws>  aws sa describe-­‐presenter { “Myself”:  [ { “Name”:  “Tomoaki Sakatoku (酒徳 知明)”, “Role”:  “Partner  Solutions  Architect  (パートナー ソリューション アーキテクト)”, “AWS  Service  SME”:  [ { “AWS  Service”:  “Amazon  CloudWatch  (運⽤用監視)”, “AWS  Service”:  “AWS  CloudTrail  (コンプライアンス)”, “AWS  Service”:  “AWS  Config  (構成管理理)” }, “Book”:  “Amazon  Web  Services  企業導⼊入ガイドブック”, “URL”:    “http://amzn.to/2a2UTNV”, “Family”:  [ { “Wife(妻)”:  “1”, “Kids(⼦子供)”:  “2” }
  3. 3. $ EVERYONE  ❤ CLI
  4. 4. $  git  show  1.0.0 tag  1.0.0 Tagger:  James  Saryerwinnie  <js@jamesls.com> Date:      Mon  Sep  2  18:38:51  2013  -­‐0700 Tagging  1.0.0 release. commit  7fbdac0b19ea9dcc0380242068af20ef425ac5c3 Merge:  6f76721  469bab6 Author:  James  Saryerwinnie  <js@jamesls.com> Date:      Mon  Sep  2  18:38:51  2013  -­‐0700 Merge  branch  'release-­‐1.0.0' *  release-­‐1.0.0: Bumping  version  to  1.0.0
  5. 5. aws  configure
  6. 6. aws  configure   AWS  access  key  ID  [**ABCD]:   AWS  secret  access  key  [****************EFGH]:   Default  region  name  [us-­‐west-­‐2]:   Default  output  format  [None]:  
  7. 7. $  aws  ec2  describe-­‐instances Service   (command) Operation (Subcommand)
  8. 8. json text PLACES    Seattle        WA PLACES    Las  Vegas    NV table -­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐ |          SomeOperationName |   +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+   ||                  Places   ||   |+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+|   ||  City              |  State      ||   |+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+|   ||  Seattle        |  WA            ||   ||  Las  Vegas    |  NV            ||   |+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+|   { "Places":  [   {   "City":  "Seattle",   "State":  "WA"   },   {   "City":  "Las  Vegas", "State":  "NV"   }   ]   }  
  9. 9. aws  configure  get  region   $  aws configure  get  region ap-­‐northeast-­‐1
  10. 10. Query Waiters Others
  11. 11. Query
  12. 12. aws ec2 ... parse params HTTP request parse response display response format response Retry Pagination
  13. 13. aws ec2 ... parse params HTTP request parse response display response format response Pagination parse response parse response body apply --query
  14. 14. <ListUsersResponse  xmlns="..."> <ListUsersResult> <Users> <member> <UserId>userid</UserId> <Path>/</Path> <UserName>sakatoku</UserName> <Arn>arn:aws:iam::..:user/sakatoku</Arn> <CreateDate>2013-­‐03-­‐09T23:36:32Z</CreateDate> </member> <Users> </ListUsersResult> <ListUsersResponse>
  15. 15. { "Users":  [ { "Arn":   "arn:aws:iam::...:user/sakatoku", "UserId":  "userid", "CreateDate":  "2013-­‐03-­‐09T23:36:32Z", "Path":  "/", "UserName":  "sakatoku" } ] }
  16. 16. { "Users":  [ { "Arn":   "arn:aws:iam::...:user/sakatoku", "UserId":  "userid", "CreateDate":  "2013-­‐03-­‐09T23:36:32Z", "Path":  "/", "UserName":  "sakatoku" } ] } -­‐-­‐query  Users[*].[UserName,Path,UserId]
  17. 17. [ [ "sakatoku",  "/",  "id" ], ] -­‐-­‐query  Users[*].[UserName,Path,UserId]
  18. 18. http://jmespath.org A  Query  Language  for  JSON
  19. 19. Waiters
  20. 20. Amazon  EC2  instance  state  transitions pending running shutting-down terminated stopping stoppedrebooting Stop Terminate Reboot Terminate Start
  21. 21. #!/bin/bash instance_id=$(aws  ec2  run-­‐instances  -­‐-­‐image-­‐id  ami-­‐12345 ¥ -­‐-­‐query  Instances[].InstanceId ¥ -­‐-­‐output  text) instance_state=$(aws  ec2  describe-­‐instances  -­‐-­‐instance-­‐ids $instance_id  ¥ -­‐-­‐query 'Reservations[].Instances[].State.Name') while [ "$instance_state" != "running" ] do sleep  1 instance_state=$(aws ec2  describe-­‐instances -­‐-­‐instance-­‐ids $instance_id ¥ -­‐-­‐query 'Reservations[].Instances[].State.Name') done
  22. 22. #!/bin/bash instance_id=$(aws  ec2  run-­‐instances  -­‐-­‐image-­‐id  ami-­‐12345 ¥ -­‐-­‐query  Instances[].InstanceId ¥ -­‐-­‐output  text) instance_state=$(aws  ec2  describe-­‐instances  -­‐-­‐instance-­‐ids $instance_id  ¥ -­‐-­‐query 'Reservations[].Instances[].State.Name') while [ "$instance_state" != "running" ] do sleep  1 instance_state=$(aws ec2  describe-­‐instances -­‐-­‐instance-­‐ids $instance_id ¥ -­‐-­‐query 'Reservations[].Instances[].State.Name') done
  23. 23. #!/bin/bash instance_id=$(aws  ec2  run-­‐instances  -­‐-­‐image-­‐id  ami-­‐12345 ¥ -­‐-­‐query  Instances[].InstanceId ¥ -­‐-­‐output  text) instance_state=$(aws  ec2  describe-­‐instances  -­‐-­‐instance-­‐ids $instance_id  ¥ -­‐-­‐query 'Reservations[].Instances[].State.Name') while [ "$instance_state" != "running" ] do sleep  1 instance_state=$(aws ec2  describe-­‐instances -­‐-­‐instance-­‐ids $instance_id ¥ -­‐-­‐query 'Reservations[].Instances[].State.Name') done
  24. 24. #!/bin/bash instance_id=$(aws  ec2  run-­‐instances  -­‐-­‐image-­‐id  ami-­‐12345 ¥ -­‐-­‐query  Instances[].InstanceId ¥ -­‐-­‐output  text) instance_state=$(aws  ec2  describe-­‐instances  -­‐-­‐instance-­‐ids $instance_id  ¥ -­‐-­‐query 'Reservations[].Instances[].State.Name') while [ "$instance_state" != "running" ] do sleep  1 instance_state=$(aws ec2  describe-­‐instances -­‐-­‐instance-­‐ids $instance_id ¥ -­‐-­‐query 'Reservations[].Instances[].State.Name') done
  25. 25. #!/bin/bash instance_id=$(aws  ec2  run-­‐instances  -­‐-­‐image-­‐id  ami-­‐12345 ¥ -­‐-­‐query  Instances[].InstanceId ¥ -­‐-­‐output  text) instance_state=$(aws  ec2  describe-­‐instances  -­‐-­‐instance-­‐ids $instance_id  ¥ -­‐-­‐query 'Reservations[].Instances[].State.Name') while [ "$instance_state" != "running" ] do sleep  1 instance_state=$(aws ec2  describe-­‐instances -­‐-­‐instance-­‐ids $instance_id ¥ -­‐-­‐query 'Reservations[].Instances[].State.Name') done
  26. 26. ec2-­instance-­running.sh #!/bin/bash instance_id=$(aws  ec2  run-­‐instances  -­‐-­‐image-­‐id  ami-­‐12345  ¥ -­‐-­‐query  Instances[].InstanceId  ¥ -­‐-­‐output  text) instance_state=$(aws  ec2  describe-­‐instances  -­‐-­‐instance-­‐ids  $instance_id ¥ -­‐-­‐query  'Reservations[].Instances[].State.Name') while [ "$instance_state" != "running" ] do sleep  1 instance_state=$(aws ec2  describe-­‐instances -­‐-­‐instance-­‐ids $instance_id ¥ -­‐-­‐query  'Reservations[].Instances[].State.Name') done
  27. 27. instance_id=$(aws  ec2  run-­‐instances  -­‐-­‐image-­‐id  ami-­‐12345  ¥ -­‐-­‐query  Instances[].InstanceId ¥ -­‐-­‐output  text) aws  ec2  wait instance-­‐running  -­‐-­‐instance-­‐ids $instance_id describe-­‐instances  optionsWaiter  NameSubcommand
  28. 28. • CloudWatch • CloudWatch  Logs • CloudWatch  Events Amazon  CloudWacth
  29. 29. Event  Source • EC2  Instance  states  change  notification – Pending/Running/Shutting  down/Stopped/Stopping/Terminated • Schedule • AWS  API  call • AWS  console  sign-­‐in • Auto  Scaling – Launch  Successful/Launch  Unsuccessful/Terminate  Successful/Terminate   Unsuccessful
  30. 30. Target • Lambda  Function • SNS  Topic • Kinesis  Stream • Built-­‐in  target – EBSボリュームのスナップショット作成 – EC2インスタンスの再起動 – EC2インスタンスの削除 – EC2インスタンスの停止
  31. 31. Others • Templates ü aws ec2  run-­‐instances  -­‐-­‐generate-­‐cli-­‐skeleton • Errors ü aws ec2  create-­‐tags   -­‐-­‐tags  Key=purpose,Value=dev  -­‐-­‐ resources  "$(instance_ids)"  ||  errexit "<errmsg>" • Pararel ü aws iam list-­‐users  -­‐-­‐query  "Users[].[UserName]"  -­‐-­‐output   text  |    xargs -­‐I  {}  -­‐P  10  aws iam delete-­‐user  -­‐-­‐user-­‐name  "{}"
  32. 32. CLI を使ってやったこと My  AWS  user  Experience
  33. 33. koyanagawa$  aws-­‐shell aws>  aws sa describe-­‐presenter { “Myself”:  [ { “Name”:  “Takashi  Koyanagawa(⼩小梁梁川 貴史)”, “Role”:  “Partner  Solutions  Architect  (パートナー ソリューション アーキテクト)”, “AWS  Service”:  “AWS  IoT”, “Previse  position”:  [ “AWS  user”,”Project Manager/Leader”,  ”Infra/system-­‐operation  Leader” ] “Favorite  region”:”us-­‐west-­‐2” “URL”:    “http://www.slideshare.net/AmazonWebServices/dvo312-­‐sony-­‐building-­‐atscale-­‐ services-­‐with-­‐aws-­‐elastic-­‐beanstalk”, “Family”:  [ { null } ] }
  34. 34. 前提と課題 体制 Nの開発チームに対して、infra/sysopeは1 環境はdev  N⾯面,Stg  1⾯面、Prod  1⾯面。Stg環境以上はsysopeチームしかさわれないルール dev dev dev dev Infra-‐‑‒sysope India  24h/7day 課題 sysopeチームの⼯工数不不⾜足。⽇日々の作業と障害時の省省⼒力力化、間違いを無くす Instanceの数がdev/stg/prod併せて1,000を超え、かつ、開発繁忙期にはtemp環境依頼も くる 1devチームの数とsysopeチームの数はほぼ同じ、圧倒的な⼯工数不不⾜足 障害対応tier1
  35. 35. 課題:⼿手作業によるミス、冪等性の確保が難しい 構築⼿手順書とネームルール、Excelの組み合わせ サーバ名ルール [d/s/p][サーバ種別識識別⼦子3⽂文字][サーバ識識別⼦子4桁数字] 例例:daws0001 Excelの参照マクロを利利⽤用して、⼿手順書をテンプレート化、コマンドはExcelから コピペ Puppetの導⼊入で⼀一括コマンド実⾏行行など効率率率化を進めた。
  36. 36. ⽇日々の運⽤用で困ったこと AWSの通知/やり取りチームと社内の識識別⼦子の乖離離 ⽇日々増え続けるサーバの管理理 社内でクラウド開発が認知されると、開発数が激増。開発が逼迫するとバグがでたり、開 発並⾏行行性を上げるために環境が⾯面数が増える。。 maintenance通知や障害ケースでのやり取り、AWSはInstance-‐‑‒IDベースだが社内はサー バtagをベースにしている。数百台を超えると特にmaintenance通知管理理は⼤大変 やったこと 全アカウントでdescribe-‐‑‒xxxxを発⾏行行しDB化(8h毎3回/1day) Instance-‐‑‒ID  – tag:Servername -‐‑‒ IPアドレス -‐‑‒EBSボリューム のマッピングを管理理 このDBを社内OpenDBとして公開 作業依頼をtag内に記載することでredmineのチケットとも連携
  37. 37. 変更更履履歴を管理理することで、戻すべき状態が簡単に分かる。tier-‐‑‒1で対応し た内容もだいたい分かる⽤用になった。 OpenDB化したことで別のチームがAWS  priceページからregion/cost情報 をパースして⼤大枠でのコスト状況を表⽰示する機能を追加。 Cloudwatchとの連携させて、DBからリソース情報を⾒見見れるようにした。 EC2 ELB SG EBS EIP price mainte 変更更履履歴も管理理
  38. 38. ⼿手段はさておき⼤大事なこと。 ⽬目的とルールを明確にして、ツールを作ることに頑 張り過ぎない。 なぜか?? じつは今書いた私の経験の多くは、現在AWSサービスでカ バー可能。ツールに愛着を持ちすぎずにアウトソース/オフ ロードできる部分はAWSへ。 メンテナンス⼤大変ですよね。。
  39. 39. AWS  CloudTrail
  40. 40. AWS CloudTrail  とは ユーザによ るAPIの発⾏行行 各リージョン のAWSリソー スの呼び出し CloudTrailが APIコールをロ ギング ユーザの操 作を管理理
  41. 41. AWS Config
  42. 42. AWS  Configとは • AWSリソースのレポジトリ情報を取得し、リソースの 設定履履歴を監査、リソース構成の変更更を通知すること ができるフルマネージドサービス • ユースケース • セキュリティ分析:Am  I  safe? • 監査・コンプライアンス:Where  is  the  evidence? • 変更更管理理:What  will  this  change  affect? • トラブルシューティング:What  has  changed? • ディスカバリー:What  resources  exist?
  43. 43. 変更更・更更新記録構成変更更 ヒストリ ストリーム スナップショット (ex.  2014-‐‑‒11-‐‑‒05) AWS Config
  44. 44. OpsJAWS のご紹介 • DoorKeeper – https://opsjaws.doorkeeper.jp/ • Twitter – @opsjaws – ハッシュタグ #opsjaws • 運⽤用に関わることを議論論するUGです。 • 海外のSaaSサービスのご紹介なども! ご興味のある⽅方、お声がけ下さい。
  45. 45. Let’s  build  your  CLI  program, It‘s  easy  and  first!! WE  All  ❤ CLI

×