AWS CLI ver.2 を CentOS 7 に入れなおす方法

AWS Command Line Interface CentOS 7
このサイトはアフィリエイト広告(Amazonアソシエイト含む)を掲載しています。
スポンサーリンク

AWS CLI(Command Line Interface)を使うと、コマンドラインから AWS の複数のサービスを制御する事ができ、スクリプトで自動化することができます。

EC2 上の CentOS7 で yum にてインストールした AWS CLI を使って、MySQL のダンプデータを S3 にバックアップしていましたが、最近(2022年4月以降)エラーで動かなくなってしまいました。

aws
(out) Traceback (most recent call last):
(out)   File "/bin/aws", line 19, in <module>
(out)     import awscli.clidriver
(out)   File "/usr/lib64/python2.7/site-packages/awscli/clidriver.py", line 37, in <module>
(out)     from awscli.help import ProviderHelpCommand
(out)   File "/usr/lib64/python2.7/site-packages/awscli/help.py", line 24, in <module>
(out)     from botocore.docs.bcdoc import docevents
(out) ImportError: cannot import name docevents

バックアップの根幹部分に関わるので、AWS の公式で配布しているインストーラーで入れなおして対応しましたので、記録しておきます。

環境

  • AWS EC2 アジアパシフィック (東京) リージョン
  • CentOS Linux release 7.9.2009 (Core)
  • AWSCLI 1.14.28-5.el7_5.1(CentOS7 の Base リポジトリから yum でインストール)

再設定の手順

AWS CLI のアンインストール

まずは yum でインストールした AWS CLI を削除します。

yum remove awscli
(out) Loaded plugins: fastestmirror
(out) Resolving Dependencies
(out) --> Running transaction check
(out) ---> Package awscli.noarch 0:1.14.28-5.el7_5.1 will be erased
(out) --> Finished Dependency Resolution
(out) 
(out) Dependencies Resolved
(out) 
(out) =============================================================================================================================================================
(out)  Package                            Arch                               Version                                       Repository                         Size
(out) =============================================================================================================================================================
(out) Removing:
(out)  awscli                             noarch                             1.14.28-5.el7_5.1                             @base                             3.7 M
(out) 
(out) Transaction Summary
(out) =============================================================================================================================================================
(out) Remove  1 Package
(out) 
(out) Installed size: 3.7 M
(out) Is this ok [y/N]: y
(out) Downloading packages:
(out) Running transaction check
(out) Running transaction test
(out) Transaction test succeeded
(out) Running transaction
(out)   Erasing    : awscli-1.14.28-5.el7_5.1.noarch                                                                                                           1/1
(out)   Verifying  : awscli-1.14.28-5.el7_5.1.noarch                                                                                                           1/1
(out) 
(out) Removed:
(out)   awscli.noarch 0:1.14.28-5.el7_5.1
(out) 
(out) Complete!

AWS CLI バージョン 2 のインストール

公式サイトから awscliv2.zip をダウンロードして、手順通りにインストール。

AWS CLI の最新バージョンのインストールまたは更新 - AWS Command Line Interface
システムに AWS CLI をインストールまたは更新する手順。
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
./aws/install
(out) You can now run: /usr/local/bin/aws --version
/usr/local/bin/aws --version
(out) aws-cli/2.6.3 Python/3.9.11 Linux/3.10.0-1160.42.2.el7.x86_64 exe/x86_64.centos.7 prompt/off

aws コマンドのパスが通っていなかったので、シンボリックリンクを作成しました。

aws
(out) -bash: /bin/aws: No such file or directory
ln -s /usr/local/bin/aws /usr/bin/aws

権限の設定

AWS CLI から AWS のリソースにアクセスするために、IAM で権限を付ける必要があります。

私は設定済みでしたが、新規の場合は公式サイトの手順通りに済ませてください。

AWS CLI バージョン 2 を使用するための前提条件 - AWS Command Line Interface
AWS Command Line Interface バージョン 2 をシステムにインストールする前に、AWS アカウントと IAM 認証情報が必要です。

IAM のアクセスキーを AWS CLI に登録します。

のセットアップAWS CLI - AWS Command Line Interface
AWS Command Line Interfaceが AWS のサービスでリソースを操作するために使用する基本設定をすばやく設定する方法について説明します。
aws configure
(out) AWS Access Key ID [****************MPLE]: AKIAIOSFODNN7EXAMPLE
(out) AWS Secret Access Key [****************EKEY]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
(out) Default region name [ap-northeast-1]: ap-northeast-1
(out) Default output format [text]: text

※以前の設定が /root/.aws/config と /root/.aws/credentials に残っていたので、私の状況のように一度設定が終わっていて、切り替えの場合はこの手順は不要かもしれません。

後片付け

rm awscliv2.zip -f
rm aws -fr

まとめ

最初の導入時に苦労した印象がありましたが、入れ替えは yum でアンインストールして、ダウンロードしたファイルをインストールし直すだけの簡単な作業でした。

実際のコード

MySQL のバックアップを書き出して、直後に S3 にもコピーを取るには次の様にします。

#!/bin/bash

PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/bin

# バックアップ先ディレクトリ
BACKDIR=/backup/mysql

# MySQLrootパスワード
ROOTPASS=xxxxxxxx

# バックアップ先ディレクトリ再作成
rm  -rf $BACKDIR
mkdir -p $BACKDIR

# データベース名取得
DBLIST=`ls -p /var/lib/mysql | grep / | tr -d /`

# データベースごとにバックアップ
for dbname in $DBLIST
do
    [ $dbname = "performance_schema" ] && continue
    table_count=`mysql -u root -p$ROOTPASS -B -e "show tables" $dbname|wc -l`
    [ $table_count -ne 0 ] &&
    mysqldump --events -u root -p$ROOTPASS $dbname > $BACKDIR/$dbname.sql | logger -t mysqldump
done

# S3 Sync
aws s3 sync $BACKDIR s3://example-bucket/mysql/ --exact-timestamps --delete

MySQL の自動バックアップは下記のサイトのものを使わせて頂いております。パスの追加と最後に S3 に同期する行を追加しています。あとは Cron で定期実行すれば完成です。

MySQLデータベース自動バックアップ運用(mysqldump) - CentOSで自宅サーバー構築
MySQLデータベース自動バックアップ運用(mysqldump)

コメント

タイトルとURLをコピーしました