web-dev-qa-db-ja.com

弾性Beantalkにmongodbをインストールする推奨方法

Elastic Beanstalkにmongodbをインストールする方法 2014年の日付で既に機能していません。 https://docs.mongodb.org/ecosystem/platforms/Amazon-ec2/#manually-deploy-mongodb-on-ec2

1つのec2マイクロインスタンス「Node.jsを実行する64ビットAmazon Linux 2016.03 v2.1.0」を使用して、node.jsで実行する新しいElastic Beantalk環境をセットアップしました

私はすでにsshを使用してインスタンスに接続し、yumコマンドを使用してmongodbパッケージをインストールしようとしました:

$ Sudo yum install -y mongodb-org-server mongodb-org-Shell mongodb-org-tools

このコールバックを受信しました:

Loaded plugins: priorities, update-motd, upgrade-helper
No package mongodb-org-server available.
No package mongodb-org-Shell available.
No package mongodb-org-tools available.
Error: Nothing to do

インスタンスに初めてsshしたときに、次のエラー警告を受け取りました。

This EC2 instance is managed by AWS Elastic Beanstalk. Changes made via SSH 
WILL BE LOST if the instance is replaced by auto-scaling. For more information 
on customizing your Elastic Beanstalk environment, see our documentation here: 
http://docs.aws.Amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html

現在、私の環境は、コストを節約するために、単一インスタンス環境としてセットアップされています。ただし、将来は自動スケーリング環境にアップグレードします。

このため、ec2でsshを使用して変更することをお勧めしますか、またはEB CLIのみを使用する必要がありますか?

EC2とEB CLIの両方をローカルにインストールしていますが、EB CLIを使用したことがありません。 EBを使用する必要がある場合、mongodbをインストールする推奨方法はありますか?

23
amyloula

誰かが答えを探している場合のために、awsビジネスサポートから受け取ったアドバイスを以下に示します。

Elastic Beanstalkにデプロイされるすべてのコードは、「ステートレス」なI.E.である必要があります。 SSHまたはFTPを使用して、実行中のBeanstalkインスタンスに直接変更を加えないでください。これにより、不整合やデータ損失が発生する可能性があります。 -Elastic Beanstalkは、ステートレスではないアプリケーション向けに設計されていません。この環境は、ネットワーク/ CPU負荷で保留中にスケールアップおよびスケールダウンし、ベースAMIから新しいインスタンスを構築するように設計されています。インスタンスに問題または基盤となるハードウェアがある場合、Elastic Beanstalkはこれらの実行中のインスタンスを終了し、新しいインスタンスに置き換えます。したがって、新しいインスタンスはこれらの直接的な変更を認識しないため、既存のインスタンスに「直接」コード変更を適用または実行する必要はありません。すべての変更/コードは、Elastic BeanstalkコンソールまたはCLIツールにアップロードし、実行中のすべてのインスタンスにプッシュする必要があります。 Elastic Beanstalkの設計概念の詳細については、次のリンクで読むことができます http://docs.aws.Amazon.com/elasticbeanstalk/latest/dg/concepts.concepts.design.html

推奨されるソリューション:上記を念頭に置いて、MongoDBを使用してアプリケーションデータを保存する場合、MongoDB環境をNode.jsアプリケーションからDEカップリングすることをお勧めします。 I.E Elastic Beanstalkの外部でMongoDBサーバーを作成します。たとえば、MongoDBをEC2インスタンスで直接起動し、アプリの接続設定を使用してElastic Beanstalk Node.jsアプリケーションをMongoDBサーバーに接続します。

-MongoDBの作成以下は、MongoDBサーバーを作成するシナリオに役立つリンクの例です。 EC2にMongoDBをデプロイする https://docs.mongodb.org/ecosystem/platforms/Amazon-ec2/ MongoDBノードクライアント https://docs.mongodb.org/getting-started/node/client / AWSクラウドクイックスタートガイドのMongoDB http://docs.aws.Amazon.com/quickstart/latest/mongodb/architecture.html

