はじめてのAWS CLI
Nobuhiro Nakayama / 2016/9/17 / JAWS-UG 秋の大分熊本勉強会ツアー@大分
me.json
{
"name":"Nobuhiro Nakayama",
"company":"UCHIDAYOKO CO., LTD.",
"favorite aws services": [ "IAM", "AWS CLI“ ],
"certifications":[
"AWS Certified Solutions Architect-Professional",
"AWS Certified SysOps Administrator-Associate",
]
}
Agenda
 AWS CLIとは?
 なぜAWS CLIを使うのか
 AWS CLIの使い方
 Demo
 Tips
AWS CLIとは
AWS CLIとは?
 AWSを操作するためのコマンドラインツール
 コマンドライン = 黒いアレ
 AWSを操作する方法はいろいろ/CLIはその一つ
 Management Console(ブラウザ)
 SDK
 CLI
CLIとAWS Tools for Windows PowerShellがある(今日はCLIについてお話しします)
AWS CLI
 様々なプラットフォームに対応
 Windows、Linux、Mac
 大半のサービスをサポート
 http://docs.aws.amazon.com/cli/latest/reference/
 CloudFrontがずっとPreview・・・
なぜAWS CLIを使うのか
CLIはいいぞ
なぜAWS CLIを使うのか
 手順書をメンテナンスしやすい
 作業ミスの予防
 作業の効率化
 AWSの理解を深めるため
Management Consoleの手順書の場合・・・
 手順書作りは刺身タンポポ
 スクリーンキャプチャ地獄
 デザインの変更への追従
 「またExcelに画像を貼り付ける仕事がはじまるお・・・」
?!
AWS CLIの手順書の場合・・・
 (慣れるまでは)作成がすこし大変
 各種確認も含めた手順の確立が必要
 作った手順書の利用は(いい意味で)刺身タンポポ
 変数に案件固有のパラメータを設定したら、あとは手順書通りに実行するだけ
 メンテナンス頻度の低下(APIはほとんど変わらない)
 属人性の排除
 「スクリーンキャプチャしてる場合じゃねぇ!」
「頻繁に実施する作業」に対しては手順書を作りましょう
AWS CLIの手順書の場合・・・
各種ドキュメンテーションツール
 Sphinx
 CLI専門支部創設者推奨!
 Wiki
 latex
 esa.io
 Qiita:Team
 Excel
【宣伝】JAWS-UG CLI専門支部
 運用エンジニアのためのAWS CLI勉強会
 手順書はすべて公開
 http://qiita.com/tcsh/items/b55eee599ae2c8806e4f
 隔週月曜に本編を開催
 https://jawsug-cli.doorkeeper.jp/
 毎月1回の朝会も開始
 http://jawsug-asa.connpass.com/
AWS CLIの使い方
AWS CLIの使い方
1. インストール
2. 認証情報およびリージョンの設定
大きくはこの2つだけ
インストーラのダウンロード、インストール
 Windows:msi (32bit/64bit)
 AWS公式サイトへ
 Linux:pip(Python 2.6.5以上が必要)
 Pip:Pythonのパッケージ管理システム
 Amazon LinuxはAWS CLIがプリインストール
yumでアップデートしても最新になってない場合はpipで
 Bundle Installも可能(手順は公式ドキュメントで)
認証情報とリージョンの設定
1. IAMユーザの作成
2. 権限の付与
3. アクセスキーの発行
4. 認証情報とリージョンの設定
1.IAMユーザの作成
 最初のIAMユーザはManagement Consoleから作成
 作成時にアクセスキーを発行することも、後から発行することも可能
1. IAMユーザの作成
2.権限の付与
 IAMユーザに権限を付与
 ユーザに直接付与することもできるが、
IAMグループに権限を付与し、そのグループにユーザを参加させる方が良い
 権限は管理ポリシーとインラインポリシーの2つの方法で定義可能
2.権限の付与(管理ポリシーの場合)
2.権限の付与(管理ポリシーの場合)
2.権限の付与(管理ポリシーの場合)
3.アクセスキーの発行
 各ユーザ毎に発行することができる
 ユーザあたり2つまで
 削除する以外に、一時的に「無効化」することも可能(後で有効化できる)
 最後の利用日時も確認できる
3.アクセスキーの発行
3.アクセスキーの発行
3.アクセスキーの発行
4.認証情報とリージョンの設定
 aws configureコマンドで設定可能
 ウィザード形式で設定を入力
 設定ファイルを直接編集することも可能
~/.aws/credentials:認証情報
~/.aws/config:デフォルトリーション、アウトプットの形式など
 認証情報はプロファイルとして複数保持することができる
コマンド設定時や実行時にプロファイルを指定することで認証情報の切り替えるが可能
--profile “プロファイル名”
4.認証情報とリージョンの設定
 コマンド
 結果
> aws configure
AWS Access Key ID [None]:
AWS Secret Access Key [None]:
Default region name [None]:
Default output format [None]:
4.認証情報とリージョンの設定
 コマンド
 結果
> aws configure list
Name Value Type Location
---- ----- ---- --------
profile <not set> None None
access_key ****************RDPA iam-role
secret_key ****************9GA8 iam-role
region ap-northeast-1 env AWS_DEFAULT_REGION
【参考】assume role
 IAMロールに設定された権限を持ったクレデンシャル(認証情報)を
発行する機能
 STS(Security Token Service)
 アクセスキー/シークレット/セッショントークンが発行される
 認証情報には有効期限がある
 予め信頼関係を設定された対象にのみ、認証情報を発行させることができる
 セキュアなシステムを構成するために欠かせない
【参考】assume role ?
 インスタンスプロファイルを設定したEC2インスタンスでは、
認証情報をメタデータとして自動取得
Demo
「JAWS-UG AWS CLI カンファレンス 2016 ミニハンズオン」をちょっとだけ。
http://qiita.com/domokun70cm/items/d3ef69dcf9ddcdbd093c
アプリケーション
アプリケーションバージョン
Ver. 1
環境 設定
EC2
ELB
AS
SNS
やってみること
Tips on Linux / Mac
On Linux / Mac
Tips
 手順を再利用しやすくしよう
 変数展開
 ヒアドキュメント
 JSONを手軽に扱おう
 JSONのクエリ(--queryオプション/jp.py)
 JSONファイルの検証(jsonlint)
変数展開
 手順を再利用しやすくするため、パラメータ部分を変数に
 コマンド実行時に展開
変数展開
 利用例
> EB_APP_NAME="AWS CLI Conf Elastic Beanstalk Application 20160718"
> aws elasticbeanstalk describe-applications ¥
--application-names "${EB_APP_NAME}"
ヒアドキュメント
 JSONなどのテキストを生成するのに便利
 パラメータは変数化して再利用しやすく
 AWS CLIではパラメタとしてJSONファイルを渡すことが多いので、
覚えておくと便利
ヒアドキュメント
 利用例
 [JAWS-UG CLI] Amazon KMS 入門 (1) カスタマーマスターキーの作成
http://qiita.com/domokun70cm/items/2606cf7cf3e84f64f2ab#%E3%83%9D%E3%83%AA%
E3%82%B7%E3%83%BC%E3%81%AE%E7%94%9F%E6%88%90
--queryオプション
 --queryでレスポンスから必要な情報だけを抽出できる
 JMESPath:クエリ言語
 パース、フィルタ、整形など
 実行結果のレスポンスがJSONの場合が多いため、利用は不可避
--queryオプション
 利用例(オプションなし)
> aws elasticbeanstalk create-application ¥
--application-name "${EB_APP_NAME}"
{
"Application": {
"ApplicationName": "AWS CLI Conf Elastic Beanstalk Application",
"ConfigurationTemplates": [],
"DateUpdated": "2016-06-25T09:10:37.175Z",
"DateCreated": "2016-06-25T09:10:37.175Z"
}
}
--queryオプション
 利用例(オプションあり)
> aws elasticbeanstalk create-application ¥
--application-name “${EB_APP_NAME}” ¥
--query Application.DateCreated
" 2016-06-25T09:10:37.175Z "
jp.py
 レスポンスを一旦ファイルに出力した後にパースしたい場合に便利
 クエリの書き方は--queryと同様
 AWS CLIに同梱
 jqの代替
jp.py
> aws iam create-access-key ¥
--user-name ${ADMIN_NAME} ¥
> ${ADMIN_NAME}.json ¥
&& cat ${ADMIN_NAME}.json
{
"AccessKey": {
"UserName": "jawsug-cli-admin",
"Status": "Active",
"CreateDate": "2016-08-06T05:55:49.222Z",
"SecretAccessKey": "****************************************",
"AccessKeyId": "********************"
}
}
jp.py
> ADMIN_ACCESS_KEY=$( ¥
cat ${ADMIN_NAME}.json ¥
| jp.py 'AccessKey.AccessKeyId' ¥
| sed 's/"//g') ¥
&& echo ${ADMIN_ACCESS_KEY}
{
"AccessKey": {
"UserName": "jawsug-cli-admin",
"Status": "Active",
"CreateDate": "2016-08-06T05:55:49.222Z",
"SecretAccessKey": "****************************************",
"AccessKeyId": "********************"
}
}
jsonlint
 JSONファイルの検証を行ってくれるツール
 壊れている部分を指示してくれる
 長いJSONファイルは人間がチェックするものではない!
jsonlint
 インストール(Amazon Linux等の場合)
> sudo yum install npm --enablerepo=epel –y
> sudo npm install -g jsonlint
jsonlint
 利用例
> jsonlint -q test.json
jsonlint
 注意点
 JSON形式になっているかは検証してくれますが、
パラメータなど中身の妥当性(idが存在するかなど)までは検証しません。
まとめ
CLIはいいぞ
 オペレーションをより手堅く
 ルーチンワークにかける時間を圧縮
 AWSに対する理解も深まる
おしまい
楽するためにがんばろう
参考資料
 AWS Black Belt Tech シリーズ 2015 AWS CLI & AWS Tools for
Windows Powershell
 http://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-tech-2015-aws-
cloudtrail-aws-sdk-for-powershell
 [JAWS-UG CLI] 総合案内
 http://qiita.com/tcsh/items/14c3278f69ab073afe0f
 npm
 https://www.npmjs.com/

はじめてのAWS CLI