Upgrade to Pro — share decks privately, control downloads, hide ads and more …

【雲勉】AWS CLIをはじめてみる〜インフラエンジニア初心者向け講座 〜

【雲勉】AWS CLIをはじめてみる〜インフラエンジニア初心者向け講座 〜

Y.Sumikura

March 25, 2022
Tweet

More Decks by Y.Sumikura

Other Decks in Technology

Transcript

  1. アイレットご紹介 – 会社概要 3 n 社名 アイレット株式会社 n 所在地 〒105-6307

    東京都港区⻁ノ⾨1-23-1 ⻁ノ⾨ヒルズ森タワー7F 設⽴2003年10⽉15⽇ n 資本⾦ 7,000万円 n 代表者名 岩永充正 n 従業員数 682名(2021年4⽉末時点) n 事業内容 ITコンサルティング、システム開発、 システム保守・運⽤、 サーバハウジング・ホスティング n 主要株主 KDDI株式会社
  2. アイレットご紹介 – AWS APNパートナー 4 cloudpackは、Amazon Elastic Compute Cloud (Amazon

    EC2)やAmazon Simple Storage Service (Amazon S3)をはじめとする AWSの各種プロダクトを利⽤する際の導⼊・設計から運⽤保守を含んだフルマネージドのサービスを提供し、バックアップや24時間 365⽇の監視/障害対応、技術的な問い合わせに対するサポートなどを⾏っております。 2013年6⽉4⽇には、AWSパートナーネットワーク(APN)において、⽇本初のAPNプレミアティアコンサルティングパートナーの⼀社と して認定されたのをはじめ、その後9年連続で認定されています。 『APNプレミアティアコンサルティングパートナー』はAPNプログラムの中で最上位のパートナーであり、厳しいクライテリアを満たした パートナーのみが選出され、世界で128社のみが認定されています。9年連続で認定された⽇本企業としては、cloudpack(アイレット) と株式会社野村総合研究所の2社のみとなります。
  3. アイレットご紹介 – APN Consulting Partner of the Year 2019 –

    Japan 5 AWSのパートナーネットワークに登録している企業が参加した「AWS Partner Summit Tokyo」の中で、数あるアワードの中で最も実績 をあげたパートナーであることを⽰す『APN Consulting Partner of the Year 2019 – Japan』を受賞しました。cloudpackは、同賞を5度 ⽬の受賞となります。 『APN Consulting Partner of the Year 2019 – Japan』は、AWSが年間を通じて営業・技術・マーケティング分野においてパートナーと しての総合⼒を判断し、AWSのビジネスに最も貢献したパートナーに贈られるものです。cloudpackは、2013年から継続的にプレミアコン サルティングパートナーとして認定されているほか、業界に影響を与える多数のお客様事例のリリースや、数千台規模のマイグレーション 案件、基幹システムの移⾏を⼿掛けるなど、さらなるAWSビジネスの拡⼤に貢献しました。 また、サーバーレスやマシンラーニングなどの新サービスも積極的に採⽤して成功させる⼀⽅で、エンタープライズ案件も推進してきた結 果、著しい売り上げ伸び率を達成 したことが評価されました。
  4. アジェンダ 7 0. ⾃⼰紹介 1. 今⽇話すこと、話さないこと 2. AWS CLI とは

    3. AWS CLI を使うと何がいいの︖ 4. AWS CLI のインストール 5. AWS CLI を使うための準備 6. AWS CLI を使ってみよう︕ 7. ユースケース紹介1 8. ユースケース紹介2 9. ユースケース紹介3 10. AWS CloudShell 11. 質疑応答(19:50~20:00)
  5. 0.⾃⼰紹介 9 n 平⽥健⼠郎 • クラウドインテグレーション事業部 ⼤阪構築第⼀セクション 構築第⼆グループ • 前職でMSP2年を経験してそこで初めてAWSに触れる

    • アイレット⼊社3ヶ⽉ちょい • 昨年11⽉に結婚したが、式を挙げるか写真だけ撮るか悩んでいる ←奥さんに描いてもらった似顔絵
  6. 1. 今⽇話すこと、話さないこと 11 話すこと ・AWS CLI の導⼊ ・AWS CLI の簡単な使い⽅

    ・AWS CLI のユースケース 話さないこと ・シェル/シェルスクリプトの操作 ・STS による⼀時的な認証情報の取得 ・AWS SDK について ・jq コマンドのインストール、詳しい使い⽅
  7. 2. AWS CLI とは 13 AWS Command Line Interface コマンドラインシェルでコマンドを使⽤して

    AWS サービスとやり取りするための オープンソースツール 操作 AWS CLI AWS マネジメントコンソール
  8. 3. AWS CLI を使うと何がいいの︖ 15 n AWS CLI を使うメリット •

    GUI なら画⾯ポチポチでする作業をコマンドで実⾏できる →GUI に⽐べて作業スピードが上がる →定型的な作業をスクリプトにまとめれば 同じ作業を別な⼈でも安全に処理を再現可能になる 効率化 作業の安全化
  9. 3. AWS CLI を使うと何がいいの︖ 16 n 例えば 上司「S3 のバケットにあるファイルの⼀覧出しておいて︕(ファイル数100個)」 16

    AWS マネジメントコンソール 1. AWSコンソールログイン 2. S3 3. 対象バケット 4. 対象フォルダ 5. ファイル名を⼀個⼀個コピー&ペースト 6. ファイル⼀覧を次の画⾯に遷移 7. ファイル名を⼀個⼀個コピー&ペースト 8.ファイル⼀覧を次の画⾯に遷移 ※ひたすら繰り返す 画⾯ポチポチを繰り返す 時間がかかる ミスもしやすい
  10. 3. AWS CLI を使うと何がいいの︖ 17 n 例えば 上司「S3 のバケットにあるファイルの⼀覧出しておいて︕(ファイル数100個)」 17

    AWS CLI AWS マネジメントコンソール aws s3 ls s3://対象バケット/対象フォルダ コマンド⼀発︕ 画⾯ポチポチを繰り返す 時間がかかる ミスもしやすい 1. AWSコンソールログイン 2. S3 3. 対象バケット 4. 対象フォルダ 5. ファイル名を⼀個⼀個コピー&ペースト 6. ファイル⼀覧を次の画⾯に遷移 7. ファイル名を⼀個⼀個コピー&ペースト 8.ファイル⼀覧を次の画⾯に遷移 ※ひたすら繰り返す
  11. 4. AWS CLI のインストール 19 n 今回の環境 mac OS Big

    Sur 11.6.1 ▪参考 AWS 公式ドキュメント https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started- install.html
  12. 4. AWS CLI のインストール 20 ▪パッケージのダウンロード $ curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o

    "AWSCLIV2.pkg” ▪パッケージのインストール $ sudo installer -pkg ./AWSCLIV2.pkg -target / ▪インストールの確認 $ aws --version aws-cli/2.4.7 Python/3.8.8 Darwin/20.6.0 exe/x86_64 prompt/of
  13. 5. AWS CLI を使うための準備 22 ①IAM ユーザ作成 ②AWS CLI 実⾏端末に認証情報設定

    IAM ユーザ IAM ポリシー $ aws configure AWS Access Key ID [None]: XXXXXXXXXX AWS Secret Access Key [None]: YYYYYYYYYY Default region name [None]: ap-northeast-1 Default output format [None]: json
  14. 5. AWS CLI を使うための準備 23 ①IAM ユーザ作成 [AWS マネジメントコンソール] →[IAM]

    →[ユーザー] →[ユーザーを追加] [アクセスキー] にチェック
  15. 5. AWS CLI を使うための準備 25 ①IAM ユーザ作成 必要なポリシーをアタッチ ※今回はテスト⽤として [AdministratorAccess]をアタッチする

    実際の運⽤では必要最⼩限の権限を推奨 もし認証情報が流出したら。。。 ・⼤量にリソースを利⽤されて⾼額請求 ・機密情報の流出
  16. 5. AWS CLI を使うための準備 27 ②AWS CLI 実⾏端末に認証情報設定 ターミナルで aws

    configure コマンドを実⾏して認証情報を設定する Access key ID : XXXXXXXXXX Secret access key : YYYYYYYYYY
  17. 6. AWS CLI を使ってみよう︕ 29 S3 のバケット⼀覧を取得 $ aws s3

    ls バケット名1 バケット名2 バケット名3 バケット名4 バケット名5 バケット名6 バケット名7 バケット名8 バケット名9 バケット名10 バケット名11 バケット名12 バケット名13
  18. 6. AWS CLI を使ってみよう︕ 33 ローカルのディレクトリを S3 のバケットと同期する $ aws

    s3 sync [ローカルのファイルパス] s3://[バケット名] ※crontab で定期実⾏するだけで EC2 のディレクトリを S3 に定期バックアップできる バケット名
  19. 6. AWS CLI を使ってみよう︕ 35 EC2 インスタンスの停⽌ $ aws ec2

    stop-instances --instance-ids [インスタンスID]
  20. 6. AWS CLI を使ってみよう︕ 36 EC2 インスタンスの起動 $ aws ec2

    start-instances --instance-ids [インスタンスID]
  21. 6. AWS CLI を使ってみよう︕ 37 DynamoDB のテーブル⼀覧取得 $ aws dynamodb

    list-tables “Table1”, “Table2”, “Table3”, “Table4”, “Table5”, “Table6”, “Table7”, “Table8”, “Table9”, “Table10”, “Table11”, “Table12”
  22. 7. ユースケース紹介 (関連付けされていない Elastic IP Address を⼀括で解放する) 42 関連付けされていない Elastic

    IP Address があって 無駄な費⽤が発⽣しているなー ⼀括して削除したいなー ⽬的 : アソシエーションIDが設定されていない(関連付けがされていない) Elastic IP Address を⼀括で解放したい 関連付けがされておらず無駄な費⽤が発⽣している
  23. 7. ユースケース紹介 (関連付けされていない Elastic IP Address を⼀括で解放する) 43 $ aws

    --region us-east-1 ec2 describe-addresses | \ > jq -r '.Addresses[] | if .AssociationId? then empty else .AllocationId end' | \ > while read LINE; do aws --region us-east-1 ec2 release-address --allocation-id $LINE ;done ⽬的 : アソシエーションIDが設定されていない(関連付けがされていない) Elastic IP Address を⼀括で解放したい 関連付けがされておらず無駄な費⽤が発⽣している
  24. 7. ユースケース紹介 (関連付けされていない Elastic IP Address を⼀括で解放する) 44 $ aws

    --region us-east-1 ec2 describe-addresses | \ > jq -r '.Addresses[] | if .AssociationId? then empty else .AllocationId end' | \ > while read LINE; do aws --region us-east-1 ec2 release-address --allocation-id $LINE ;done JSON形式
  25. 7. ユースケース紹介 (関連付けされていない Elastic IP Address を⼀括で解放する) 45 $ aws

    --region us-east-1 ec2 describe-addresses | \ > jq -r '.Addresses[] | if .AssociationId? then empty else .AllocationId end' | \ > while read LINE; do aws --region us-east-1 ec2 release-address --allocation-id $LINE ;done eipalloc-0b8e99956b4ef240b eipalloc-0b722fb6e582516f1 割り当て IDのみ取得 JSON形式
  26. 7. ユースケース紹介 (関連付けされていない Elastic IP Address を⼀括で解放する) 46 $ aws

    --region us-east-1 ec2 describe-addresses | \ > jq -r '.Addresses[] | if .AssociationId? then empty else .AllocationId end' | \ > while read LINE; do aws --region us-east-1 ec2 release-address --allocation-id $LINE ;done eipalloc-0b8e99956b4ef240b eipalloc-0b722fb6e582516f1 割り当て IDのみ取得 jq コマンド JSON ファイルからデータを抽出、変換等をしてくれるコマンド JSON形式 Elastic IP Address 1 パブリックIP 割り当て ID アソシエーション ID ・ Elastic IP Address 2 パブリックIP 割り当て ID ・ Elastic IP Address 3 パブリックIP 割り当て ID ・ 関連付けが されていない 関連付けが されていない
  27. 7. ユースケース紹介 (関連付けされていない Elastic IP Address を⼀括で解放する) 47 $ aws

    --region us-east-1 ec2 describe-addresses | \ > jq -r '.Addresses[] | if .AssociationId? then empty else .AllocationId end' | \ > while read LINE; do aws --region us-east-1 ec2 release-address --allocation-id $LINE ;done JSON形式 eipalloc-0b8e99956b4ef240b eipalloc-0b722fb6e582516f1 割り当て IDのみ取得 while コマンド 渡されたデータを⼀⾏ずつ読みこんで変数 (LINE) に⼊れて do ~ done の間のコマンドをループ実⾏する
  28. 7. ユースケース紹介 (関連付けされていない Elastic IP Address を⼀括で解放する) 48 $ aws

    --region us-east-1 ec2 describe-addresses | \ > jq -r '.Addresses[] | if .AssociationId? then empty else .AllocationId end' | \ > while read LINE; do aws --region us-east-1 ec2 release-address --allocation-id $LINE ;done 解放 eipalloc-0b8e99956b4ef240b eipalloc-0b722fb6e582516f1 割り当て IDのみ取得 JSON形式
  29. 7. ユースケース紹介 (関連付けされていない Elastic IP Address を⼀括で解放する) 49 やったぜ ⽬的

    : アソシエーションIDが設定されていない(関連付けがされていない) Elastic IP Address を⼀括で解放したい 解放完了
  30. 8. ユースケース紹介 (解放した Elastic IP Address の復元) 51 やべえ さっき解放した

    “34.203.128.197” は 解放したらだめなやつだったっぽい ⽬的 : 解放した Elastic IP Address “34.203.128.197” の復元 AWS マネジメントコンソールでは 特定の IP アドレスを指定して取得することはできない
  31. 8. ユースケース紹介 (解放した Elastic IP Address の復元) 52 $ aws

    --region us-east-1 ec2 allocate-address --domain vpc --address 34.203.128.197
  32. 8. ユースケース紹介 (解放した Elastic IP Address の復元) 53 $ aws

    --region us-east-1 ec2 allocate-address --domain vpc --address 34.203.128.197 ※EC2-Classic 環境では ‒domain default
  33. 8. ユースケース紹介 (解放した Elastic IP Address の復元) 54 ΍ͬͨͥ ⽬的

    : 解放した Elastic IP Address “34.203.128.197” の復元 復元完了
  34. 9. ユースケース紹介 (オートスケール環境で増減するサーバの台数の平均値を求める) 59 cloudwatch $ aws cloudwatch get-metric-statistics --namespace

    AWS/AutoScaling -- metric-name GroupTotalInstances --start-time 2022-02-01T00:00:00 -- end-time 2022-02-28T00:00:00 --period 86400 --statistics Average -- dimensions Name=AutoScalingGroupName,Value=[ターゲットグループ名] -- output json | jq -c -r '.Datapoints[] | [.Timestamp, .Average] | @csv' | sort -t , -k 1 > alb_20220203.csv
  35. 9. ユースケース紹介 (オートスケール環境で増減するサーバの台数の平均値を求める) 60 cloudwatch $ aws cloudwatch get-metric-statistics --namespace

    AWS/AutoScaling -- metric-name GroupTotalInstances --start-time 2022-02-01T00:00:00 -- end-time 2022-02-28T00:00:00 --period 86400 --statistics Average -- dimensions Name=AutoScalingGroupName,Value=[ターゲットグループ名] -- output json | jq -c -r '.Datapoints[] | [.Timestamp, .Average] | @csv' | sort -t , -k 1 > alb_20220203.csv
  36. 9. ユースケース紹介 (オートスケール環境で増減するサーバの台数の平均値を求める) 61 cloudwatch $ aws cloudwatch get-metric-statistics --namespace

    AWS/AutoScaling --metric-name GroupTotalInstances --start-time 2022-02-01T00:00:00 --end-time 2022-02-28T00:00:00 --period 86400 --statistics Average --dimensions Name=AutoScalingGroupName,Value=[ターゲットグループ名] -- output json | jq -c -r '.Datapoints[] | [.Timestamp, .Average] | @csv' | sort -t , -k 1 > alb_20220203.csv データ取得
  37. 9. ユースケース紹介 (オートスケール環境で増減するサーバの台数の平均値を求める) 62 cloudwatch $ aws cloudwatch get-metric-statistics --namespace

    AWS/AutoScaling --metric-name GroupTotalInstances --start-time 2022-02-01T00:00:00 --end-time 2022-02-28T00:00:00 --period 86400 --statistics Average --dimensions Name=AutoScalingGroupName,Value=[ターゲットグループ名] -- output json | jq -c -r '.Datapoints[] | [.Timestamp, .Average] | @csv' | sort -t , -k 1 > alb_20220203.csv
  38. 9. ユースケース紹介 (オートスケール環境で増減するサーバの台数の平均値を求める) 63 cloudwatch $ aws cloudwatch get-metric-statistics --namespace

    AWS/AutoScaling --metric-name GroupTotalInstances --start-time 2022-02-01T00:00:00 --end-time 2022-02-28T00:00:00 --period 86400 --statistics Average --dimensions Name=AutoScalingGroupName,Value=[ターゲットグループ名] -- output json | jq -c -r '.Datapoints[] | [.Timestamp, .Average] | @csv' | sort -t , -k 1 > alb_20220203.csv
  39. 9. ユースケース紹介 (オートスケール環境で増減するサーバの台数の平均値を求める) 64 cloudwatch $ aws cloudwatch get-metric-statistics --namespace

    AWS/AutoScaling --metric-name GroupTotalInstances --start-time 2022-02-01T00:00:00 --end-time 2022-02-28T00:00:00 --period 86400 --statistics Average --dimensions Name=AutoScalingGroupName,Value=[ターゲットグループ名] -- output json | jq -c -r '.Datapoints[] | [.Timestamp, .Average] | @csv' | sort -t , -k 1 > alb_20220203.csv
  40. 9. ユースケース紹介 (オートスケール環境で増減するサーバの台数の平均値を求める) 65 cloudwatch $ aws cloudwatch get-metric-statistics --namespace

    AWS/AutoScaling --metric-name GroupTotalInstances --start-time 2022-02-01T00:00:00 --end-time 2022-02-28T00:00:00 --period 86400 --statistics Average --dimensions Name=AutoScalingGroupName,Value=[ターゲットグループ名] -- output json | jq -c -r '.Datapoints[] | [.Timestamp, .Average] | @csv' | sort -t , -k 1 > alb_20220203.csv
  41. 9. ユースケース紹介 (オートスケール環境で増減するサーバの台数の平均値を求める) 66 cloudwatch $ aws cloudwatch get-metric-statistics --namespace

    AWS/AutoScaling --metric-name GroupTotalInstances --start-time 2022-02-01T00:00:00 --end-time 2022-02-28T00:00:00 --period 86400 --statistics Average --dimensions Name=AutoScalingGroupName,Value=[ターゲットグループ名] -- output json | jq -c -r '.Datapoints[] | [.Timestamp, .Average] | @csv' | sort -t , -k 1 > alb_20220203.csv ターゲットグループ名
  42. 9. ユースケース紹介 (オートスケール環境で増減するサーバの台数の平均値を求める) 67 cloudwatch $ aws cloudwatch get-metric-statistics --namespace

    AWS/AutoScaling --metric-name GroupTotalInstances --start-time 2022-02-01T00:00:00 --end-time 2022-02-28T00:00:00 --period 86400 --statistics Average --dimensions Name=AutoScalingGroupName,Value=[ターゲットグループ名] -- output json | jq -c -r '.Datapoints[] | [.Timestamp, .Average] | @csv' | sort -t , -k 1 > alb_20220203.csv { "Label": "GroupTotalInstances", "Datapoints": [ { "Timestamp": "2022-02-11T00:00:00+00:00", "Average": 4.331395333333334, "Unit": "None" }, { "Timestamp": "2022-02-17T00:00:00+00:00", "Average": 4.242529045398188, "Unit": "None" }, { "Timestamp": "2022-02-04T00:00:00+00:00", "Average": 4.191666666041466, "Unit": "None" }, 【略】
  43. 9. ユースケース紹介 (オートスケール環境で増減するサーバの台数の平均値を求める) 68 cloudwatch $ aws cloudwatch get-metric-statistics --namespace

    AWS/AutoScaling --metric-name GroupTotalInstances --start- time 2022-02-01T00:00:00 --end-time 2022-02-28T00:00:00 --period 86400 --statistics Average --dimensions Name=AutoScalingGroupName,Value=[ターゲットグループ名] --output json | jq -c -r '.Datapoints[] | [.Timestamp, .Average] | @csv' | sort -t , -k 1 > alb_20220203.csv { "Label": "GroupTotalInstances", "Datapoints": [ { "Timestamp": "2022-02-11T00:00:00+00:00", "Average": 4.331395333333334, "Unit": "None" }, { "Timestamp": "2022-02-17T00:00:00+00:00", "Average": 4.242529045398188, "Unit": "None" }, { "Timestamp": "2022-02-04T00:00:00+00:00", "Average": 4.191666666041466, "Unit": "None" }, 【略】 "2022-02-01T00:00:00+00:00",4.186935456785962 "2022-02-02T00:00:00+00:00",4.18125 "2022-02-03T00:00:00+00:00",4.158188155670104 "2022-02-04T00:00:00+00:00",4.191666456666666 "2022-02-05T00:00:00+00:00",4.293345207783183 "2022-02-06T00:00:00+00:00",4.256989044444445 "2022-02-07T00:00:00+00:00",4.3356756775538 "2022-02-08T00:00:00+00:00",4.215277777777778 "2022-02-09T00:00:00+00:00",5.25 "2022-02-10T00:00:00+00:00",5.260591237248089 "2022-02-11T00:00:00+00:00",6.339583323433334 "2022-02-12T00:00:00+00:00",6.341209678036831 "2022-02-13T00:00:00+00:00",7.323678911111111 "2022-02-14T00:00:00+00:00",7.293012355555555] 【略】
  44. 9. ユースケース紹介 (オートスケール環境で増減するサーバの台数の平均値を求める) 69 cloudwatch $ aws cloudwatch get-metric-statistics --namespace

    AWS/AutoScaling --metric-name GroupTotalInstances --start- time 2022-02-01T00:00:00 --end-time 2022-02-28T00:00:00 --period 86400 --statistics Average --dimensions Name=AutoScalingGroupName,Value=[ターゲットグループ名] --output json | jq -c -r '.Datapoints[] | [.Timestamp, .Average] | @csv' | sort -t , -k 1 > alb_20220203.csv { "Label": "GroupTotalInstances", "Datapoints": [ { "Timestamp": "2022-02-11T00:00:00+00:00", "Average": 4.331395333333334, "Unit": "None" }, { "Timestamp": "2022-02-17T00:00:00+00:00", "Average": 4.242529045398188, "Unit": "None" }, { "Timestamp": "2022-02-04T00:00:00+00:00", "Average": 4.191666666041466, "Unit": "None" }, 【略】 "2022-02-01T00:00:00+00:00",4.186935456785962 "2022-02-02T00:00:00+00:00",4.18125 "2022-02-03T00:00:00+00:00",4.158188155670104 "2022-02-04T00:00:00+00:00",4.191666456666666 "2022-02-05T00:00:00+00:00",4.293345207783183 "2022-02-06T00:00:00+00:00",4.256989044444445 "2022-02-07T00:00:00+00:00",4.3356756775538 "2022-02-08T00:00:00+00:00",4.215277777777778 "2022-02-09T00:00:00+00:00",5.25 "2022-02-10T00:00:00+00:00",5.260591237248089 "2022-02-11T00:00:00+00:00",6.339583323433334 "2022-02-12T00:00:00+00:00",6.341209678036831 "2022-02-13T00:00:00+00:00",7.323678911111111 "2022-02-14T00:00:00+00:00",7.293012355555555] 【略】
  45. 10. AWS CloudShell 71 AWS マネジメントコンソール内で AWS CLI を実⾏できる環境として AWS

    CloudShell という機能が実装されています。(2020年12⽉) https://docs.aws.amazon.com/ja_jp/cloudshell/latest/userguide/welcome.html
  46. 75