J'ai déployé l'application .net core 2 sur aws eb. J'ai besoin de serveurs de staging, de qa et de prod, et je ne sais pas comment gérer les chaînes de connexion? Est-il possible de le stocker dans des variables env sur eb? Ou est-il possible de créer env pour ces trois instances et d'avoir un fichier application.json différent pour chacune?
4 Réponses :
Vous pouvez utiliser modèle d'options dans ASP.NET Core
Exemple, vous avez appsetting.json comme celui-ci
public Startup( IConfiguration configuration, IHostingEnvironment hostingEnvironment) { _configuration = configuration; _hostingEnvironment = hostingEnvironment; var builder = new ConfigurationBuilder(); if (_hostingEnvironment.IsDevelopment()) { builder.AddUserSecrets<Startup>(); } else { builder .SetBasePath(hostingEnvironment.ContentRootPath) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .AddJsonFile($"appsettings.{hostingEnvironment.EnvironmentName}.json", optional: true) .AddEnvironmentVariables(); } }
Je devrai définir une classe de modèle comme celle-ci pour stocker des informations p>
private readonly IOptions<WebAppUrl> _webAppUrl; public EmailSender(IOptions<WebAppUrl> _webAppUrl) { _webAppUrl = _webAppUrl; } _webAppUrl.Value.Staging; _webAppUrl.Value.Qa; _webAppUrl.Value.Prod;
Nous avons donc la structure de configuration. La dernière chose dont nous avons besoin est de vous inscrire dans Startup.cs
services.Configure (configuration.GetSection ("WebAppUrl"));
Vous pouvez donc utiliser comme ça
XXX
Ok, voici comment Microsoft a configuré plusieurs appsetting.json fichier . Vous pouvez jeter un oeil à parce que c'est un article assez long
Voici comment je configure en utilisant le fichier json basé sur l'environnement
public class WebAppUrl { public string Staging { get; set; } public string Qa { get; set; } public string Prod { get; set; } }
Cela fait partie de la solution possible. Le principal problème est de créer des variables env sur le beanstalk élastique pour l'application de base .net, d'une manière ou d'une autre, eb ne peut pas le gérer. PS Comme je l'ai lu, la meilleure pratique consiste à le stocker dans différents fichiers appsettings.json
( appsettings.Stanging.json
, appsettings.Qa.json
. ..)
Voici une approche utilisant des ebextensions et des métadonnées d'instance:
Utilisez ebextensions pour gérer la personnalisation du serveur avant le démarrage de votre application.
ec2: DescribeTags
. init.config
dans le dossier .ebextensions
à la racine. L'exemple ci-dessous est init.config pour l'instance Windows avec PowerShell, mais peut être adapté à bash + aws cli.
La première étape écrit un script PowerShell. Le script lit la balise Environment et écrit la valeur dans une variable à l'échelle de la machine pour que l'application puisse la récupérer. La deuxième étape appelle le script.
files: "c:/cfn/init.ps1": content: | $instanceDoc = Invoke-RestMethod 'http://169.254.169.254/latest/dynamic/instance-identity/document' $nameTagList = Get-EC2Tag -Region ($instanceDoc.region) -Filter @{name='resource-type';value='instance'},@{name='resource-id';value=$instanceDoc.instanceId},@{name='tag:Environment';value='*'} | Select -First 1 $envName = $nameTagList.Value [Environment]::SetEnvironmentVariable("APP_ENV", $envName, [EnvironmentVariableTarget]::Machine container_commands: 00-invoke-init: command: powershell.exe -nologo -noprofile -file "c:\cfn\init.ps1"
Donc, il y a un problème avec la gestion des variables env à partir de Elastic Beanstalk pour l'application principale .net.
Voici la réponse (hack) comment forcer l'application à obtenir vos variables d'environnement Variables d'environnement AWS Elastic Beanstalk dans ASP.NET Core 1.0
Ainsi, toutes les données sensibles telles que la chaîne de connexion doivent se trouver sur des variables env élastiques beanstalk. D'autres peuvent être dans appsettings.Staging.json
, appsettings.Qa.json
, etc.
N'oubliez pas d'ajouter ASPNETCORE_ENVIRONMENT
var dans les variables d'environnement.
Tout comme ce que je viens de mettre à jour avec ma réponse. Pouvez-vous accepter cela. Merci
Je suggérerais de mettre la configuration dans le magasin de paramètres d'AWS System Manager. Le package NuGet Amazon.Extensions.Configuration.SystemsManager ajoute Parameter Store en tant que fournisseur de configuration au système de configuration .NET. Voici un article de blog pour plus d'informations. https://aws.amazon .com / blogs / developer / net-core-configuration-provider-for-aws-systems-manager /