web-dev-qa-db-ja.com

EC2インスタンスからElastic Beanstalk環境に関するメタデータを取得することは可能ですか

EC2インスタンスから現在のElasticBeanstalk環境に関する情報を抽出できるようにしたいので、サーバーから送信されるエラーメールにこの情報を含めることができます。

たとえば、現在の環境の名前と、デプロイされたコードのバージョンラベルを知っていると便利です。誰かがこれをプログラムで行うことを知っていますか?パブリックホスト名やAMI-idなどのEC2情報を取得するためのAPIがすでにあることは知っていますが、ElasticBeanstalk用のものが見つかりません。

現在、私の解決策は、アプリが読み取れる環境変数を手動で設定することですが、これは明らかに面倒です。

4
wjin

私は何かを理解しました。好奇心旺盛な方へ:

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ライブラリを使用しているので、上記で説明したすべての操作には、それらを実行するためのプリベイクされたライブラリ関数がすでにあります。

ええと

まだコーディングしていませんが、動作させることができれば、ここに抜粋して投稿します

編集 作業コード

4
wjin

インターネットを少し調べた後、私は見つけました。私はその質問が古いものであることを知っていますが、私はこの答えを与えると思いました。

$ /opt/elasticbeanstalk/bin/get-config container -k environment_name
2

文書化されていないため、これは警告なしに中断する可能性がありますが、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時に目を覚ます楽しい方法。

0
skeggse