amareloのブログ(仮)

IT系勉強会で感じた想いや知見をメインに書いていきます。

JAWS-UG CLI専門支部 #231R AWS CLI入門 参加レポート

10/14(木)JAWS-UG CLI専門支部 #231R AWS CLI入門 に参加しました。 CLI専門支部にはずっと参加していましたが、復習ブログはしばらく書いていませんでした。 久々になってしまいましたが、ブログ書いていきます。 今回はいつもと違い、座学多めでハンズオン少なめでしたが、 波田野さんのAWS CLIへの熱量がいつもより強くて濃い内容でした。 この記事では座学パートとLTについてを参加レポートとして書いていこうと思います。 ハンズオンの方は別記事に書きました。

zenn.dev

目次

イベントページ

jawsug-cli.connpass.com

AWS CLIについて

AWS CLIの概要

  • AWS公式コマンドラインインタフェース
    • 以前からあった個別プロダクトを統一したもの
  • Pythonの Boto coreライブラリをバックエンドで利用している
  • 約280サービスに対応
    • 基本的には1サービス1コマンド
    • S3のみハイレベルコマンドがある(s3,s3api)

AWS CLIの特徴

  • AWSサービスはAPIの集合体
    • AWSを真に理解するとはAWS APIの働きを理解すること
  • AWS CLIは基本的にサービスAPIのラッパー
    • 公開されているAWS APIのほぼすべてを操作できる。
    • AWS CLIを理解することでAWS APIの働きを理解できる。
  • 最新機能への対応が早い
    • バージョン1の方が積極的に更新されている(ほぼ週5回)
      • バージョン2は週2回(水・金)
  • ブラウザ(Cloud9、CloudShell)・Linuxなど多様な実行環境

AWSの変更作業にCLIを使う

  • マネコンだと何となく理解していればつつがなく作業完了してしまう。
  • AWS CLIだと過去の資産を使える。
  • マネコンだと処理が隠蔽化されているので、Undoできない。
  • CLIだと変更差異が確実にわかるので、Undoできる。

なぜGUIを使う人が多いのか?

  • GUIは楽
  • 直感的に操作できるから
  • グラフィカルな表示は分かりやすいから

それは本当か?

  • 突然UI改訂が起こる。
  • 手順書修正が追い付かず混乱する。
  • 直感に依存することで、論理だったコンピューティングを利用しなくなった可能性がある。
  • 情報過剰になりやすく、論理構造が把握しづらい。本質的な理解を妨げる側面もある。

  • 何となく、たぶんで接するコンピューティングは「IT」なのか?
  • 理解があやふやなまま本質をとらえる機会が得られずにコンピューティングしている「つもり」になりがち。
  • 過剰な情報から適切な取捨選択や推論ができないコンピューティングは「IT」なのか?

手順書の工数と品質

  • GUI作成手順はCLI手順の3倍手間、1/3の品質

AWSとどうつきあいたいのか?

それぞれの特徴

  • GUI
    • メリット:柔軟性がある。
    • デメリット:反復、再現性がない。
  • CLI
    • メリット:柔軟性、反復再現性がある。
    • デメリット:学習コストは高い。
  • SDK
    • メリット:反復、再現性
    • デメリット:柔軟性がない、陳腐化が早い。学習コストは高い。

付き合い方

  • AWSで手作業したいときは、GUICLI
  • 自動化したいときは、CLISDK
  • 両方に対応できるのはCLI
  • CLIを軸にSDKGUIに展開していくのが良い。
  • コストをかけないで良いところをCLIでやるのが良い。

AWS CLIの導入と更新

  • バージョン1
    • デフォルトブランチ
    • 週5回リリース
    • Cloud9、Amazon Linux2標準
    • パッケージ管理:pip3
    • シンプル
  • バージョン2

    • 週2回リリース
    • CloudShell標準
    • パッケージ管理:tar
    • 多機能・肥大
  • ハンズオンはバージョン1を利用

  • バージョン1の導入

    • Amazon Linux2では導入済
    • PIPでインストール
      • sudo pip install awscli==1.20.1(バージョン指定する必要があるならば、==<バージョン数>が必要)
    • aws --versionでバージョン確認

AWS CLIの構成要素

  • AWSの権限

    • IAMユーザ(マネコン)
      • MFA設定していないと悪用される恐れがある。
    • IAMユーザ(IAMアクセスキー)
      • アクセスキーが漏洩すると悪用される恐れがある
    • インスタンスプロファイル(IAMロール)
      • EC2インスタンス上では、インスタンスプロファイルに紐づいたIAMロールの権限で動作する。
      • AWSの認証情報をユーザが扱わない。認証情報が漏洩しないため安全。
        • Cloud9の場合はSSH接続できないのでさらに安全
  • AWSコマンド

  • jp.pyコマンド

    • AWS CLIに付属しているフィルタスクリプト
    • 標準出力やファイルに出力されたJSONをJMESPathでパース出来る

