#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 [--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ライブラリ。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')