Elastic Beanstalkは初めてですが、64ビットのAmazonLinuxを実行しているコンテナで環境を作成しましたPHP5.3。MySQLをEBSにセットアップしてから、phpMyAdminをインストールしてデータベースをインポートします。
ただし、ドキュメントが機能しないため、これを行う方法がわかりません: EBS(Elastic Block Store)を使用してAmazon EC2でMySQLを実行する
そのガイドは2010年3月23日に最後に更新されたので、古くなっている可能性があります。
これが私がしたことです:
助けて!
編集:あなたのコメントと回答をありがとう。 AWSでPHP/MySQL Webサイトをセットアップするための最良の方法を見つけようとしています。そのため、AWSは「AWSでアプリケーションをすばやくデプロイおよび管理するためのさらに簡単な方法」としてElastic Beanstalkを販売しているため、ElasticBeanstalkは良いアイデアのように思われました。雲。"
ただし、MySQLをEBSで実行する場合、これは完全には当てはまらないようです。私が収集したことから、Elastic Beanstalkは自動的にスケーリングされ、おそらく自動スナップショット機能を備えているため、誰もがRDSを使用していると思います。
だから私はこれらのオプションが残っていると思います:
1)Elastic Beanstalkを使用しない:Eric Hammondのドキュメントに従って、EBSボリュームで実行されているMySQLでUbuntu EC2インスタンスをセットアップします(スケーラビリティの問題があるように思われますか?)。
2)Elastic Beanstalkを使用する:データベースをRDSにセットアップします(スケーラビリティの問題はありません)。
3)Elastic Beanstalkを使用します:ただし、EBSボリュームで実行されているMySQLで構成されたubuntu AMIを使用します(これは可能ですか?Elastic BeanstalkはプライベートAMIで動作しますか?)
4)Elastic Beanstalkを使用する:最初からやり直して、ubuntu命令をCentOS/RHLで動作するように適合させるためのcyberx86の命令を使用します。
この時点で、私のデータベースとサイトのトラフィックは非常に少ないです。スケーラブルにするといいのですが、この時点では、ローカルホストでコードを動作させた後、gitを使用して新しいバージョンをデプロイできるように実行したいと思います。最優先事項は、ホスティングに時間を費やすのではなく、サイトを立ち上げて稼働させ、マーケティングと機能の構築に戻ることです。私は何をすべきか?
私はElasticBeanstalkを使用していませんが、あなたがフォローしているガイドはEC2用です(これは間違いなくお手伝いできます)。あなたが抱えている最初の難しさは、あなたが使用しているガイドがUbuntu9.10用であるということです。 AmazonのLinuxはCentOS/RHELに基づいているので、CentOS6ガイドを見つければもっと楽になります。
問題の根本は、「EBSボリュームの接続」に起因しているようです。 EC2では、複数のEBSボリュームを単一のインスタンスにアタッチできます。すべてのインスタンスにはルートボリュームがあります。これらはS3ベースまたはEBSバックのいずれかです。はるかに好ましいアプローチは、EBSでバックアップされたルートボリュームを使用することです(少しコストがかかりますが、柔軟性と耐久性でそれを補います)。 EBSルートボリュームを持つインスタンスでは、ほとんどの場合、このボリュームが/ dev/sda1として接続されます。最近のLinuxシステムでは、デバイスは実際には/ dev/xvda1として表示されます(コマンドに渡す必要があるのは後者です)。 (マウントされたボリュームをフォーマットしようとする以外に-インスタンスが実行されている状態でルートファイルシステムをフォーマットしようとしました-つまり、オペレーティングシステムを消去しようとしていましたが、可能であれば、絶対に良い考えではありません)。
この場合、2番目のEBSボリュームを追加することをお勧めします-インスタンスにアタッチし(たとえば、/ dev/sdhとして、コマンドには/ dev/xvdhを使用します)、それを使用してMySQLデータを保存します。 (Elastic Beanstalkを使用していないにもかかわらず)この機能はEC2のかなり中心的な機能であるため、ElasticBeanstalkで2番目のボリュームをアタッチできないとは信じがたいです。
cat /proc/partitions
を実行する(またはfdisk -l
を使用する)ことで、EBSデバイスのリストを取得できるはずです。
あなたが行ったことのステップ5で、実際にルートボリュームをそれ自体の中にマウントしていることに気付くでしょう(つまり、/ dev/sda1はすでに/としてマウントされており、/ dev/sda1を/ ebsvolとしてマウントしています)-そうすることは避けてください。
また、/etc/init.d/mysql stop
は機能しませんでしたが、/etc/init.d/mysqld stop
はおそらく機能していました。 (ここでも、ls /etc/init.d
を実行することでinit.dスクリプトのリストを取得できます。また、あなたと同じように、通常はservice
コマンドを使用します)。
MySQLデータベースは/ var/lib/mysqlにあるはずですが、/ etc/fstabのマウントポイントはおそらく正しくありません(/ ebsvol問題内のebsvolを考えると)。 cd /var/lib/mysql
すると、データベースを表示できるはずです。そうでない場合は、マウントが正しく機能していません。 (/ var/lib/mysqlがmountpoint -d /var/lib/mysql
によって別のデバイスにマウントされていることを確認し、デバイスをcat /proc/partitions
と比較します)。
あなたがフォローしているガイドの基本的な考え方は非常に有効です-データとデータベースをルートボリュームとは異なるEBSボリュームに配置するのが一般的な方法です。これは、多くの利点(パフォーマンス、スナップショットの容易さ、インスタンス間の移動のしやすさ)を提供するためです。など)、基本的なLinuxコマンドは変更されていません。これらはUbuntu専用です。
umount /path
を使用してマウントを元に戻します。もちろん、通常どおり、デバイスがビジーでないことを確認する必要があります(MySQLを起動できなかった場合は問題にならない可能性があります)。ただし、umountは一時的なものにすぎないため、/etc/fstab
を編集して、そこからマウントポイントへの参照を削除する必要があります。インスタンスに価値のあるものがない場合は、最初からやり直す方がよい場合があります(いくつかのボリュームをアンマウントするのが難しいためではなく、最初からどこで問題が発生したかを常に簡単に把握できるためです。既知の状態)。
最後に、Elastic Beanstalk上のMySQLに関して:Elastic Beanstalkのポイントは、リソースのプロビジョニングとスケーリングを自動的に処理することです-それはまだコアAWSコンポーネント(EC2、S3、ELBなど)に基づいていますが、あなたのためにいくつかのことをします。 Elastic Beanstalkは通常、RDSを使用してMySQLデータベースを処理します。 RDSは、MySQLインスタンスのプロビジョニングとスケーリングを簡素化するMySQLのAmazonマネージドバージョンです。 MySQLは、多くの設定がないと自動スケーリングに適していません。 2番目のMySQLインスタンスを起動して、2つのインスタンス間で負荷を分割することはできません。レプリケーションを設定する必要がありますが、これは簡単な作業ではない場合があります)。
基本的に、Webサーバーインスタンスから実行され、シームレスに自動スケーリングできるようにMySQLをセットアップできる場合は、Elastic Beanstalkを気にせずに、EC2を直接使用する方がほぼ確実です。したがって、ほとんどの人は実際にはElastic BeanstalkでMySQLをセットアップしないことをお勧めします(別のMySQLインスタンスをセットアップすることもできますが、Beanstalkを使用している場合は、RDSの方がおそらく簡単なアプローチです)。
編集:
主にブラックボックスとして動作する他の多くのサービスとは異なり、ElasticBeanstalkでは基盤となるコンポーネントにアクセスできます。とはいえ、EC2インスタンスを手動でセットアップする作業を行う場合は、ElasticBeanstalkのポイントを否定しています。
EC2を使用している場合、PHP/MySQLへのアプローチはいくつかあります。
同じトピックに関する他のいくつかの回答:
私の見解では、通常、ワンクリックソリューションは最善のアプローチではありません。手動で何かを行うことによって提供されるコントロールが好きです。私は通常、より調整された効率的な最終結果が得られるだけでなく、システムがどのように機能するかをはるかによく理解しているため、何が悪いのかをはるかに簡単に理解できます。セットアップの複雑さを十分に理解すれば、いつでも独自のセットアップを自動化できます。
RDSについて覚えておくべき1つのポイント-それはすでにEBSに裏打ちされています。 RDSはMySQLです-似たようなものでも、別のリレーショナルデータベースでもありません。これは、EBSでサポートされているEC2インスタンスで実行されているMySQLのマネージドインスタンスです。 AWSはソフトウェアを最新の状態に保ち、データの通常のEBSスナップショットなどを実行できます。インスタンスで実行されている基盤となるソフトウェアに直接アクセスすることはできません。
オペレーティングシステムの選択に関しては、私はAmazonのLinuxに偏っています。 AWSによって十分にサポートされており、最小限のリソースを使用します。CentOSと完全に互換性があります(実際のところ、最新バージョンにはデフォルトでEPELリポジトリが含まれています)。違いは通常わずかであるため、通常の視点は、使い慣れたLinuxディストリビューションを使用することです(CentOSは、作業中の命令に対してUbuntuと同様に機能します-ほとんどのコマンド(apt-getを除く)はCentOSで同じです。私自身のセットアップでは、AmazonのLinuxを使用して別のEBSボリュームにデータベースがあることを考えると、それを行うのは難しくないことを保証できます)。
主な考慮事項がいくつかあることをお勧めします。
AMIに組み込まれたMySQLでElasticBeanstalkを使用しないことをお勧めします-動作したとしても、かなり不安定になる可能性があります。 (クラスターにインスタンスを追加および削除したとき、またはデータが他のインスタンスではなく一方のインスタンスに移動したときに何が起こるかを考えてみてください...)
スケーラビリティを念頭に置くことは素晴らしいことですが、すぐに最適化しないでください。そうしないと、何も実行されません。確かにそれを覚えておいてください、しかし特定のコンポーネントをスケーラブルにするためのコスト(時間、お金など)が現時点で実用的でないなら、それについてあまり心配しないでください-それをスケーリングする時が来たら、あなたはそれを理解します(結局のところ、最も人気のあるサイトはそのように始まりました)。
アプリケーションがキャッシュを利用できるように設計されている場合は、大いに役立つことをお勧めします。
通常、EC2では、水平方向(より多くのインスタンス)よりも垂直方向(より大きなインスタンス)にスケーリングする方が適切です。ただし、最初に、冗長性を確保し、単一障害点を最小限に抑えるために、2つのインスタンスにスケーリングする必要があります。したがって、考えられるアプローチは次のとおりです。
Elastic BeanstalkとEC2にもう少し慣れてきたので、Elastic Beanstalkの使用をやめることにしました。これは、いくつかの優れた機能がありますが、自分の好みにはあまりにも管理されているためです。たとえば、httpd.confファイルを変更できないという事実は好きではありません(変更することはできますが、環境を再起動すると変更は消えます)。もう1つの理由は、Elastic BeanstalkをMySQLで(適切に、つまり自動スケーリングと自動バックアップで)実行する唯一の方法はRDSを使用することです。新しいサインアップで3か月のRDSを無料で入手できますが、私はその機能が必要な規模ではないため、RDSに月額76ドルを支払う価値はありません。
結論:適度な量のトラフィックがあり、スケーリングしてそれ自体を処理するソリューションが必要な場合は、RDSを使用したElasticBeanstalkが最適なオプションです。 gitを使用してデプロイできるという事実が気に入っています。これは、Heroku forPHPのようなものです。スタートガイドには、MySQLのセットアップ手順が含まれている必要があります。
私がしたこと:「SyntheticElastic Beanstalk」を使用することを選択しました:AWSのさまざまなオファリングを使用してその機能を再作成でき、希望どおりに構成できる柔軟性があります。 AWSに飽き飽きしている間、Webアプリと同じEC2インスタンスにMySQLをセットアップしました(スケーリングが必要な場合は理想的ではありませんが、AWSの使用方法を学習している間は完全に問題ありません)。
このガイド これは、Amazon linuxAMIを実行しているEC2インスタンスにLAMPスタックをセットアップするために使用したものです。 phpmyadminを使用してデータベースをインポートする方が簡単だと思います。私はマイクロインスタンスを使用しているため、デフォルトでEBSを使用し、スナップショットを作成してデータをバックアップできます。 EC2用のCLIツールをセットアップして実行することをお勧めします
ec2-modify-instance-attribute --block-device-mapping "/dev/sda1=:false" i-xxxxxxx
ここで、i-xxxxxxxxは、EBSボリュームが接続されているEC2インスタンスです。これにより、インスタンスが終了した場合にEBSボリュームが削除されるのを防ぎます。そのEBSボリュームはすべてが実行され、データベースが保存される場所なので、それを失いたくありません(Elastic Beanstalkで遊んでいたときに、EC2インスタンスが終了し、ElasticBeanstalkが新しいEBSで別のインスタンスを即座に開始しましたボリュームがアタッチされましたが、幸い元のEBSボリュームのDeleteOnTermination設定を「false」に変更したため、新しいインスタンスを停止し、新しいEBSボリュームをデタッチし、古いEBSボリュームをアタッチすることができました。これにより、MySQLのインストールとデータベース)。
全体として、ウェブアプリをAWSに移行するプロセス全体は、依然としてお尻のかなりの苦痛です。学習曲線を終えた今、私はそれをより快適に感じていますが、始めるためのより良いドキュメントがあるべきだと考えずにはいられません。