AWS CLIで CloudFormationを操作する
CloudFormationのドキュメントで、コマンドラインのところでもすでに(2013.10.18現在) AWS CLIを使うようになっている。
※ こっちでは、"The prior AWS CloudFormation CLI tools are still available, but not recommended. "と書いてある
※敢えて古い api toolsを使い始めるならこちら( CloudFormaion apitoolsをAmazon Linuxで使う)を参照。
AWS CLIのセットアップ
Amazon Linuxならデフォルトで入っていてPATHも通っているので、credential 関係だけ設定する。
$ vi ~/.awscredential $ cat ~/.awscredential AWSAccessKeyId=<<your AWS access ID>> AWSSecretKey=<<your AWS secret key> > $ vi ~/.bashrc $ cat ~/.bashrc export AWS_CREDENTIAL_FILE=~/.awcredential $ source ~/.bashrc
動作確認
スタック一覧
$ aws cloudformation list-stacks --region ap-northeast-1
スタック作成(S3にあるテンプレートの場合)
$ aws cloudformation create-stack--region ap-northeast-1 \ --stack-name test \ --template-url http://s3.amazonaws.com/sample/test.template \ --parameters ParameterKey=Param1,ParameterValue=value1
スタック作成(ローカルのテンプレートの場合)
$ aws cloudformation create-stack--region ap-northeast-1 \ --stack-name test \ --template-body file:////home/ec2-user/test.template \ --parameters ParameterKey=Param1,ParameterValue=value1
スタック詳細
$ aws cloudformation describe-stacks --region ap-northeast-1 \ --stack-name test
テンプレートのチェック
$ aws cloudformation validate-template --region ap-northeast-1 \ --template-body file:////home/ec2-user/test.template
コマンドリファレンス
http://docs.aws.amazon.com/cli/latest/reference/cloudformation/index.html
CloudFormation apitoolsをAmazon Linuxで使う
CloudFormationのコマンドラインツールをセットアップする。
# すでに AWS CLIが主流ですが、、、、
インストール
インストールは大きく2つ。ダウンロードするか、Amazon Linuxなら楽にyumで。
AWS CloudFormation Command Line Tools : Developer Tools : Amazon Web Services
$ sudo yum -y install aws-apitools-cfn
環境設定
以下、まったくAWS CLIや apitoolsを設定していない場合。すでに autoscalingなどのツールを入れている場合は適宜読み返す。
$ vi ~/.awscredential $ cat ~/.awscredential AWSAccessKeyId=<<your AWS access ID>> AWSSecretKey=<<your AWS secret key>> $ vi ~/.bashrc $ cat ~/.bashrc export AWS_CLOUDFORMATION_HOME=/opt/aws/apitools/cfn export AWS_CREDENTIAL_FILE=~/.awcredential $ source ~/.bashrc
動作確認
スタックの一覧を取得
$ cfn-list-stacks
利用例
スタック作成
$ cfn-create-stack --template-file sample.template \
--stack-name sample-stack \
--region ap-northeast-1
スタックのリソース一覧表示
$ cfn-describe-stack-resources --stack-name sample-stack \
--region ap-northeast-1
RDS: MySQL5.6のプラグイン
RDS MySQL5.6と RDS MySQL5.5で、インストール済みプラグインを比べてみた
5.5
mysql> show plugins; +-----------------------+----------+--------------------+---------+---------+ | Name | Status | Type | Library | License | +-----------------------+----------+--------------------+---------+---------+ | binlog | ACTIVE | STORAGE ENGINE | NULL | GPL | | mysql_native_password | ACTIVE | AUTHENTICATION | NULL | GPL | | mysql_old_password | ACTIVE | AUTHENTICATION | NULL | GPL | | CSV | ACTIVE | STORAGE ENGINE | NULL | GPL | | MEMORY | ACTIVE | STORAGE ENGINE | NULL | GPL | | MRG_MYISAM | ACTIVE | STORAGE ENGINE | NULL | GPL | | MyISAM | ACTIVE | STORAGE ENGINE | NULL | GPL | | InnoDB | ACTIVE | STORAGE ENGINE | NULL | GPL | | INNODB_TRX | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_LOCKS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_LOCK_WAITS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_CMP | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_CMP_RESET | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_CMPMEM | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_CMPMEM_RESET | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | FEDERATED | DISABLED | STORAGE ENGINE | NULL | GPL | | PERFORMANCE_SCHEMA | ACTIVE | STORAGE ENGINE | NULL | GPL | | ARCHIVE | ACTIVE | STORAGE ENGINE | NULL | GPL | | BLACKHOLE | ACTIVE | STORAGE ENGINE | NULL | GPL | | partition | ACTIVE | STORAGE ENGINE | NULL | GPL | +-----------------------+----------+--------------------+---------+---------+ 20 rows in set (0.05 sec)
5.6
mysql> show plugins; +----------------------------+----------+--------------------+-----------------+---------+ | Name | Status | Type | Library | License | +----------------------------+----------+--------------------+-----------------+---------+ | binlog | ACTIVE | STORAGE ENGINE | NULL | GPL | | mysql_native_password | ACTIVE | AUTHENTICATION | NULL | GPL | | mysql_old_password | ACTIVE | AUTHENTICATION | NULL | GPL | | sha256_password | ACTIVE | AUTHENTICATION | NULL | GPL | | MEMORY | ACTIVE | STORAGE ENGINE | NULL | GPL | | MyISAM | ACTIVE | STORAGE ENGINE | NULL | GPL | | CSV | ACTIVE | STORAGE ENGINE | NULL | GPL | | MRG_MYISAM | ACTIVE | STORAGE ENGINE | NULL | GPL | | InnoDB | ACTIVE | STORAGE ENGINE | NULL | GPL | | INNODB_TRX | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_LOCKS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_LOCK_WAITS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_CMP | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_CMP_RESET | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_CMPMEM | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_CMPMEM_RESET | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_CMP_PER_INDEX | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_CMP_PER_INDEX_RESET | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_BUFFER_PAGE | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_BUFFER_PAGE_LRU | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_BUFFER_POOL_STATS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_METRICS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_FT_DEFAULT_STOPWORD | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_FT_DELETED | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_FT_BEING_DELETED | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_FT_CONFIG | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_FT_INDEX_CACHE | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_FT_INDEX_TABLE | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_SYS_TABLES | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_SYS_TABLESTATS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_SYS_INDEXES | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_SYS_COLUMNS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_SYS_FIELDS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_SYS_FOREIGN | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_SYS_FOREIGN_COLS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_SYS_TABLESPACES | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_SYS_DATAFILES | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | BLACKHOLE | ACTIVE | STORAGE ENGINE | NULL | GPL | | ARCHIVE | ACTIVE | STORAGE ENGINE | NULL | GPL | | PERFORMANCE_SCHEMA | ACTIVE | STORAGE ENGINE | NULL | GPL | | FEDERATED | DISABLED | STORAGE ENGINE | NULL | GPL | | partition | ACTIVE | STORAGE ENGINE | NULL | GPL | | daemon_memcached | ACTIVE | DAEMON | libmemcached.so | GPL | +----------------------------+----------+--------------------+-----------------+---------+ 43 rows in set (0.01 sec)
倍以上増えている。
INNODB_SYS_*,INNODB_FT_*, INNODB_METRICS, INNODB_BUFFER_* あたりは、全て INFORMATION SCHEMA 関連( MySQL :: MySQL 5.6 Reference Manual :: 20.30 INFORMATION_SCHEMA Tables for InnoDB )。他に目立つのはsha256_password , daemon_memcached あたり。
sha256_password
5.6で追加された SHA-256ハッシュを行うパスワードプラグイン。(従来は PASSWORD関数 ) MySQL :: Security in MySQL :: 5.7.4 The SHA-256 Authentication Plugin (5.6用 Parameter Groupsでは、 old_passwordsのAllowed Valuesが0,1で、2が設定できない?)
また、パスワードバリデーションプラグイン validate_password ではない点にも注意。MySQL :: MySQL 5.6 Reference Manual :: 6.1.2.6 The Password Validation Plugin
daemon_memcached
5.6で追加された、memcachedプロトコルのプラグイン。MySQL :: MySQL 5.6 Reference Manual :: 14.2.9 InnoDB Integration with memcached
RDSでは、デフォルトでは入っていない。Option Group でMEMCACHEDを有効にする必要がある。
INNODB_FT関連
フルテキスト検索機能関連。MySQL :: MySQL 5.6 Reference Manual :: 12.9 Full-Text Search Functions
--メモ
準同期レプリケーション ( rpl-semi-sync-master, rpl-semi-sync-slave )はRDS版5.6でも入ってないですなぁ。。。
MySQL :: MySQL 5.6 Reference Manual :: 16.3.8 Semisynchronous Replication
RDS: MySQL5.6 のDelayed Replication
RDS MySQLではデフォルトユーザにSUPER権限が付与されていない。5.6のReadReplica ( MySQL Slave)でも同様なので、レプリケーション周りの新機能が使えないことが多い。
MySQL 5.6では、Delayed Replication (遅延レプリケーション) 機能が追加されている
MySQL :: MySQL 5.6 Reference Manual :: 16.3.9 Delayed Replication
ある特定のSlaveだけReplicationの反映を任意の時間だけ遅らせる機能で、プログラムのバグやオペミスによって系全体が壊滅的な状況になるのを緩和するイメージ。参照用のSlaveではなく、バックアップ用のSlaveに設定しておくと便利そうな機能。
MySQL :: MySQL 5.6 Replication - Enabling the Next Generation of Web & Cloud Services
ただし、この設定には
CHANGE MASTER TO MASTER_DELAY=n;
を設定対象のSlaveで実行する必要があるが、冒頭で述べたようにRDSで払い出されるユーザにはSUPER権限が付与されていないため、このCHANGE MASTER TOコマンドやその前後に必要なSTART SLAVE, STOP SLAVE, RESET SLAVE を実行できない。
とはいえ、RDSでは任意の時刻の時点でRDSを復旧することが可能なPoint In TIme Recovery (PITR) があるので、大きなオペミスをした場合などはPITRで代用できると思われる。
Restoring a DB Instance to a Specified Time - Amazon Relational Database Service
RDS: MySQL5.6 のbinlogアクセス権限
RDS MySQLで、5.6のエンジンがサポートされた。
Amazon Web Services ブログ: 【AWS発表】 Amazon RDSがMySQL 5.6をサポート!
そのなかで
バイナリログアクセス - バイナリログを付属のmysqlbinlogツールを使って、ダウンロードしたりストリームすることができます。 この機能はオンプレミス環境とのデータの同期や、監査ログ、分析、レプリケーションエラーのデバッグといった様々な目的に使うことができます。この機能を利用するには、自動バックアップ機能を有効にする必要があります。
と書かれている。まずは権限の確認。ユーザ名「test」で作ったRDS MySQL5.5と5.6を比較すると
MySQL 5.5
mysql>SHOW GRANTS FOR test\G *************************** 1. row *************************** Grants for test@%: GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* TO 'test'@'%' IDENTIFIED BY PASSWORD '略' WITH GRANT OPTION
MySQL 5.6
mysql>SHOW GRANTS FOR test\G *************************** 1. row *************************** Grants for test@%: GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* TO 'test'@'%' IDENTIFIED BY PASSWORD '略' WITH GRANT OPTION
となっていて、レプリカスレーブのアクセス権限が付与されていることがわかる。
試しに、SHOW BINLOG EVENTS を実行してみると
MySQL 5.5
mysql>SHOW BINLOG EVENTS LIMIT 5; ERROR 1227 (42000): Access denied; you need (at least one of) the REPLICATION SLAVE privilege(s) for this operation
MySQL 5.6
mysql> SHOW BINLOG EVENTS LIMIT 5; +----------------------------+-----+-------------+-----------+-------------+------------------------------------------------------------------------------------------------------------------------------------+ | Log_name | Pos | Event_type | Server_id | End_log_pos | Info | +----------------------------+-----+-------------+-----------+-------------+------------------------------------------------------------------------------------------------------------------------------------+ | mysql-bin-changelog.000105 | 4 | Format_desc | 252030926 | 120 | Server ver: 5.6.12-log, Binlog ver: 4 | | mysql-bin-changelog.000105 | 120 | Query | 252030926 | 194 | BEGIN | | mysql-bin-changelog.000105 | 194 | Query | 252030926 | 330 | use `tpcc`; INSERT INTO orders values(1,4,55,2103,'2013-07-07 06:21:01',4,8, 1) | | mysql-bin-changelog.000105 | 330 | Query | 252030926 | 522 | use `tpcc`; INSERT INTO order_line values(1,4,55,1,39866,55,'2013-07-07 06:21:01',5,53.880001068115234,'0LwtP7YDbrc8dUr5bu5UuGbw') | | mysql-bin-changelog.000105 | 522 | Query | 252030926 | 712 | use `tpcc`; INSERT INTO order_line values(1,4,55,2,13887,55,'2013-07-07 06:21:01',5,94.9000015258789,'5wO9wj3n78MIkBsspMhuyZxS') | +----------------------------+-----+-------------+-----------+-------------+------------------------------------------------------------------------------------------------------------------------------------+ 5 rows in set (0.00 sec)
と、5.5ではREPLICATION SLAVE権限が付与されていないため参照できないが、5.6ではbinlogのイベントを参照できることが確認できる。
つまり、mysqlbinlog --read-from-remote-server をRDSに対して使えるようになったということ。さらに、MySQL 5.6では mysqlbinlogも3.3にバージョンアップし、リモートのファイル操作ができるようになっている。
MySQL :: MySQL 5.6 Reference Manual :: 4.6.8 mysqlbinlog — Utility for Processing Binary Log Files
特定のbinlogを手元にバイナリのままコピーする --raw オプション(従来はtext表示だった)とそれに付随するオプション群が機能強化ポイント。
特定のbinlogを手元にコピーするには
[ec2-user@ip-10-0-2-64 ~]$ mysqlbinlog -utest -ptesttest -h test.xxx.ap-northeast-1.rds.amazonaws.com --read-from-remote-server --raw mysql-bin-changelog.000121 [ec2-user@ip-10-0-2-64 ~]$ ls mysql-bin-changelog.000121
複数のbinlogを手元にコピーするには
[ec2-user@ip-10-0-2-64 ~]$ mysqlbinlog -utest -ptesttest -h test.xxx.ap-northeast-1.rds.amazonaws.com --read-from-remote-server --raw mysql-bin-changelog.000121 mysql-bin-changelog.000122 [ec2-user@ip-10-0-2-64 ~]$ ls mysql-bin-changelog.000121 mysql-bin-changelog.000122
特定のbinlog以降のログを手元にコピーするには
[ec2-user@ip-10-0-2-64 ~]$ mysqlbinlog -utest -ptesttest -h test.xxx.ap-northeast-1.rds.amazonaws.com --read-from-remote-server --raw --to-last-log mysql-bin-changelog.000121 [ec2-user@ip-10-0-2-64 ~]$ ls mysql-bin-changelog.000121 mysql-bin-changelog.000122 mysql-bin-changelog.000123 mysql-bin-changelog.000124
特定のbinlog以降のログを半永久的に手元にコピーするには
[ec2-user@ip-10-0-2-64 ~]$ mysqlbinlog -utest -ptesttest -h test.xxx.ap-northeast-1.rds.amazonaws.com --read-from-remote-server --raw --stop-never mysql-bin-changelog.000121 ^C [ec2-user@ip-10-0-2-64 ~]$ ls mysql-bin-changelog.000121 mysql-bin-changelog.000122 mysql-bin-changelog.000123 mysql-bin-changelog.000124 .....
手元のbinlogにプレフィックスをつけてRDSインスタンスごとの識別をする
[ec2-user@ip-10-0-2-64 ~]$ mysqlbinlog -utest -ptesttest -h test.xxx.ap-northeast-1.rds.amazonaws.com --read-from-remote-server --result-file=test_ --raw mysql-bin-changelog.000121 [ec2-user@ip-10-0-2-64 ~]$ ls
test_mysql-bin-changelog.000121
注意:RDSでは、自動バックアップ( Automatic Backup) を有効にし、かつ、Backup Retention Period を1日以上に設定している場合にbinlogを出力するので、binlogが無い場合はRDSのバックアップ設定を見直す。
RDS: MySQL 5.1 -> 5.5 メジャーバージョンアップ機能の挙動
Amazon Web Services ブログ: 【AWS発表】 Amazon RDS - MySQLのメジャーバージョンアップグレード機能を追加
ということで、早速動作確認のため、 MySQL 5.1なRDS( db.t1.micro, 5GB) を起動し、Modifyで5.5へ変更。
DB Eventsとしては以下のとおり。
Modifyしてすぐにシャットダウン、バックアップ、再起動した後、パッチ当てて再度バックアップ取られてた。
DBスナップショットのAutomated Snapshotsをみてみると、
- Snapshot Creation Time: 2013 June 21 15:26:05 UTC+9
- DB Engine Version: 5.5.31
というのが残っていた。 1回目のやつは、2回めの時に消された?
時間については、インスタンスタイプや、ストレージ容量によって変わるかもしれないので、参考程度に。
EBS: Provisioned IOPSの性能・ベンチマーク
そのものずばりのページが、EC2のドキュメントにあるので、メモ。
Increasing EBS Performance - Amazon Elastic Compute Cloud
性能を出すには
- RAID0かRAID1+0 (RAID10) でストライピング
- 平均キューレングスをチェック
- EBSボリューム利用前にプリロード(※)しておく
- EBS-Optimized インスタンスを使う
とか。
プリロード
$ dd if=/dev/sdf of=/dev/null
をやっておく。(と上記URLにも書いてある)
PIOPSは、ブロックサイズ16KBなので fioをかけるときも --bs=16kをつけている
fio --directory=/media/p_iops_vol0
--name fio_test_file --direct=1 --rw=randwrite --bs=16k --size=1G
--numjobs=16 --time_based --runtime=180 --group_reporting
4KBとか8KBのベンチのときは、指定したIOPSとはかけ離れた値が出る場合があるので、適宜、脳内補正が必要となる。