LoginSignup
7
5

More than 5 years have passed since last update.

DataPipeline で RDS to S3 を使ったメモ

Posted at

設定にハマって六時間かかって悲しかった。

公式で言うと Full Copy of RDS MySQL Table to S3 -- docs.aws.amazon.com あたりの事。

ハマった原因は、ボクが理解してなかったVPCまわりの仕組みと、これに使うにあたって必要なSecurityGroupの仕組み、複数ある default と使用する default の違いです。

とりあえずハマっていた時のエラーメッセージ

EC2インスタンスの立ち上げ失敗

The specified instance type can only be used in a VPC. A subnet ID or network interface ID is required to carry out the request.

EC2インスタンスは立ち上げる時は VPC もしくは 非VPC で立ち上げますが、今回は RDSVPC 上で立ち上がっていたので、 VPC で立ち上げる必要があった。

VPC で立ち上げる時は、 Subnet IDSecurityGroup Ids を指定します。

一方 非VPC で立ち上げる時は myEc2RdsSecurityGrps を指定します。

例えば Subnet IDmyEc2RdsSecurityGrps を一緒に書いてしまうと、The specified instance type can only be used in a VPC. A subnet ID or network interface ID is required to carry out the request と言われて怒られます。

see: リソースの設定 -- https://docs.aws.amazon.com/ja_jp/datapipeline

VPC で立ち上げる

  1. myEc2RdsSecurityGrps空白 にします。
  2. Subnet IDSecurityGroup IdsAdd an optional field.. で追加して記入します。ここに記述する Subnet IDSecurityGroup IdsVPC のSubnetにあるIDと、VPCのSecurityGroupsにあるIDの事です。

参考に、下記の図のように、SubnetIDsubnet-aaaaSecurityGroup Idssg-aaaaasg-bbbbbの二つを指定しています。

p2.png

ここで t2.micro などT2系を指定していると Virtualization type 'hvm' is required for instances of type 't2.micro'. Ensure that you are using an AMI with virtualization type 'hvm'. For more information, see http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/virtualization_types.html と言われてコケます。

こちらでは M3 系のインスタンスにしたら VPC 上で起動をしました。

VPCで立ち上げるインスタンスタイプはHVMのインスタンスストアでないと駄目っぽいです。イマイチよくわかっていないけど。

see: Instance type Matrix -- aws.amazon.com/jp

間違って 非VPC で起動した時

起動はします。ただ、 RDSVPC 上にあるので、S3に保存するログ・ファイルにはエラーが書かれて終わってると思います。((どのエラーかわからなくなった…))

RDS に接続できない。

幾つか原因がありました。

  1. EC2のインスタンスとRDSのインスタンスが、VPCで切り離されている
    1. RDSに合わせるしかありません。
  2. myRDSInstanceId がわからず、Timeoutが起きている?
    1. RDSにある インスタンス名 の事です。名前変えんといてくれ。
    2. なお、適当な文字を入れて Validation に引っかかった時は、 db-instance-id is not a valid identifier. Identifiers must begin with a letter; must contain only ASCII letters, digits, and hyphens; and must not end with a hyphen or contain two consecutive hyphens. (Service: AmazonRDS; Status Code: 400; Error Code: InvalidParameterValue; というエラーが起きます。
    3. Validation に引っかからないけど、存在しない instance-id の時は DB hogehoge Instance Not Found と言われます。

RDSの特定DBに接続できない

DataPipeline で作成した時には、Database name を入力するフィールドが 2016/10/03 現在ではありませんでしたので、接続開始しようとした時に null データベースに接続しようとしてコケます。

ログとしてはこんな感じ。

03 Oct 2016 05:42:48,337 [ERROR] (TaskRunnerService-resource:df-....@Ec2Instance_2016-10-03T05:39:08-0) df-... amazonaws.datapipeline.database.ConnectionFactory: Unable to establish connection to jdbc:mysql://A-instance.----.-----.rds.amazonaws.com:3306/null Communications link failure

対処として、一度作成した後、 Edit PipelineRdsDatabase を選び、Add an optional field... で追加する。

S3に保存したファイルは、変な所に書き出される。

バケットとディレクトリ?を指定しても、空白ディレクトリが作成されているだけでよくわからないことになっている。何のバグかわかりませんが、その空白名のディレクトリが作成されてその中に保存されています。 AWS s3 のページから辿って見ていったほうが良いかもです。

とりあえず以上

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5