EC2インスタンスから現在のElasticBeanstalk環境に関する情報を抽出できるようにしたいので、サーバーから送信されるエラーメールにこの情報を含めることができます。
たとえば、現在の環境の名前と、デプロイされたコードのバージョンラベルを知っていると便利です。誰かがこれをプログラムで行うことを知っていますか?パブリックホスト名やAMI-idなどのEC2情報を取得するためのAPIがすでにあることは知っていますが、ElasticBeanstalk用のものが見つかりません。
現在、私の解決策は、アプリが読み取れる環境変数を手動で設定することですが、これは明らかに面倒です。
私は何かを理解しました。好奇心旺盛な方へ:
http://169.254.169.254/latest/meta-data/
を介してECインスタンス情報を取得できます。特にEC2インスタンスIDが必要です
describe-environments を介して、すべてのbeanstalk環境のリストを確認できます。
環境ごとにdescribe-environment-resources
を実行できます。この呼び出しは、現在のインスタンスのインスタンスIDと照合できるインスタンスのリストを返します。したがって、自分の環境名がわかります。
最後に、describe-environments
の結果を参照して、現在デプロイされているコードのバージョンラベルを確認することもできます。
これを行う前に、ElasticBeanstalk情報にアクセスできるようにec2インスタンスを設定する必要があります。これを行うには、ec2インスタンスに関連付けられたロールに適切なアクセスポリシーを割り当て、http://169.254.169.254/latest/meta-data/
のインスタンスメタデータを介して認証情報を取得します。
python boto
ライブラリを使用しているので、上記で説明したすべての操作には、それらを実行するためのプリベイクされたライブラリ関数がすでにあります。
ええと
まだコーディングしていませんが、動作させることができれば、ここに抜粋して投稿します
編集 作業コード
インターネットを少し調べた後、私は見つけました。私はその質問が古いものであることを知っていますが、私はこの答えを与えると思いました。
$ /opt/elasticbeanstalk/bin/get-config container -k environment_name
文書化されていないため、これは警告なしに中断する可能性がありますが、EBの/opt/elasticbeanstalk/bin/get-config
コマンドは、/opt/elasticbeanstalk/deploy/configuration/containerconfiguration
にあるファイルから読み取り、get-config
で公開されているよりも多くのデータを含みます。
JSONとしてフォーマットされており、EBイメージにはすぐにjq
が含まれているため、このコマンドは環境名を抽出します(アクセスが制限されている可能性があるため、Sudo
またはその他のアクセス制御メカニズムが必要になる場合があります)::
$ jq .system.environment_name /opt/elasticbeanstalk/deploy/configuration/containerconfiguration
describe-environments
またはdescribe-tags
(EBは環境名を含むタグを定義します)を使用するよりもオフラインのアプローチを好む1つの理由は、AWS APIのレート制限によりデプロイが失敗する可能性があるためです。午前3時に目を覚ます楽しい方法。