- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2020-05-01T00:33:33+00:00","default:wikiadmin","wikiadmin")
-AWSをコマンドから管理する。cloudwatchにはJavaのツールもあるようだが、シンプルに実行できるPython版CLIで実施
#contents
*トラブルシューティング [#yda2b255]
|An error occurred (RequestTimeTooSkewed) when calling the ListBuckets operation: The difference between the request time and the current time is too large.|時間がずれているとき|
*IAMユーザーの作成とキーの配布 [#q2e8a6c9]
ROOTアカウントをそのまま使うのは危険なので、適切な権限を与える。セキュリティキーはコンソールから簡単に再発行できるので、定期的に使い捨てるように!
*aws-cliのインストール [#gca3e532]
**インストール [#z8e72655]
-EPELリポジトリをインストールしてから、python-pipインストール
rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum --enablerepo=epel search python-pip
pip install awscli
**コード補間 [#p5802613]
-以下のコマンドを打ち込むとコード補間が可能になる。
complete -C aws_completer aws
**設定 [#m8f86b58]
-利用開始前にIAMのキーとパスワードと地域を設定する。デフォルトのフォーマットはJSONなのでjqと合わせると操作しやすい。
aws configure
aws configure [--profile=任意の名前]
aws configure
AWS Access Key ID [None]: IAMのアクセスキー
AWS Secret Access Key [None]: IAMのアクセスキー
Default region name [None]: ap-northeast-1
Default output format [None]:
*各種操作 [#c519585a]
**route53 [#j1ff7f5c]
まずはホストゾーン一覧にてIDを取得するべし。
|目的|コマンド|パイプでjq絞り|
|ホストゾーン一覧|aws route53 list-hosted-zones|jq -c -r '.HostedZones[].Id'|
|登録内容一覧|aws route53 list-resource-record-sets --hosted-zone-id|jq -c -r '.ResourceRecordSets[].Name'|
**s3 [#yce0458b]
s3のバケット名に.を含むとaws s3 cpが失敗するバグに悩み中。
|バケット一覧|aws s3 ls|
|ローカルファイルをs3へ|aws s3 cp pukiwiki-1_5_0_utf8.zip s3://バケット名/パス/|
|s3ファイルをローカルへ|aws s3 cp s3://バケット名/パス/ファイル名 ローカルファイル名|
|ミラーリングs3からローカルへ| aws s3 sync s3://バケット名/パス /var/tmp/s3temp/|
|ミラーリングローカルからs3へ| aws s3 sync /var/tmp/s3_temp s3://バケット名/パス|
**s3copyでワイルドカードを利用する。 [#s6ad50e1]
ワイルドカードはフルパスでの一致なので注意。--dryrunオプションをつけて実行結果を確認すべし。
aws s3 cp --exclude="*" --include "*201601*" s3://バケット名/パス名 ローカルフォルダ --dryrun --recursive
また--exclude="*"は意味がないように見えるかもしれないがこれを付けないとincludeが機能しなかった。また該当ファイルがパス以下のディレクトリに存在する場合は--recursiveを付けておく。
**EC2 [#g4e840ae]
|aws ec2 describe-instances|一覧|
|aws ec2 start-instances --instance-ids インスタンスID|起動|
|aws ec2 stop-instances --instance-ids インスタンスID|終了|
|aws ec2 terminate-instances --instance-ids インスタンスID|削除までできてしまう!|
オプションで絞ることが可能。running or stopped or terminatedなど
aws ec2 describe-instances --filter "Name=instance-state-name,Values=running"
aws ec2 describe-instances --instance-ids インスタンスID
**Snapshot [#e7fe5692]
***注意点 [#u1221d8f]
rootデバイスは停止必須とのこと
http://docs.aws.amazon.com/cli/latest/reference/ec2/create-snapshot.html
***実際のコマンド [#afc130a8]
#--dry-runを付けて権限などの確認をしてから実施。
aws ec2 create-snapshot --volume-id ボリュームID --description "test from cli"
aws ec2 create-snapshot --volume-id ボリュームID --description "test from cli" --dry-run
#snapshot-idを与えて確認
aws ec2 describe-snapshots --snapshot-ids=上記スナップショットID
#削除
aws ec2 delete-snapshot --snapshot-id=snap-47b67c78
**JQを組み合わせて結果を絞る。 [#a5e0459c]
-インストール
sudo yum install jq
-絞り込み。JSONのフォーマットを知らないとダメだが、JQで絞ると後続に渡しやすい。InstanceIdの部分をPbulicIpAddressなどに変えれば任意の情報を得られるぞ
aws ec2 describe-instances | jq '.Reservations[].Instances[].InstanceId'
-複数項目を並べる。
aws ec2 describe-instances | jq '.Reservations[].Instances[] | {InstanceId, InstanceType, PublicIpAddress, PrivateIpAddress}'
*boto3 [#q8811567]
Pythonライブラリ。ansibleでも利用している。
Pythonライブラリ。Lambdaでもansibleでも利用している。
**インストールとキーの設定 [#v6f04011]
sudo pip install boto3
**デフォルトではdefaultプロファイルを使うので内部でsessionオプジェクトを作成する [#w68ea92a]
-profile指定
session = Session(profile_name=profile)
sqs = session.client('sqs')
-デフォルトprofile (AWS_PROFILEの環境変数で利用するprofileを上書き可能)
# aws
sqs = boto3.client('sqs')