AWS ElasticBeanのトーク。
.ebextensionsで拡張機能をセットアップするとき
commands
とcontainer_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
が見つかりません
これら2つの部分の主な違いは、Elastic Beanstalk展開プロセスで実行されるときです。
これらのコマンドは、展開プロセスの初期、Webサーバーのセットアップ前、およびアプリケーションコードの展開前に実行されます。
コマンドは名前のアルファベット順に処理され、アプリケーションとWebサーバーがセットアップされ、アプリケーションバージョンファイルが抽出される前に実行されます。 1
デフォルトでは、コマンドはrootユーザーのホームフォルダーで実行されます。これとEBのその他のさまざまな動作は、コマンドと共に渡すことができるオプション(作業ディレクトリ、エラー時に続行するかどうか、コマンドに渡す環境変数など)を介して変更できます。
これらのコマンドは、デプロイメントプロセスの後半、Webサーバーのセットアップ後、アプリケーションコードがステージングフォルダーに展開された後、アプリケーションが「デプロイ」される前に(ステージングフォルダーを最終ステージに移動することによって)実行されますロケーション):
コンテナコマンドは、アプリケーションとWebサーバーがセットアップされ、アプリケーションバージョンアーカイブが抽出された後、アプリケーションバージョンがデプロイされる前に実行されます。コンテナ以外のコマンドおよびその他のカスタマイズ操作は、アプリケーションのソースコードが抽出される前に実行されます。 2
デフォルトでは、これらのコマンドはステージングフォルダーで実行されるため、アプリケーションがデプロイされると現在のフォルダーに加えた変更は保持されます(ただし、パスは変更されますので、相対リンクに注意してください)。
コンテナコマンドは(コンテナ以外の)コマンドと同じオプションをすべてサポートしていますが、「leader_only」オプションもサポートしています。
Leader_onlyを使用して、単一のインスタンスでのみコマンドを実行するか、テストコマンドがtrueと評価された場合にのみコマンドを実行するようにテストを構成できます。リーダーのみのコンテナーコマンドは、環境の作成および展開中にのみ実行されますが、他のコマンドおよびサーバーカスタマイズ操作は、インスタンスがプロビジョニングまたは更新されるたびに実行されます。 2
@Tiroと@ t10508hnの回答に加えて、commands
とcontainer_commands
の両方がホストマシンで実行されることを明確にしたいだけです。
Dockerコンテナ内でコマンドを実行するには、Dockerfile
を使用します。
これは、leader_only
を使用していくつかのコマンドを実行する必要があり、container_commands
が実際にコンテナ内で実行されると仮定したときの混乱点でした。