私の基本的な質問:Elastic Beanstalkデプロイメントプロセス中に有効になる環境変数を設定するにはどうすればよいですか?エラスティックbeanstalkデプロイ中に適用される環境変数
私は、デプロイメント後にアプリケーションでアクセス可能なデプロイ時に環境変数を設定することについては言及していません。エラスティックBeanstalkのビルドスクリプトの特定の動作を変更する環境変数を設定する必要があります。
明らかに - これは一般的には悪い考えですが、この場合は問題ありませんので、私はこれを実験として試しています。
米国のAWSから中国のAWSにサーバーを移行する過程で、そのサーバーが展開していることがわかりました。その日に応じて、時間の50%〜100%の間で失敗する。これは開発中の大きな苦痛ですが、私は主に、この作業をどのようにプロダクションで行うのかについて心配しています。
これは、Python 2.7を実行しているアマゾンのLinuxサーバであり、ログがしようとしているときにピップによって生成されたすべてのをインストールし、たまにでスローピアによって、いくつかの接続をリセットして、障害が主に読むタイムアウトエラーであることを示していますpypiからパッケージをダウンロードしてください。これを確認するために、いくつかのパッケージを手動でインストールするためにインスタンスにsshを実行しました。小さなサンプルサイズでも同様の失敗率が表示されます。これは、中国のGFWの反対側のコンテンツにアクセスしようとするときには、かなり一般的です。
だから、私は私のローカルマシンにピップダウンロード Sパッケージは、その後、AWSがは私のサーバーと同じ領域に位置S3バケットにそれらをよ同期するというスクリプトを書きました。これにより、展開中にGFWを横断する必要がなくなります。
私の元来の計画は、aws cpのS3からピップキャッシュへのパッケージですが、(私が何かを忘れていない限り)これはいくぶん驚くほど単純ではないようです。
プランBのように、パッケージをインスタンス上のローカルディレクトリにリダイレクトしています。これはうまくいっていますが、pip installは、パッケージをpypiからダウンロードするのではなく、ローカルディレクトリから取得することができません。
pipドキュメントの後、私はPIP_FIND_LINKS環境変数を私のパッケージディレクトリに指定すると、ピップ "pipi"ではなく、自分のディレクトリからパッケージを "自然に"プルすることを期待しました。これは、EBビルドスクリプトに対して変更を透過的にするものであり、なぜこれが合理的な解決策であろうと思ったのですか?
は、これまで私が試してみました:
1)運と、PIP_FIND_LINKS = /パス/に/パッケージをエクスポートコマンド。これは、異なるセッションから呼び出される展開工程によるものであったと仮定したので、私は、次に試した:
2)エクスポートPIP_FIND_LINKS = /パス/への追加前の輸出に加えて()コマンド/package〜〜。/ profileを新しいセッションに適用しようとします。
私はec2_userとrootの両方でコマンドを発行しようとしましたが、いずれも動作しません。
私は、これで棒をつけ続けるのではなく、もう少しEB、ピップなどのニュアンスを経験した人が何らかのガイダンスを提供できることを期待していました。
問題の原因となったpypiライブラリはどれですか?時には私のrequirements.txtには、pypiではなくsetup()経由でリポジトリからインストールされたライブラリが含まれています。これにより、展開で障害が発生しました。私の周りの方法は、要件を修正し、代わりにドッカー環境を使用して、展開スクリプトをより詳細に制御することでした。 –
失敗したライブラリは実行ごとに異なり、場合によっては失敗もありません。これは実際にはGFWを横断するときにはかなり一般的なランダム接続ブロッキングに関連しているように見えます。なぜ自分の依存関係をローカルに格納したいのですか?また、この要件ファイルのスーパーセットが問題なく中国以外で1年以上使用されていたことにも触れておきます。 – gary