-環境変数をElastic Beanstalkに追加してMongoDBサーバーを参照するMongoDBサーバーを作成したら、環境変数を使用して必要な接続設定をElastic Beanstalk環境に渡すことができます。 .ebextensions .configを使用した例。MongoURL /ポート/ユーザーなどを追加できます。

option_settings:-option_name:MONGO_DB_URL値:「あなたのMongoDB EC2内部IPアドレス」

環境プロパティを使用し、アプリケーション内から環境プロパティを読み取る方法については、以下を参照してください。 http://docs.aws.Amazon.com/elasticbeanstalk/latest/dg/create_deploy_nodejs.container.html#create_deploy_nodejs_custom_container-envprop および.ebextensions .configを使用した情報は、次のリンクにあります- http://docs.aws.Amazon.com/elasticbeanstalk/latest/dg/ebextensions.html

または、CLIを使用するか、AWSコンソールを使用して環境変数を設定することもできますeb cli set環境変数は、以下のリンクから読み取ることができます。 http://docs.aws.Amazon.com/elasticbeanstalk/latest/dg/eb3-setenv.html AWSコンソールを使用してシステムプロパティを設定するには(AWSマネジメントコンソール)Elastic Beanstalkコンソールを開きます。環境の管理コンソールに移動します。設定を選択します。 [ソフトウェア構成]セクションで、[編集]を選択します。環境プロパティで、名前/値を作成します...

環境構成設定へのアクセスAWS Elastic Beanstalkで実行されているNode.js環境内では、次の例のようにprocess.env.ENV_VARIABLEを使用して環境変数にアクセスできます。 process.env.MONGO_DB_URL process.env.PARAM2

http://docs.aws.Amazon.com/elasticbeanstalk/latest/dg/create_deploy_nodejs.container.html#create_deploy_nodejs_custom_container-envprop

概要:要約すると、MongoDBをElastic Beanstalk環境に統合するには、次の手順をお勧めします。ステップ1)Elastic Beanstalkの外部でMongoDBサーバーを作成しますステップ2)MongoDBサーバーに接続するNode.jsアプリケーションをElastic Beanstalkで作成します

37
amyloula

3つのオプション:

1)ebインスタンスにSSHで接続し、mongo CLIを手動でインストールします。

Sudo yum-config-manager --add-repo https://repo.mongodb.org/yum/Amazon/2013.03/mongodb-org/4.0/x86_64/
Sudo yum install --nogpgcheck -y mongodb-org-Shell

欠点は、EBがインスタンスの数を減らし、現在使用中のインスタンスが終了すると、SSHセッションから追い出されることです。

The system is going down for halt NOW!
Connection to 1.2.3.4 closed by remote Host.
Connection to 1.2.3.4 closed.
ERROR: CommandError - An error occurred while running: ssh.

その後、最初からやり直す必要があります。インスタンスに接続し、mongo CLIをインストールします...

2).configファイルを使用して、インスタンスにmongo CLIを事前インストールします。

container_commands:
  01-mongocli:
    command: "Sudo yum-config-manager --add-repo https://repo.mongodb.org/yum/Amazon/2013.03/mongodb-org/4.0/x86_64/;Sudo yum install --nogpgcheck -y mongodb-org-Shell"
    ignoreErrors: true //use this the ensure instance deployment even if mongo CLI installation fails

繰り返しますが、自動スケーラーによってインスタンスが終了した場合、再度接続する必要がありますが、mongo CLIを手動でインストールする必要はありません。

3)@amyloulaの回答で説明されているように、mongo CLIをホストする別のインスタンスを作成します。 mongodbがVPC内にある場合、VPC内でもその個別のインスタンスを作成する必要があります。次に、VPCのインスタンスに直接接続できないため、インスタンスにパブリックにアクセスするためにゲートウェイを作成する必要があります。

0
Manuel