Amazon Linux 2 の Elastic Beanstalk インスタンスで環境プロパティへのアクセスを必要とするスクリプトを手動で実行する方法を教えてください。

最終更新日: 2021 年 5 月 28 日

Amazon Linux 2 の AWS Elastic Beanstalk インスタンスで環境プロパティへのアクセスを必要とするスクリプトを手動で実行したいと考えています。

簡単な説明

プラットフォームフックを使用すれば、Amazon Linux 2 プラットフォーム上でスクリプトを手動で実行できます。スクリプトを実行するには、Elastic Beanstalk インスタンスの環境プロパティにアクセスする必要があります。インスタンスのプロビジョニング中に環境インスタンスでカスタムコードを設定して実行するには、プラットフォームフックを使用するのがベストプラクティスです。設定ファイル (.ebextensions) にファイルとコマンドを提供する代わりに、プラットフォームフックを使用します。

注: 次の解決方法には、PHP、Python、Ruby、Amazon Corretto、Tomcat、Node.js など、複数のプラットフォームで使用できる 2 つのスクリプトが含まれています。このスクリプトを使用すると、/opt/elasticbeanstalk/deployment/env ファイルで定義された環境プロパティをソースにすることができます。

警告: スクリプトを手動で実行する必要があるユースケースでは、次の手順を実行します。ただし、SSH 経由での変更は保持されないため、スクリプトを手動で (つまり Elastic Beanstalk から SSH 経由で) 実行することはベストプラクティスではありません。

解決方法

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.    インスタンス上の任意のユーザーが環境変数ファイルにアクセスできるようにするには、Bash スクリプトを使用します。Bash スクリプトには、/opt/elasticbeanstalk/deployment/env ファイルをコピーし、644 のアクセス許可を設定するロジックが含まれています。例:

.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 based on your requirements.
chmod 644 /opt/elasticbeanstalk/deployment/custom_env_var

#Remove duplicate files upon deployment.
rm -f /opt/elasticbeanstalk/deployment/*.bak

# Add the following code to the 'ec2-user' bash profile to avoid manually sourcing the file on the instance.
source_cmd="source <(sed -E -n 's/[^#]+/export &/ p' /opt/elasticbeanstalk/deployment/custom_env_var)"
bash_profile_path=/home/ec2-user/.bash_profile
grep -qxF -- "$source_cmd" "$bash_profile_path" || echo $source_cmd >> $bash_profile_path

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

重要: ステップ 3 のファイルをアプリケーションソースバンドルに追加する前に、ローカルマシンでアクセス許可を 644 に設定する必要があります。

4.    .platform フックスクリプトをデプロイします。

注: スペースまたは特殊文字を含む環境プロパティは Bash シェルによって解釈され、別の値になる可能性があります。

注: Amazon Linux 2 では、すべての環境プロパティは /opt/elasticbeanstalk/deployment/env という単一のファイルに一元化されています。このファイルは、Elastic Beanstalk のアプリケーションデプロイプロセスでのみ使用する必要があります。/opt/elasticbeanstalk/deploy/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


この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?