- 投稿日:2020-02-13T22:30:42+09:00
AWS CLI v2とaws-vaultとpecoを使ってプロファイルを選択方式にする
AWS CLI v2 が GA になったので導入してついでに aws-vault を組み合わせてプロファイルを実行時に切り替えるようにしてみました。
aws-vault のインストールや設定は macOSのAWSクレデンシャル管理 で書いたとおりです。
環境
- macOS Mojave (10.14.5)
- zsh
- peco
- AWS CLI v2
- aws-vault
これらを組みわせて default プロファイル利用時は設定済みのプロファイルから選択するようにします。
インストール
ここでは、zsh、peco、 AWS CLI v2 のインストール方法について記載。
zsh
今回は brew でインストール。
$ brew install zshpeco
これも brew でインストール。
$ brew install pecoAWS CLI v2
公式 の手順に従いインストール。
$ curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg" $ sudo installer -pkg AWSCLIV2.pkg -target / $ aws --version準備
- aws-vault にクレデンシャルを登録する
- クレデンシャルを選択するための sh を用意
- ~/.aws/profile に credential_process 経由で sh を使ってクレデンシャルを選択
大きくはこの 3 ステップ。
aws-vaultにクレデンシャルを登録する
macOSのAWSクレデンシャル管理 を参考に登録してください。
クレデンシャルを選択するための sh ファイルを用意
aws-vault のプロファイルを列挙するコマンドを利用してクレデンシャルをして peco で選択。
その内容を AWS CLI に渡すというのが大まかな処理の流れ。以降は aws-vault に prof1、prof2、prof3 の 3 つのクレデンシャルを登録しているという前提で記載します。
自分の環境に合わせて読み替えてください。まずは、aws-vault で登録しているプロファイルは、
aws-vault ls
で列挙できます。$ aws-vault ls Profile Credentials Sessions ======= =========== ======== default - - prof1 prof1 - prof2 prof2 - prof3 prof3 -Profile の欄は .aws/config に設定されているプロファイル名、Credentials の欄は aws-vault に登録しているプロファイル名、 Sessions にはクレデンシャルから払い出したセッション情報が表示されます。
Profile と Credentials の突合は単純に同じ名前かどうかで判定している模様。これの情報を AWK で 整形するとこんなかんじで Credentials だけ抜き出せます。
$ aws-vault ls | awk 'NR>2 {if ($2 != "-") print $2}' prof1 prof2 prof3これを peco に食わせるとクレデンシャルを選択できるようになります。
セッションを用いずに登録したクレデンシャルを利用する場合は以下のようなコマンドで aws-vault からクレデンシャルを抜き出すことが可能です。$ aws-vault exec -j `aws-vault ls | awk 'NR>2 {if ($2 != "-") print $2}' | peco --prompt "Choice Credential >"` --no-session Choice Credential > IgnoreCase [3 (1/1)] prof1 prof2 prof3クレデンシャルを選択するとキーチェーンがロック中の場合はアクセス確認が行われるのでパスワードを入力します。
キーチェーンにアクセスできれば、以下のようにクレデンシャルが表示されます。{"Version":1,"AccessKeyId":"AKIXXXXXXXXXXXXXXXXX","SecretAccessKey":"ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ","SessionToken":""}これを適当な sh ファイルに仕込んで credential_process に食わせればお終いです。
sh を credential-selector.sh と名付けて任意の場所に保存してください。credential-selector.shecho $(aws-vault exec -j `aws-vault ls | awk 'NR>2 {if ($2 != "-") print $2}' | peco --prompt "Choice Credential >"` --no-session).aws/config に credential-selector.sh を組み込む
.aws/config を以下のように編集します。
デフォルトプロファイルは credential-selector.sh で登録済みのプロファイルの一覧から選択。
各プロファイルは aws-vault に保存されているクレデンシャルをそのまま利用する。[default] credential_process=/PATH/TO/credential-selector.sh region=ap-northeast-1 output=json [profile prof1] credential_process=aws-vault exec -j prof1 --no-session region=ap-northeast-1 output=json [profile prof2] credential_process=aws-vault exec -j prof2 --no-session region=ap-northeast-1 output=json [profile prof3] credential_process=aws-vault exec -j prof3 --no-session region=ap-northeast-1 output=json.aws/credentials に設定は不要です。空のファイルにしてください。
credential-selector.sh に実行権限を付与したら準備は完了です。$ chmod +x /PATH/TO/credential-selector.sh使ってみる
では使ってみましょう。
まずはプロファイル指定を行った場合。$ aws s3 ls --profile prof1 2019-12-18 12:16:10 bucket-1 2020-01-08 09:21:42 bucket-2これで普段どおり指定したプロファイルに関連づいた S3 バケットの一覧が表示されます。
次に default プロファイルを指定した場合です。
$ aws s3 ls Choice Credential > IgnoreCase [3 (1/1)] prof1 prof2 prof32019-07-18 14:36:41 bucket-a 2019-07-10 18:49:57 bucket-bこのようにクレデンシャルの一覧が表示されるのでそこから利用したいクレデンシャルを選択する事ができます。
まとめ
aws-vault と peco を使って default プロファイル指定時に任意のクレデンシャルを選択できるようにしてみました。
もともと事故防止用に default プロファイルには何も指定をしていなかったのですが、毎回プロファイルを打ち込むのもめんどくさいなーと思うことがあり、選択できるようにしてみました。aws-vault に登録されているクレデンシャルと .aws/credentials のプロファイルを同期させないと期待した動きをしないので .aws/credentials を自動生成する sh でも作ろうかと思います。
- 投稿日:2020-02-13T22:20:53+09:00
iPhoneで撮影した画像の形式HEICを全部まとめてJPEGに変換する
概要
僕は普段ブログ用の画像をiPhoneで撮影して、airdropでMacBook Proに転送しているんですが、得られる画像が
IMG_%04d.HEIC
というあまり馴染みのない画像形式HEIC
になっています。 (→追記1画像・動画の変換には普段
ffmpeg
を使うんですが、僕がbrew
でインストールしたffmpeg
はHEIC
形式に対応しておらず、変換ができず。諦めてプレビューで開いて
ファイル > 書き出す
を使ってjpeg
形式に変換していたのですが、流石に今後もずっとやる作業 && 量が多いと本当に時間がもったいないので機械的に処理したいと思い、したのスクリプトを作りました作ったスクリプト
できることは、「同じディレクトリにある
.HEIC
で終わるファイルを全て同名の.jpg
に変換し保存する」ことです。#!/bin/zsh for file in `ls *.HEIC`; do filename=$file:t:r sips --setProperty format jpeg $file --out ${filename}.jpg done
convert.zsh
とかにしてchmod u+x convert.zsh
で実行権限を与えた後./convert.zsh
とかで使います。
:t
とか:r
とかはおそらくzsh
にはあるがbash
sh
にはないと思うので(たぶん)、これはzsh
でしか動きません。僕が使っているMacBook Pro 16"は元々Catalinaで
zsh
が標準だったので、便利に使わせてもらいました。参考1. 画像ファイルの形式をHEICからJPGにしたい
参考2. Zsh: Get Filename or Extension from Path追記1
@ktysne さんからのコメントで(ありがとうございます)、「iOSの[設定]>[カメラ]>[フォーマット]から[互換性優先]」を設定するとそもそも
JPEG/H264
で保存できることがわかりました。設定調べる前にスクリプト書いてしまった..4K/60fpsとか1080p/240fpsを使うには高効率にしないといけないようなので注意が必要そう。iPhoneで4K/60fpsで動画撮影もしている人は今回書いてしまったスクリプトが便利かも。笑
- 投稿日:2020-02-13T22:11:41+09:00
Windows使いがMacを使ってみました
今までWindows、Ubuntuのデスクトップを使ってきましたが、サブ機としてMacBook Airを購入しました。
所感やひとまずやることを備忘録として記載します。購入したブツ
MacBook Air(MacOS X)13インチ US配列キーボード シルバー
とりあえずラップトップがほしかったのですが、中古のWindowsマシンにUbuntuを入れるかMacにするかずっと迷ってました。
最終的に、以下のような理由でMacにしました。
- 中古でWindows 10を買ってUbuntu入れてもなんか損した気持ちになりそうだったから。
- Macは触ったことがあっても所有したことがなかったから。
- Unixライクな使い方ができたほうが便利だろうなと思ったから。
Proを選ばなかったのは、そこまで使わないかなと思ったのと予算の都合です。
周りはスペースグレーを選ぶ人が多いみたいなんですが、シルバーの「Mac感」がいいなと思いました。どうしてUS配列のキーボードにしたのか
いくつか理由があります。
- 普段仕事では東プレのUS配列を使っているのでなれているから。
- キー配置がWindowsに近いように思ったからストレスも少ないかなと思ったから。(Controlキーの配置とか)
とりあえず設定を変更します
- 共有フォルダに.DS_Storeを作らないようにする
- ファンクションキーの役割を変える。
- 不可視ファイル・フォルダを表示できるようにする。
brew install vim
.zshrc
にexport LC_ALL=en_US.UTF-8
を追加。.zshrc
にalias ll='ls -la'
を追加。.vimrc
を好みの設定に変更。- インターフェースを英語にする。
- Windowsでも英語にしています。慣れるとこっちのほうが楽だったりします。
必要なソフトウェアをインストールします
Windowsで使っていてMacにも入れられるものは入れていきます。あとMacではどんなソフトが使えるのかとかしらべていきました。
- Homebrew
- FileZilla
- Firefox
- Google Chrome
- Google日本語入力
- もともと入っているIMEがどうも使いにくくて。。。
- iTerm2
- WindowsではMinTTYを使っていて、背景を透過にしたかったから。
- MacVim
- WindowsではGvimを使っていたけど、Mac版ってこれぐらいしかないんですね。。。他にもあるんだろうけど、同じ操作感が良かったからひとまず。
- SmartGit
- Visual Studio Code
- Vivaldi
- VLC Media Player
他にも入れたものはあるんですが、割愛。
Windows使っていると、WinMergeとかWinSCPとか使いたくなるのですが、Macで動かすにはちょっと面倒な設定をしないといけないので、必要になったら考えます。未だに戸惑うこと・困ること
Ctrl+Insert
、Ctrl+Shift+Insert
が染み付いていて、INSERTキーを探してしまう。- フォルダのコンテキストメニューでテキストファイルが作れない。(なにかいい方法があれば教えて下さい)
- Windowsのキーを探してしまう。(
Insert
、Backspace
、Delete
、Page Up
、Page Down
)- ターミナル上で
Command+C
、Command+V
が許される。
- Windows感覚だとキャンセル扱いの感覚だから。。。
- Officeどうすのか問題
- とりあえずデフォルトではいっているやつかLibreOfficeを使います。
まとめ
いろいろ違いがありますが、Windowsではいろいろやりにくいこととかできそうです。(Dockerとか)
調べ物もMac前提で書かれている記事が多いので、困ることもありました。相変わらず仕事ではWindowsを使うんでしょうが、
WindowsからMacを買おうとしている人の参考にしていただければいいと思います。
- 投稿日:2020-02-13T19:28:11+09:00
[Mac] Android StudioでWidgetのプロパティ一覧を表示する
Flutterでは、Widgetのプロパティ(コンストラクタの引数)を変更して挙動をカスタマイズして開発していくので、各Widgetのプロパティ一覧がみれるととても便利です。
MacのAndroid Studioではプロパティ一覧を見る(サジェストする)ショートカットは、control + space
ですが、OSの入力ソース切替と競合するため、デフォルトの状態では表示されません。OSのショートカットを無効にする
システム環境設定 / キーボード / ショートカット / 入力ソース
で無効にすることができます。
結果
Widgetのカッコ内にカーソルを合わせて、
control + space
を押すとプロパティが表示されます。おまけ
他にも多くの便利なショートカットなどが以下の記事で紹介されています。
- 投稿日:2020-02-13T19:28:11+09:00
[Mac/Flutter] Android StudioでWidgetのプロパティ一覧を表示する
Flutterでは、Widgetのプロパティ(コンストラクタの引数)を変更して挙動をカスタマイズして開発していくので、各Widgetのプロパティ一覧がみれるととても便利です。
MacのAndroid Studioではプロパティ一覧を見る(サジェストする)ショートカットは、control + space
ですが、OSの入力ソース切替と競合するため、デフォルトの状態では表示されません。OSのショートカットを無効にする
システム環境設定 / キーボード / ショートカット / 入力ソース
で無効にすることができます。
結果
Widgetのカッコ内にカーソルを合わせて、
control + space
を押すとプロパティが表示されます。おまけ
Flutterを始めた頃、この方法がわからず、
他にも多くの便利なショートカットなどが以下の記事で紹介されています。
- 投稿日:2020-02-13T19:28:11+09:00
[Flutter/Mac] Android StudioでWidgetのプロパティ一覧を表示する
Flutterでは、Widgetのプロパティ(コンストラクタの引数)を変更して挙動をカスタマイズして開発していくので、各Widgetのプロパティ一覧がみれるととても便利です。
MacのAndroid Studioではプロパティ一覧を見る(サジェストする)ショートカットは、control + space
ですが、OSの入力ソース切替と競合するため、デフォルトの状態では表示されません。OSのショートカットを無効にする
システム環境設定 / キーボード / ショートカット / 入力ソース
で無効にすることができます。
結果
Widgetのカッコ内にカーソルを合わせて、
control + space
を押すとプロパティが表示されます。おまけ
Flutterを始めた頃、この方法がわからず、
他にも多くの便利なショートカットなどが以下の記事で紹介されています。
- 投稿日:2020-02-13T17:10:52+09:00
jpgのqualityを確認する方法 [ImageMagick]
目的
手元にあるjpgファイルが、qualityいくつで圧縮されたのかが知りたい!
環境
- macOS High Sierra
- homebrew がインストールされていること
手順
ImageMagick のインストール
$ brew install imagemagickquality の確認
$ identify -format '%f:%Q\n' hoge.jpg以下のように出力されます
hoge.jpg:85%f (ファイルネーム), %Q (quality)以外に指定できるものはこちらを参照
参考
- 投稿日:2020-02-13T13:14:41+09:00
FluentdをMacでセットアップして、CloudWatchLogsへログ転送するまで
はじめに
実務で、ローカルで稼働しているMac miniが複数台あるので、それをCloudWatchLogsへ集約したいという要望があったので、勉強がてらFluentDを使った時の備忘録的なアレです
色々、試行錯誤しながら試したので、同じくハマっている人の助けになればと思います
失敗パターン
td-agentを使って、cloudwatchLogsに転送させる設定をしようとしたが、ripperが足りない?せいか、以下のエラーが発生して、td-agent内包のRubyを使っているため、これ以上は自力解決が難しいと思い、断念
`require': cannot load such file -- ripper (LoadError)
やったこと
Fluentd公式から、MacOS向けのtd-agent.dmgをDLして、セットアップ
https://docs.fluentd.org/installation/install-by-dmgCloudWatchLogsに飛ばすためのPluginは、ここからDL
https://github.com/fluent-plugins-nursery/fluent-plugin-cloudwatch-logsREADME.md通りに、
gem install fluent-plugin-cloudwatch-logs
を実行しても、td-agent自体が、そのものに内包されているRuby(2.4)を使用してるっぽいので、エラーになるStarting td-agent: 2018-05-31 01:27:51 +0000 [error]: fluent/supervisor.rb:373:rescue in main_process: config error file="/etc/td-agent/td-agent.conf" error="Unknown output plugin 'cloudwatch_logs'. Run 'gem search -rd fluent-plugin' to find plugins" td-agent
- td-agentを使っている場合は、td-agent-gemを使用して、インストールする
インストールコマンド
/opt/td-agent/usr/sbin/td-agent-gem install <プラグイン>
インストール済みリストを取得
/opt/td-agent/usr/sbin/td-agent-gem list
参考にしたリンク
https://qiita.com/nkg/items/cbf72adb436456804d76
成功パターン
td-agentだと、内包されているRubyを使う方法だったので、すでにインストールされてるRubyを使う方法を採用しました
下記を実行すると、CloudWatchLogsへ、自動的にログストリームが作成され、ログが出力されるようになりましたやったこと
- gem版のFluentdをインストール→セットアップ
# Fluentdのインストール $gem install fluentd -N # セットアップ $ fluentd --setup ./fluent`https://docs.fluentd.org/installation/install-by-gem
- gemを使って、CloudWatchLogs-Pluginをインストール
# fluentd-cloudwatch-logs-pluginをインストール gem install fluent-plugin-cloudwatch-logs
- fluentd.confファイルを編集
<source> @type tail path ./logs/logger.log tag sample <parse> @type multiline format_firstline /\[(\d{4}-\d{2}-\d{2}T\d{1,2}:\d{1,2}:\d{1,2}.\d{1,3})\]/ format1 /^\[(?<logtime>\d{4}-\d{2}-\d{2}T\d{1,2}:\d{1,2}:\d{1,2}.\d{1,3})\] \[(?<lebel>.*)\] (?<hoge>.*) - \[(?<title>.*)\] (?<message>.*)/ </parse> </source> <match sample> @type cloudwatch_logs log_group_name test auto_create_stream true use_tag_as_stream true </match>
- IAM User Policyの設定
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:*", "s3:GetObject" ], "Resource": [ "arn:aws:logs:us-east-1:*:*", "arn:aws:s3:::*" ] } ] }
- AWSのアクセスキーとシークレットキーを環境変数に登録
export AWS_REGION=us-east-1 export AWS_ACCESS_KEY_ID="YOUR_ACCESS_KEY" export AWS_SECRET_ACCESS_KEY="YOUR_SECRET_ACCESS_KEY"
fluentdを起動&停止
- 起動
fluentd -c ./fluent/fluent.conf -o ~/Desktop/tmp/fluentd.log -vv &
- 停止
pkill -f fluentd
まとめ
初めてFluentdを使って、ログの収集を行いましたが、ドキュメントがかなり充実していたので、ハマりはしたものの設定ファイルを作る等は、そこまで苦労しませんでした。
いろんなPluginがあるので、まだまだ色々できそうな気がしています。
また、Fluentdとtd-agentでの挙動が違ったりする場合があるので、調査の時には注意が必要かなと思いました。
- 投稿日:2020-02-13T13:14:41+09:00
FluentDをMacでセットアップして、CloudWatchLogsへログ転送するまで
はじめに
実務で、ローカルで稼働しているMac miniが複数台あるので、それをCloudWatchLogsへ集約したいという要望があったので、勉強がてらFluentDを使った時の備忘録的なアレです
色々、試行錯誤しながら試したので、同じくハマっている人の助けになればと思います
失敗パターン
td-agentを使って、CloudWatchLogsに転送させる設定をしようとしたが、ripperが足りない?せいか、以下のエラーが発生して、td-agent内包のRubyを使っているため、これ以上は自力解決が難しいと思い、断念
`require': cannot load such file -- ripper (LoadError)
やったこと
FluentD公式から、MacOS向けのtd-agent.dmgをDLして、セットアップ
https://docs.fluentd.org/installation/install-by-dmgCloudWatchLogsに飛ばすためのPluginは、ここからDL
https://github.com/fluent-plugins-nursery/fluent-plugin-cloudwatch-logsREADME.md通りに、
gem install fluent-plugin-cloudwatch-logs
を実行しても、td-agent自体が、そのものに内包されているRuby(2.4)を使用してるっぽいので、エラーになるStarting td-agent: 2018-05-31 01:27:51 +0000 [error]: fluent/supervisor.rb:373:rescue in main_process: config error file="/etc/td-agent/td-agent.conf" error="Unknown output plugin 'cloudwatch_logs'. Run 'gem search -rd fluent-plugin' to find plugins" td-agent
- td-agentを使っている場合は、td-agent-gemを使用して、インストールする
インストールコマンド
/opt/td-agent/usr/sbin/td-agent-gem install <プラグイン>
インストール済みリストを取得
/opt/td-agent/usr/sbin/td-agent-gem list
参考にしたリンク
https://qiita.com/nkg/items/cbf72adb436456804d76
成功パターン
td-agentだと、内包されているRubyを使う方法だったので、すでにインストールされてるRubyを使う方法を採用しました
下記を実行すると、CloudWatchLogsへ、自動的にログストリームが作成され、ログが出力されるようになりましたやったこと
- gem版のFluentDをインストール→セットアップ
# FluentDのインストール $gem install fluentd -N # セットアップ $ fluentd --setup ./fluent`https://docs.fluentd.org/installation/install-by-gem
- gemを使って、CloudWatchLogs-Pluginをインストール
# fluentd-cloudwatch-logs-pluginをインストール gem install fluent-plugin-cloudwatch-logs
- fluentd.confファイルを編集
<source> @type tail path ./logs/logger.log tag sample <parse> @type multiline format_firstline /\[(\d{4}-\d{2}-\d{2}T\d{1,2}:\d{1,2}:\d{1,2}.\d{1,3})\]/ format1 /^\[(?<logtime>\d{4}-\d{2}-\d{2}T\d{1,2}:\d{1,2}:\d{1,2}.\d{1,3})\] \[(?<lebel>.*)\] (?<hoge>.*) - \[(?<title>.*)\] (?<message>.*)/ </parse> </source> <match sample> @type cloudwatch_logs log_group_name test auto_create_stream true use_tag_as_stream true </match>
- IAM User Policyの設定
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:*", "s3:GetObject" ], "Resource": [ "arn:aws:logs:us-east-1:*:*", "arn:aws:s3:::*" ] } ] }
- AWSのアクセスキーとシークレットキーを環境変数に登録
export AWS_REGION=us-east-1 export AWS_ACCESS_KEY_ID="YOUR_ACCESS_KEY" export AWS_SECRET_ACCESS_KEY="YOUR_SECRET_ACCESS_KEY"
fluentdを起動&停止
- 起動
fluentd -c ./fluent/fluent.conf -o ~/Desktop/tmp/fluentd.log -vv &
- 停止
pkill -f fluentd
まとめ
初めてFluentDを使って、ログの収集を行いましたが、ドキュメントがかなり充実していたので、ハマりはしたものの設定ファイルを作る等は、そこまで苦労しませんでした。
いろんなPluginがあるので、まだまだ色々できそうな気がしています。
また、FluentDとtd-agentでの挙動が違ったりする場合があるので、調査の時には注意が必要かなと思いました。
- 投稿日:2020-02-13T11:53:49+09:00
AWS CLI v2をsudoを使わずにインストールする
忙しい方へ
インストール先はrootユーザのディレクトリなので、そうじゃないディレクトリに置いてパスを通すことができるよ、というだけです。
これで何をやってるかわかるのであれば以後は読まなくていいかもw本題
今週、AWS CLIのV2がGAになりました。
AWSのブログ
クラスメソッドさんのブログ個人的にはまだ全然試せてないのでこれからなんですが、使うにはまずはインストールしなければいけないですよね。
インストールの方法は公式に載っています。
自分の環境は仕事でも個人でもMacなのですが、もともとcliはbrewでインストールしてました。
何かしらのパッケージマネージャによって管理される状態にしておきたかったからですね。なのでできたらbrewで行きたかったんですが、これを書いている時点ではまだbrewではインストールできません。
(なので、brewでインストールできるようになったらこの内容は不要かもしれません。)インストールの手順を抜粋すると下記です。
Macでのインストール手順ですが、対象のファイルが変わるだけでLinuxでの手順もほぼ同様です。Macでのインストール手順curl "https://d1vvhvl2y92vvt.cloudfront.net/awscli-exe-macos.zip" -o "awscliv2.zip" unzip awscliv2.zip sudo ./aws/install問題なのは
sudo ./aws/install
で、仕事用のPCのユーザでは管理者権限を制限されていてsudoできない、なんてことがあるかと思います。
そうしたらせっかく試そうと思ったのに試せないじゃん、となっちゃいますが、回避する方法がきちんとドキュメントに書いてあるのでここに残しておきます。インストールスクリプトの中身
./aws/install
の中身は全部抜粋すると長くなるので割愛しますが、ざっくりいうと/usr/local/aws-cli
というディレクトリを作ってその中に動作させるプログラムを配置し、/usr/local/bin/aws2
というシンボリックリンクを作成する、という動作をするようです。
sudoさせられるのは、通常/usr
以下に書き込むにはroot権限が必要な状態になっているからかと思います。
/usr/loca/bin
にシンボリックリンクを置くのはPATHが通っているディレクトリにシンボリックリンクを置いてどこからでも使えるようにするためでしょう。
(記憶が曖昧なんですが、そもそもデフォルトでPATH通ってましたっけ…?)※そもそもこのディレクトリなんなのみたいな話は話が逸れるので参考サイトを置いておきます
https://linuc.org/study/knowledge/544/ただ、インストール先のディレクトリとシンボリックリンクを置くディレクトリは変更することができる、と書いてあります。
以下ドキュメントから抜粋
--install-dir または -i
このオプションは、すべてのファイルをコピーするフォルダを指定します。次の例では、/usr/local/aws-cli という名前のフォルダにファイルをインストールします。このフォルダを作成するには、/usr/local への書き込み権限が必要です。
デフォルト値は /usr/local/aws-cli です。
--bin-dir または -b
このオプションは、インストールフォルダ内のメイン aws プログラムが、指定されたパス内のファイル aws2 にシンボリックリンクされるように指定します。この例では、シンボリックリンク /usr/local/bin/aws2 を作成します。指定したフォルダへの書き込み権限が必要です。パスにすでに存在するフォルダへのシンボリックリンクを作成すると、インストールディレクトリをユーザーの $PATH 変数に追加する必要がなくなります。
デフォルト値は /usr/local/bin です。
つまり、適当なディレクトリにファイルを置いて、自分でPATHを通した任意のディレクトリにシンボリックリンクを配置することでsudoを使わないでインストールすることができます。
インストール先ディレクトリを変える
自分の場合は使っているユーザのホームディレクトリ配下に下記のようなディレクトリを作りました。
ディレクトリを作成し、PATHを通す
mkdir $HOME/awscli2 mkdir $HOME/local/binもちろん
$HOME/local/bin
にはPATHを通してあります。Bashの場合は
~/.bash_profile
に.bash_profileexport PATH=$PATH:$HOME/local/binを追記して
.bash_profile
を読み込み直しましょう。
source ~/.bash_profile
を実行するか、ターミナルを立ち上げ直せばOKです。自分はfishを使っているのでユニバーサル変数に追加しています。
fishの環境変数の設定の仕方はbashとはちょっと違ってやや混乱するので注意。
.fish/config/config.fish
に環境変数を設定するコマンドを追記するのでもいいと思います(お好みで)
ただ、下記は永続的な設定なので.fish/config/config.fish
のではなくターミナルで一回実行するだけにしましょう。
$fish_user_pathsの中身が間違って空になったりすると後で面倒なことになります(1敗)
参考
https://qiita.com/ledsun/items/8ca1a450b21c8ebc9670fishset -U fish_user_paths $HOME/local/bin $fish_user_pathsオプション指定してインストールする
その上で、インストール時にこんな感じでオプション指定しました。
※環境変数でホームディレクトリ指定してますが、実際にはフルパス指定しています。./aws/install -i $HOME/awscli2/ -b $HOME/local/bin/これで実行できるようになります、なお、現在はv1との併用のため
aws2
という名前でシンボリックリンクが作られます。aws2 --version aws-cli/2.0.0dev4 Python/3.7.4 Darwin/18.7.0 botocore/2.0.0dev3
ドキュメントより
AWS CLI バージョン 2 のプレビューリリースでは、AWS CLI バージョン 1 とバージョン 2 がサイドバイサイドで共存できるよう、シンボリックリンクに aws2 という名前が付けられます。AWS CLI バージョン 2 の今後のリリースでは、このコマンド名が変更される可能性があります。
ともあれ、これでV2になったaws cliを試すことができるようになりました。
気になるポイント
- あくまでも手動インストールなのでアップデートがあったら自分でやらなきゃいけないこと
- 一部下位互換性のない変更がある
関連
venvを使ってAWS CLI(v1)とAWS CLI v2を使い分ける(Mac, Linux編)
AWS CLI v2をソースコードからインストールする
- 投稿日:2020-02-13T06:54:56+09:00
Macのファイルやフォルダの移動
Finderでファイルやフォルダを移動する時
command + c → コピー
command + option + v → 貼り付け