#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')


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS