Comment exécuter manuellement des scripts nécessitant l'accès aux propriétés d'environnement sur mon instance Elastic Beanstalk sur Amazon Linux 2 ?

Date de la dernière mise à jour : 28/05/2021

Je souhaite exécuter manuellement des scripts qui nécessitent l'accès aux propriétés d'environnement sur mon instance AWS Elastic Beanstalk sur Amazon Linux 2.

Brève description

Vous pouvez utiliser des hooks de plateforme pour exécuter manuellement des scripts sur les plateformes Amazon Linux 2. Les scripts nécessitent l'accès aux propriétés d'environnement de votre instance Elastic Beanstalk. Il est recommandé d'utiliser des hooks de plateforme pour configurer et exécuter du code personnalisé sur vos instances d'environnement pendant le provisionnement d'instance. Utilisez des hooks de plateforme au lieu de fournir des fichiers et des commandes dans les fichiers de configuration (.ebextensions).

Remarque : la résolution suivante inclut deux scripts que vous pouvez utiliser sur plusieurs plateformes, y compris PHP, Python, Ruby, Amazon Corretto, Tomcat et Node.js. Les scripts permettent aux utilisateurs de localiser la source des propriétés d'environnement définies dans le fichier /opt/elasticbeanstalk/deployment/env.

Avertissement : si votre cas d'utilisation nécessite que vous exécutiez des scripts manuellement, vous pouvez effectuer les étapes suivantes. Cependant, il n'est pas recommandé d'exécuter des scripts manuellement (c'est-à-dire sur SSH sur Elastic Beanstalk), car les modifications effectuées sur SSH ne sont pas persistantes.

Résolution

1.    Dans votre groupe source d'application, créez un fichier appelé 01_set_env.sh dans le répertoire .platform/hooks/postdeploy et .platform/confighooks/postdeploy. Par exemple :

~/workspace/my-app/
├── .platform
│   ├── hooks
│   │   ├── postdeploy
│   │   │   ├── 01_set_env.sh
│   ├── confighooks
│   │   ├── postdeploy
│   │   │   ├── 01_set_env.sh
|-- helloworld

2.    Utilisez un script Bash pour autoriser tout utilisateur de l'instance à accéder au fichier de variables d'environnement. Le script Bash contient la logique qui copie le fichier opt/elasticbeanstalk/deployment/env et définit 644 autorisations. Par exemple :

.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.    Définissez les autorisations sur les fichiers .platform/hooks/postdeploy/01_set_env.sh. et .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

Important : vous devez définir 644 autorisations sur votre ordinateur local avant d'ajouter les fichiers à l'étape 3 au groupe source d'application.

4.    Déployez les scripts de hook .platform.

Remarque : les propriétés d'environnement comportant des espaces ou des caractères spéciaux sont interprétées par le shell Bash et peuvent donner lieu à une valeur différente.

Important : sur Amazon Linux 2, toutes les propriétés d'environnement sont regroupées dans un seul fichier appelé /opt/elasticbeanstalk/deployment/env. Vous devez utiliser ce fichier uniquement pendant le processus de déploiement d'application d'Elastic Beanstalk. Les propriétés définies dans /opt/elasticbeanstalk/deployment/env ne sont pas disponibles au niveau du système d'exploitation. Les propriétés indisponibles peuvent provoquer des « refus d'autorisation » si vous accédez à ces variables via des scripts manuels qui s'exécutent sur l'instance. Le fichier /opt/elasticbeanstalk/deployment/env dispose d'autorisations restreintes, ce qui complique la localisation de sa source pour les utilisateurs non-racine (par exemple ec2-user). Par exemple :

[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


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?