aws memo

AWS関連の備忘録 (※本ブログの内容は個人的見解であり、所属組織及び企業の意見を代弁するものではありません。1年以上古いエントリは疑ってかかってください)

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 Time Delayed Replication

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としては以下のとおり。

TimeSourceSystem Notes
2013 June 21 15:28:02 UTC+9
test51
Finished DB Instance backup
2013 June 21 15:25:54 UTC+9
test51
Backing up DB instance
2013 June 21 15:25:47 UTC+9
test51
Database instance patched
2013 June 21 15:25:47 UTC+9
test51
Finished DB Instance backup
2013 June 21 15:25:16 UTC+9
test51
DB instance restarted
2013 June 21 15:23:39 UTC+9
test51
Backing up DB instance
2013 June 21 15:23:23 UTC+9
test51
DB instance shutdown
2013 June 21 15:22:14 UTC+9
test51
Updated to use a DBParameterGroup default.mysql5.5

 

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とはかけ離れた値が出る場合があるので、適宜、脳内補正が必要となる。