web-dev-qa-db-ja.com

elasticbean talkのコマンドとコンテナコマンドの違いは何ですか

AWS ElasticBeanのトーク。

.ebextensionsで拡張機能をセットアップするとき

commandscontainer_commandsの違いは何ですか

私のコマンドはこんな感じ

container_commands:
  04_insert_app:
    command: "cat .ebextensions/insertapp_job.txt > /etc/cron.d/insertapp_job && chmod 644 /etc/cron.d/insertapp_job"
    leader_only: true

container_commandsは機能します。

コマンド:エラー.ebextensions/insertapp_job.txtが見つかりません

28
t10508hn

これら2つの部分の主な違いは、Elastic Beanstalk展開プロセスで実行されるときです。

コマンド

これらのコマンドは、展開プロセスの初期、Webサーバーのセットアップ前、およびアプリケーションコードの展開前に実行されます。

コマンドは名前のアルファベット順に処理され、アプリケーションとWebサーバーがセットアップされ、アプリケーションバージョンファイルが抽出される前に実行されます。 1

デフォルトでは、コマンドはrootユーザーのホームフォルダーで実行されます。これとEBのその他のさまざまな動作は、コマンドと共に渡すことができるオプション(作業ディレクトリ、エラー時に続行するかどうか、コマンドに渡す環境変数など)を介して変更できます。

コンテナコマンド

これらのコマンドは、デプロイメントプロセスの後半、Webサーバーのセットアップ後、アプリケーションコードがステージングフォルダーに展開された後、アプリケーションが「デプロイ」される前に(ステージングフォルダーを最終ステージに移動することによって)実行されますロケーション):

コンテナコマンドは、アプリケーションとWebサーバーがセットアップされ、アプリケーションバージョンアーカイブが抽出された後、アプリケーションバージョンがデプロイされる前に実行されます。コンテナ以外のコマンドおよびその他のカスタマイズ操作は、アプリケーションのソースコードが抽出される前に実行されます。 2

デフォルトでは、これらのコマンドはステージングフォルダーで実行されるため、アプリケーションがデプロイされると現在のフォルダーに加えた変更は保持されます(ただし、パスは変更されますので、相対リンクに注意してください)。

コンテナコマンドは(コンテナ以外の)コマンドと同じオプションをすべてサポートしていますが、「leader_only」オプションもサポートしています。

Leader_onlyを使用して、単一のインスタンスでのみコマンドを実行するか、テストコマンドがtrueと評価された場合にのみコマンドを実行するようにテストを構成できます。リーダーのみのコンテナーコマンドは、環境の作成および展開中にのみ実行されますが、他のコマンドおよびサーバーカスタマイズ操作は、インスタンスがプロビジョニングまたは更新されるたびに実行されます。 2

44
Tiro

@Tiroと@ t10508hnの回答に加えて、commandscontainer_commandsの両方がホストマシンで実行されることを明確にしたいだけです。

Dockerコンテナ内でコマンドを実行するには、Dockerfileを使用します。

これは、leader_onlyを使用していくつかのコマンドを実行する必要があり、container_commandsが実際にコンテナ内で実行されると仮定したときの混乱点でした。

5
Gautam

私はここで答えを見つけました aws offcial docs

commands:EC2インスタンスでコマンドを実行します

container_commands:コンテナのコマンドを実行します

3
t10508hn