意外と料理はできる人間、たいがーです。
先日、たまたま社員さんと料理の話になったのですが、私が料理はなんとなく出来ると話すと普段のおおざっぱさからか信じてもらえませんでした。チーズケーキとか作りますからね!レシピを見ながらですが!!
落ち着きが欲しい
今日は何故かそわそわしていて、間違えていないところを間違えたかもしれないと慌てて、結局間違えていなかったというよくわからないミスをしました。git addをする時、エラーが発生したのが実はファイル名が間違っていただけだったり、合っていたのに違うブランチを切ってしまったかもしれないと慌てたり…落ち着きとは無縁でした…
そんなアワアワしていた、今日の振り返りです。
今日は前回までの続きを行っていきます。
前回のままのスクリプトである場合、Box上にアップしたとき、すでに同じ名前のフォルダが存在した場合、エラーが発生していました。その点から改善していきます。
同じものが存在したときは作り替える
同じ名前のフォルダが存在した場合、そのフォルダをBoxから削除し、作り直すというように変更します。とりあえず現在どのようなフォルダが存在するかを確認します。
items = client.folder(folder_id=XXXXXX).get_items()
folder_idでフォルダを選択し、そのフォルダ内に含まれるすべての項目を獲得できます。
クレデンシャル情報はaccount_infosというフォルダに、ハンズオンのアカウント番号のフォルダを作るようにしています。
そのフォルダのリストと今回Boxのフォルダのリストを比較し、存在する場合は削除するように処理します。
for item in items:
item_list = 'account_infos\\' + item.name
if item_list in target_files:
client.folder(item.id).delete()
else:
continue
Box sdkでは、item.name、item.idのようにすると、それぞれ指定した情報を取ってこれます。最初このことを知らなかったので、なかなかに苦戦しました…
あとは前回までと同様にフォルダを作成し、Boxに格納していく処理を行います。
これで、Boxによるエラーで止まることはなくなりました!
マネジメントコンソールを切り替えるのが手間
IAMのAccessKeyはユーザー毎に2つまでしか作成できません。今まで、よくテストをする際、Access Keyがすでに二個作られていて、さらにAccess Keyを作成しようとしてエラーが発生することがありました。今回はそこを改善していきます!
そもそもアクセスキーが発行されているかどうかを調べる必要があったのですが、発行されているかを知る方法がなかなかわかりませんでした。
私はいつもPythonを使って開発をしているので、Boto 3を使います。ほかのAPIのところにはアクセスキーをリスト化する方法が載っていたのですが、Boto 3ではなかなか見つかりませんでした。ついに見つけた!と思ったのですが、まさかの落とし穴にはまりました。
client.list_access_keys()
アクセスキーのリストを取得するためにはIAM.Clientで動かす必要がありました。一度、IAMユーザーで動かせないかと思いましたが、IAMユーザーにはそのメソッドが含まれておらず、うまくいきませんでした。一度、STS対応をしているユーザーで動かそうとしましたが、それもうまくいきません。そこで、社員さんにヒントを教えていただきました。
iam = session.resource('iam')
user = iam.User('HandsOnUser')
client = session.client('iam')
こうすることによって、先ほどのコードを使うことができます。もし先ほどのリストのAccount IDに値が入っていなければ、アクセスキーが存在しないということなのでcontinue、何か値が入っていれば消去する、というように処理を回します。
access_key_lists = client.list_access_keys(UserName='HandsOnUser')
access_key_list = access_key_lists['AccessKeyMetadata']
for access_key_id in access_key_list:
access_key = access_key_id['AccessKeyId']
if access_key == None:
continue
else:
client.delete_access_key(UserName='HandsOnUser',AccessKeyId=access_key)
こうすることで、このスクリプトを回すと自動的にAWSのアカウントのアクセスキーが更新されるようになりました!なので、各アカウントの設定をコンソールで触る必要もなくなりました!
一つストレスが減らせました
毎回動作確認をするたびに、各アカウントのIAMユーザーの設定を開いていた手間がなくなると思うと、すごくうれしいです!ようやく解放されました!!!
今のところ、次回からSlack botをつくる…?という話になっています。個人的にも今後使えそうなので、出来ればサクサク作っていけたらなと思います!