AWS CLIで複数アカウントを利用する
AWS CLIで複数アカウントを利用する
火, 3月 7, 2017
やりたいこと
- AWS CLIを使う
- 複数のアカウント(IAMユーザなど)を切り替える
AWS CLI
導入は
pip install awscli
だけ.
プロファイルの設定
# 設定を開始
$ aws configure
#AWS Access Key ID [None]: XXXXXXXXXXXX
#AWS Secret Access Key [None]: XXXXXXXXXXXXXXXXXXXXXXXX
#Default region name [None]: ap-northeast-1
#Default output format [None]: json
これでAccess Key ID
,Secret Access Key
,リージョン
,出力フォーマット
をそれぞれ指定すれば,
~/.aws/config
と~/.aws/credentials
に設定が書き込まれる.
# ~/.aws/config
[default]
output = json
region = ap-northeast-1
# ~/.aws/credentials
[default]
aws_access_key_id = XXXXXXXXXXXX
aws_secret_access_key = XXXXXXXXXXXXXXXXXXXXXXXX
現在(2017-03-07)指定できるリージョンは
- us-east-1 米国東部(バージニア北部)
- us-east-2 米国東部 (オハイオ)
- us-west-1 米国西部 (北カリフォルニア)
- us-west-2 米国西部 (オレゴン)
- ca-central-1 カナダ (中部)
- eu-west-1 欧州 (アイルランド)
- eu-central-1 欧州 (フランクフルト)
- eu-west-2 欧州 (ロンドン)
- ap-northeast-1 アジアパシフィック (東京)
- ap-northeast-2 アジアパシフィック (ソウル)
- ap-southeast-1 アジアパシフィック (シンガポール)
- ap-southeast-2 アジアパシフィック (シドニー)
- ap-south-1 アジアパシフィック (ムンバイ)
- sa-east-1 南米 (サンパウロ)
基本的な使い方
json
でデータを返す設定で使うことが多いみたいなので,jqを使うと便利.
macOSの場合はhomebrewで簡単に導入できる.
brew install jq
EC2
インスタンスの作成と削除
# 自分が作成したイメージの一覧
aws ec2 describe-images --owners self | jq '.Images[] | [.ImageId, .Name, .Description]' --compact-output
# キーペアの一覧
aws ec2 describe-key-pairs | jq '.KeyPairs[].KeyName'
# セキュリティグループの一覧
aws ec2 describe-security-groups | jq '.SecurityGroups[] | [.GroupId, .GroupName, .Description]' --compact-output
# インスタンスの作成(インスタンスIDを返す)
aws ec2 run-instances --image-id [ImgID] --key-name [KeyPair] --security-group-ids [SectyID] --count 1 --instance-type t2.micro | jq '.Instances[].InstanceId'
# タグで名前をつける
aws ec2 create-tags --resources [ID] --tags '[{"Key":"Name", "Value":"TestCLI"}]'
# インスタンスのID,状態,名前の一覧を表示(runningになっているかを確認)
aws ec2 describe-instances --profile biomet | jq '.Reservations[].Instances[] | [.InstanceId, .Tags, .State.Name]' --compact-output
# インスタンスのIDを指定して削除
aws ec2 terminate-instances --instance-ids [ID]
# インスタンスのID,状態,名前の一覧を表示(terminatedになっているかを確認)
aws ec2 describe-instances --profile biomet | jq '.Reservations[].Instances[] | [.InstanceId, .Tags, .State.Name]' --compact-output
[ImgID]
,[SectyID]
と[ID]
は適切なイメージID,セキュリティグループとインスタンスIDを指定する.
インスタンスの起動と停止
# インスタンスのID,状態,名前の一覧を表示
aws ec2 describe-instances | jq -r '.Reservations[].Instances[] | .InstanceId + "\t" + .State.Name + "\t" + .Tags[].Value'
# インスタンスのIDを指定して起動
aws ec2 start-instances --instance-ids [ID]
# 起動の確認
aws ec2 describe-instance-status --instance-ids [ID]
# 情報を絞る
aws ec2 describe-instance-status --instance-ids [ID] | jq '.InstanceStatuses[] | {InstanceId, InstanceState: .InstanceState.Name, SystemStatus: .SystemStatus.Status, InstanceStatus: .InstanceStatus.Status}'
# インスタンスのIDを指定して停止
aws ec2 stop-instances --instance-ids [ID]
# 停止の確認(ID,状態,名前の一覧取得と基本は同じ)
aws ec2 describe-instances | jq -c '.Reservations[].Instances[] | {InstanceName: .Tags[] | select(.Key == "Name").Value, InstanceId, InstanceState: .State.Name}'
# 情報を絞る
aws ec2 describe-instances | jq -c '.Reservations[].Instances[] | {InstanceName: .Tags[] | select(.Key == "Name").Value, InstanceId, InstanceState: .State.Name} | select(.InstanceId == "[ID]")'
S3
バケット操作
# バケットの作成
aws s3 mb s3://[Name]
# リージョンを指定して作成
aws s3 mb s3://[Name] --region us-west-1
# バケットの削除(中身があるとエラー)
aws s3 rb s3://[Name]
# 中身が合っても削除
aws s3 rb s3://[Name] --force
[Name]
は適当なバケット名.
ファイル操作
基本的にはUnixコマンドと同じように使える.
# ローカル -> S3
aws s3 cp test.jpg s3://[Name]/testDir/testCP.jpg # コピー
aws s3 mv test.jpg s3://[Name]/testDir/testMV.jpg # 移動
# S3 -> ローカル
aws s3 cp s3://[Name]/testDir/testCP.jpg ./
aws s3 cp s3://[Name]/testDir/testMV.jpg ./
# ローカル -> S3 再帰(ディレクトリ全体の操作)
aws s3 cp test s3://[Name]/testDir/test # コピー
aws s3 mv test s3://[Name]/testDir/test # 移動
# S3 -> ローカル 再帰(ディレクトリ全体の操作)
aws s3 cp s3://[Name]/testDir/test test # コピー
aws s3 mv s3://[Name]/testDir/test test # 移動
# 確認
aws s3 ls
aws s3 ls s3://[Name]
# オブジェクト削除
aws s3 rm s3://[Name]/testDir/testCP.jpg
aws s3 rm s3://[Name]/testDir --recursive
aws s3 rm s3://[Name] --recursive # バケットの中身すべてが削除される(バケット自体は削除されない)
# 同期 rsyncのようなコマンド
aws s3 sync test s3://[Name]/testDir/test
# 次回からは差分だけがコピーされる
aws s3 sync test s3://[Name]/testDir/test
# 削除も同期
aws s3 sync test s3://[Name]/testDir/test --delete
複数のプロファイル
設定
コマンドから設定する場合は,オプションで名前を指定し情報を入力する.
# 設定を開始
$ aws configure --profile alternative
#AWS Access Key ID [None]: YYYYYYYYYYYY
#AWS Secret Access Key [None]: YYYYYYYYYYYYYYYYYYYYYYYY
#Default region name [None]: us-west-2
#Default output format [None]: json
設定が増えている.
# ~/.aws/config
[default]
output = json
region = ap-northeast-1
[alternative]
output = json
region = us-west-2
# ~/.aws/credentials
[default]
aws_access_key_id = XXXXXXXXXXXX
aws_secret_access_key = XXXXXXXXXXXXXXXXXXXXXXXX
[alternative]
aws_access_key_id = YYYYYYYYYYYY
aws_secret_access_key = YYYYYYYYYYYYYYYYYYYYYYYY
使い方
オプションを付けてプロファイルを指定する.
aws ec2 describe-key-pairs --profile alternative | jq '.KeyPairs[].KeyName'
aws s3 mb s3://[Name] --profile alternative
参考
最終更新日