こんにちは。streampackのtsuchiです。

はじめに

AWS S3署名バージョン2が廃止される予定です。
そこで実際に行った対応について、簡単に残しておきます。

具体的にいうと、あるEC2インスタンス内で利用している
AWS CLIのバージョンが古かったため、最新版にアップグレードしました。

どんな対応が必要?

まず、AWSドキュメントを読んでみます。

Amazon S3 の AWS 署名バージョン 2 がオフ (廃止)

このうち、AWS CLIに限った部分を抜粋します。

この SDK または製品を使用する場合 この SDK バージョンにアップグレード Sigv4 を使用するために、クライアントでコード変更が必要ですか。
AWS CLI 1.11.108 にアップグレード はい

これを要約すると、下記のようになります。

AWS CLIが【1.11.108】より古いバージョンの場合、
S3へのAPIリクエストが「署名バージョン2」になっているため、アップデートが必要になる。

ちなみに、現在のS3署名バージョンを確認する方法は、
下記の記事を参考にさせていただきました。

Athena で S3 署名バージョン2の利用状況レポートを作成する

対応(pip install –upgrade awscli)

OS別に対応を記載します。

Amazon Linux

Amazon Linux に AWS CLI をインストールする

# aws --version
# pip install --upgrade awscli

Amazon Linuxの場合、これだけで済みます。とっても簡単。

CentOS

Linux に AWS CLI をインストールする

CentOSの場合、ひと手間かかってしまいます。

# aws --version
# pip install awscli --upgrade --user

ここまでは、Amazon Linuxとあまり変わらず。

# export PATH=~/.local/bin:$PATH
# source ~/.bash_profile

環境変数を設定すると、awsコマンドが使えるようになります。

# vi ~/.bash_profile
# source ~/.bash_profile

.bash_profileを直接変更しても問題ありません。

他の方法(シンボリックリンク設定)

「環境変数を変更するのは嫌だ」という方は
元々の場所に新規ファイルのシンボリックリンクを設定することで、解決します。

実際に/usr/bin/awsが置かれているEC2インスタンスで、下記を実施しました。

前提
  • aws-cliは、pipではなくzipファイルでインストール済み。
  • OSは、CentOS 6.8。
# which aws
/usr/bin/aws

/usr/bin/awsがあります。

# pip install awscli --upgrade --user

pipコマンドで、AWS CLIをアップグレードします。

# find / -name aws
/root/.local/bin/aws
/usr/bin/aws

/root/.local/bin/ に新しい aws が作られます。

# mv /usr/bin/aws /usr/bin/aws.bak
# ln -s /root/.local/bin/aws /usr/bin/aws

# ls -la /usr/bin/aws
lrwxrwxrwx 1 root root 20  5月  8 15:00 2019 /usr/bin/aws -> /root/.local/bin/aws

古い aws をバックアップ用として残しておき、
シンボリックリンクを設定して、新しい aws に置き替えます。

この方法だと環境変数を変えることなく、新しいAWS CLIを利用することができます。

参考

元記事はこちら

【SigV4対応】AWS CLI アップグレード方法