先日、JAWS-UG CLI専門支部に参加しました。
参加したのは「IAMユーザー基礎(ユーザー)」の会で、AWS CLIでIAMユーザーの作成を行うという内容です。
CLI専門支部では、講師の波多野さんが作成した手順書をもとに、ゴリゴリハンズオンを進めています。
その手順書の中で「???」となったコマンドがあったので、個人的なメモとして残しておきます。
先に記載しておくと、以下のコマンドはJSON表記になっているAWSアクセスキーデータを、認証ファイルの形式に変換するためのコマンドです。
echo "[${IAM_USER_NAME}]" > ${FILE_USER_CREDENTIAL}
cat "${FILE_ACCESS_KEY}" \
| jp.py 'AccessKey' \
| sed '/[{}]/d' | sed 's/[\" ,]//g' | sed 's/:/=/' \
| sed 's/AccessKeyId/aws_access_key_id/' \
| sed 's/SecretAccessKey/aws_secret_access_key/' \
| grep '^aws_' \
>> ${FILE_USER_CREDENTIAL} \
&& cat ${FILE_USER_CREDENTIAL}
この記事に書いてあること
- jp.pyとは何か
- sedコマンドの使用例
- grepコマンドの使用例
(すべてメモ書き程度の内容ですのでご了承ください)
jp.pyってなんぞ???
まずは2行目
jp.py 'AccessKey'
調べてみると、どうやらjp.pyというのはJSON用のクエリ言語らしい
なので上記コマンドを入力すると、'AccessKey'オブジェクトに対してクエリを実行することができる
ちなみに、jp.pyはAWS CLIをインストールすると自動でくっついてくるらしい
AWSとJSONは切っても切れない存在ですし、これは覚えておくとかなり使えそうです
sedコマンドの嵐
次はsedが連続している3行目
| sed '/[{}]/d' | sed 's/[\" ,]//g' | sed 's/:/=/' \
sed '/[{}]/d'
sedコマンドは/
で置き換える文字を区切っています
また、d
をつけると行の削除を行います
加えて、[]
は「囲まれているもののいずれか」という意味です
なので、最初のsedはこういう意味
- 対象の文字は
{
、}
のいずれか - 対象の文字が含まれる行を丸ごと削除
sed 's/[" ,]//g'
s
は置換を意味する
デフォルトだと各行で一番最初にヒットした対象文字しか置換しないので、g
をつけることで各行の対象文字をすべて置換することができる
なので、2つ目のsedはこういう意味
- 対象の文字は
"
、,
のいずれか -
"
は特殊文字なので\
でエスケープ処理 - 置換後の文字を指定していないため、結果的には対象文字を削除する
sed 's/:/=/'
これもs
がついているので、:
を=
に置換するだけ
同様に、4-5行目も単純な置換を行っている
| sed 's/AccessKeyId/aws_access_key_id/' \
| sed 's/SecretAccessKey/aws_secret_access_key/' \
grepと正規表現
最後に正規表現を含んだgrepコマンド
| grep '^aws_' \
まず、grepは ''
で囲んだ文字列に一致する行を抽出するコマンド
そしてgrepは正規表現を使用でき、今回は^
を使用している
^
は行の先頭であることを指定しているので、以下のような意味になる
- 行の先頭に
aws_
がある行だけを抽出
まとめ
最後に上記のコマンドを実行した結果どうなるのか、例を示しておきます
before
元となる、JSON表記のアクセスキー情報
{
"AccessKey": {
"UserName": "handson-cli-basic-user",
"Status": "Active",
"CreateDate": "2021-07-27T01:23:45.678Z",
"SecretAccessKey": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"AccessKeyId": "xxxxxxxxxxxxxxxxxxxx"
}
}
after
以下のような新しい認証ファイルが作成される
[handson-cli-basic-user]
aws_access_key_id=xxxxxxxxxxxxxxxxxxxx
aws_secret_access_key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
おわりに
勢いで調べたことをまとめているので、「ここ違うよ!」とか突っ込んでいただけると大変うれしいです
また、JAWS-UG CLI専門支部はAWSの勉強になるだけでなく、シェルスクリプトやLinuxコマンドの勉強になるのでとても楽しいです。
まだ参加して日が浅いですが、まずは一年間通してじっくり勉強させていただこうと思います!
補足
Twitterにて、講師の波多野さんから直々にご指摘をいただいております。
波多野さんありがとうございます!