awscli についての考察

AWS公式リファレンスに物申す

Fundastaの社長です。年の瀬ですね、クリスマスイブです。

S3、DynamoDB、Kinesis…
簡単にコマンドラインでいじれる嬉しいツール awscli
Yeah!

私は初学者というわけではないんですが、awscliでこっちの環境のDynamoDBからデータ引っこ抜いてあっちの環境のDynamoDBに抜いたデータ突っ込もう、とか、エビデンスのためにDynamoDBのデータを保持しておきたいとか、S3のバケットの中身全部欲しい、とか、Kinesisにデータ突っ込んで動作確認したい、とかよくあるシチュエーションで、大体コマンド忘れてます。

プログラムに専念すればするほどたまにやってくるよくあるシチュエーションで記憶がハッキリしません。

以前使ったコマンドもどこか奥深くにしまわれて探せない…
どうしよう困った、ググる…
公式リファレンス出る、久しぶり過ぎてオプションがよくわからない…
ダブルクォートってどれをエスケープするんだっけ?
Attributesに指定する値を別ファイル読み込むのどうするんだっけ?
パーティションキーとソートキーが存在するテーブルのデータをパーティションキーだけでひっかけて取得する時どうしたっけ?
S3からディレクトリごと取得するのって確かポータル上じゃできなかったよなぁ…

みたいなことが本当によくある…覚えとけよって話ですが…

そんなわけで、初心者が陥りがちで、公式リファレンスがわかりづらい書き方をちょこっと例を交えて書いていくので、お役に立てれば幸いです。

S3からディレクトリごとローカルに落とす

単一のファイルの取得ならポータルから落とせますが、なぜかポータルからはディレクトリごとダウンロードすることができません…

どうしてもコマンドライン叩くのが嫌な方はS3ファイルマネージャーだったかな?サードパーティ製品使ってください。S3がWindowsのフォルダのように扱えます。

私は普段WindowsのWSLでUbuntu使っているので、コピー先のディレクトリがマウントされたディレクトリになっています。

  • [bucket-name]:S3のバケット名を入れてください(”[ ]”はいりませんよ)
  • [directory-name]:ダウンロードしたいディレクトリ名(”[ ]”はいりませんよ)

まぁcpしておくのが無難、最後の --profile は、AWSのアカウントを複数持っている人用です。対象のアカウントへのアクセス情報を以下のように登録しておき、毎回 aws configure でアクセスするアカウントを指定しなくてもいいようにしておきます。
アクセスするアカウントが1つしかない人はこれはなくても大丈夫です。

これでディレクトリごとローカル端末にコピーが完了!

PartitionKeyとSortKeyのあるDynamoDBのテーブルからPartitionKeyだけでレコードリストを取得する

あんまり使わない私にとってこれが本当にわかりにくい…
まぁ結果公式リファレンスから読み取ってやったんだけども…

たかだかこんだけのことなのに、このコマンド作るのに小一時間かかってます…

  • まずコマンドは query です。 get-item では複数レコードの取得はできません
  • 「Table-Name」:取得したいテーブルのテーブル名です(”[ ]”はいりませんよ)
  • 「–key-condition-expression」:どのキーを検索対象とするか(指定できるのはパーティションキーとソートキーのみ)をここで指定します。
    • 複数指定する場合は「and」でつなげます。
  • 「PartitionKey-Name」:取得したいテーブルのパーティションキーの名称です(”[ ]”はいりませんよ)
  • 「=:p」:簡単に言えば変数です。なので値は「p」じゃなくてもなんでも大丈夫です
    • この場合、[PartitionKey-Name]を「p」としてこのコマンドの中では扱いますよ、という意味です。
  • 「–expression-attribute-values」:「–key-condition-expression」で指定した検索項目で、実際に検索したい値を指定します
  • 公式リファレンスには「–key-condition-expression」の途中にスペースが入っていたりしますが、なんだかうまく動かなかったので、スペースを入れないようにしましょう

EX) 以下を検索したい場合

  • Table名:UserTransactionTable(ユーザのアクションすべてを管理しているテーブルで、PartitionKeyとSortKeyでテーブルが構成されているとする)
  • PartitionKey名:usrId(これに紐づくレコードをすべて取得したい)
  • SortKey名:transactionId(この項目は絞り込みの対象とはしない)
  • その他絞り込みしたい項目:actionId(ユーザがどういった行動をしたかを管理する項目で、パスワードの変更は1、Profile変更は2、というような管理をしているとする)
これで取得可能なはず…

内容薄いなぁ

もっと濃い内容の記事が書けるように頑張ります。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA