Amazon Linux 2 の Elastic Beanstalk インスタンスで環境変数へのアクセスを必要とするスクリプトを手動で実行する方法を教えてください。
最終更新日: 2021 年 1 月 20 日
Amazon Linux 2 の AWS Elastic Beanstalk インスタンスで環境プロパティへのアクセスを必要とするスクリプトを手動で実行したいと考えています。
簡単な説明
プラットフォームフックを使用すれば、Amazon Linux 2 プラットフォーム上でスクリプトを手動で実行できます。スクリプトは、Elastic Beanstalk インスタンスの環境プロパティにアクセスする必要があります。インスタンスのプロビジョニング中に環境インスタンスでカスタムコードを設定して実行するには、設定ファイル (.ebextension) にファイルとコマンドを提供するのではなく、プラットフォームフックを使用するのがベストプラクティスです。
注意: 以下の解決方法には、PHP、Python、Ruby、Amazon Corretto、Tomcat、Node.js など、複数のプラットフォームで使用できる 2 つのスクリプトが含まれています。このスクリプトを使用すると、/opt/elasticbeanstalk/deployment/env ファイルで定義された環境プロパティをソースにすることができます。
解決方法
1. アプリケーションソースバンドルで、01_set_env.sh というファイルを .platform/hooks/postdeploy と .platform/confighooks/postdeploy の両方のディレクトリに作成します。例:
~/workspace/my-app/
├── .platform
│ ├── hooks
│ │ ├── postdeploy
│ │ │ ├── 01_set_env.sh
│ ├── confighooks
│ │ ├── postdeploy
│ │ │ ├── 01_set_env.sh
|-- helloworld
2. インスタンス上の任意のユーザーが環境変数ファイルにアクセスできるようにするには、/opt/elasticbeanstalk/deployment/env ファイルをコピーして 644 のアクセス許可を設定する同じロジックを含む bash スクリプトを使用します。例:
.platform/hooks/postdeploy/01_set_env.sh AND .platform/confighooks/postdeploy/01_set_env.sh
-----
#!/bin/bash
#Create a copy of the environment variable file.
cp /opt/elasticbeanstalk/deployment/env /opt/elasticbeanstalk/deployment/custom_env_var
#Set permissions to the custom_env_var file so this file can be accessed by any user on the instance. You can restrict permissions as per your requirements.
chmod 644 /opt/elasticbeanstalk/deployment/custom_env_var
#Remove duplicate files upon deployment.
rm -f /opt/elasticbeanstalk/deployment/*.bak
-----
3. .platform/hooks/postdeploy/01_set_env.sh. と .platform/confighooks/postdeploy/01_set_env.sh の両方のファイルに実行アクセス許可を設定します。
chmod +x .platform/hooks/postdeploy/01_set_env.sh
chmod +x .platform/confighooks/postdeploy/01_set_env.sh
4. .platform フックスクリプトをデプロイします。
5. ファイルを手動で取得しないようにするには、ユーザーの ~/.bash_profile に次のコードを追加します。
source <(sed -E -n 's/[^#]+/export &/ p' /opt/elasticbeanstalk/deployment/custom_env_var)
注意: スペースまたは特殊文字を含む環境プロパティは Bash シェルによって解釈され、別の値になる可能性があります。
注意: Amazon Linux 2 では、すべての環境プロパティは /opt/elasticbeanstalk/deployment/env という単一のファイルに一元化されています。このファイルは、Elastic Beanstalk のアプリケーションデプロイプロセスでのみ使用する必要があります。/opt/elasticbeanstalk/deployment/env で定義されているプロパティはオペレーティングシステムレベルで使用できません。インスタンスで実行する手動スクリプトを使用してこれらの変数にアクセスすると、「Permission Denied」エラーが発生します。/opt/elasticbeanstalk/deployment/env ファイルのアクセス許可は制限されており、root 以外のユーザー (ec2-userなど) が取得するのが難しい場合があります。例:
[root@ip-X-X-X-X deployment]# ls -latr /opt/elasticbeanstalk/deployment/env
-r-------- 1 root root 147 Jun 17 06:23 /opt/elasticbeanstalk/deployment/env