AWS CLIの利用方法

  • ハイレベルコマンド(UNIXライクな出力)
    • 引数指定
      • UNIXライクな入力
      • S3のみ対応(バージョン1)
  • APIコマンド(JSON出力)
    • パラメータ指定
      • UNIXライクな入力
    • JSON指定
      • JSONによる入力
        • --generate-cli-skeleton オプションでテンプレートが生成される

AWS CLIの入力

  • 書式

    aws s3api list-objects --bucket hoge

    • aws ではじまり、左からコマンド(s3api)、サブコマンド(list-object)、パラメータ(--bucket)、オプション

    • APIエンドポイント名とCLIコマンド名は、原則同じ

      • iam,route53,ec2,s3/s3api,lambda
    • APIエンドポイント

      • グローバルサービス https://iam.amazonaws.com
      • リージョナルサービス https://ec2.{リージョン}.amazonaws.com
    • APIアクションとCLIサブコマンド名は原則同じ パスカルケース チェイン(ケバブ)ケース

    • パラメータ

      • APIパラメータ名とCLIパラメータ名は原則同じ
        • InstanceType(パスカルケース) = --instance-type(チェインケース)
    • オプション

      • --query
        • JMESPath記法を利用
      • --output
        • defaultはJSON形式
        • テキストやテーブル形式での出力も可能
      • --debug

AWS CLIの出力

  • サーバサイドフィルタ
    • filterパラメータ
      • describe系コマンドは、filterパラメータが定義されている。
      • 定義されていないものはフィルタリングできない。
  • クライアントサイドフィルタ
    • queryオプション
      • すべてのJSONを処理できる。
      • APIの出力情報をすべて出力して転送するためパフォーマンスは良くない。データ転送量も多い。
      • 出力結果から特定のノードを取り出すことができる。
      • 「存在しない」を条件にすることは出来ない。
        • その場合は、jq.pyを使う必要がある。

AWS学習の中長期戦略

  • 早めにAWSと付き合う
  • 公式ドキュメントと付き合う
    • AWSが積極的に技術的なトピックやノウハウを公開している。
    • すべて読み込んで手を動かせば、誰でも国内有数のAWSエンジニアになれる。
      • すべて読み込むのは不可能(数十万ページ)
  • ビジネスで使ってみる
    • ビジネスで使えそうなプロダクトをつまみ食いする。
    • すべてのプロダクトを使うのは非現実的
    • 特徴ある使い方出来る人が強い。
    • 芋づる式に関連プロダクトに手を出していくと、その領域では数少ないAWSプロフェッショナルになれる

LT

バージョニング有効なS3バケットのオブジェクト一括削除(JQコマンド) emiさん

※資料が公開されたことを確認出来たら、追記します。

  • バージョニング有効なS3バケットの削除は、オブジェクト(過去バージョン含む)と削除マーカーすべての削除が必要
  • バージョニング有効なS3オブジェクトをたくさん消すのは大変
    • JQコマンドが使える
      • Cloud9環境にはないのでsudo yum -yu install jqでインストールが必要
      • CloudShellにはインストールされている
  • list-object-versionとjqコマンドでバージョンIDを一括取得
    • 削除マーカーなしのオブジェクトIDをすべてを取得できる。
    • 削除マーカーを指定してオブジェクトID取得もできる。
      • フォルダの削除マーカーはマネコンからは見えない。
  • オブジェクトの一括削除
    • バージョンIDを取得してオブジェクト削除をwhile文で繰り返す。
      • 削除マーカー以外のオブジェクトは削除できた。
    • 削除マーカーしか入っていないバケットの削除はできない。
      • 削除マーカーのオブジェクトIDを取得して一括削除できた。
      • その後バケットも削除することができた。

最後に

応用情報の受験も終わり、AWS SysOps Administrator Associateの勉強に重点を戻したところで今回のハンズオンに参加できた良かったです。 改めてAWS CLIを勉強することのメリットを見直すことができて、またAWSの勉強へのやる気が出てきました。 AWSの勉強の際は、GUIからだけでなくAWS CLIもできる限り取り組もうと思いました。

あとはやはりアウトプットは大事。CLI専門支部の復習ブログもまた出来る限り書いていきたいと思いました!!