代码之家  ›  专栏  ›  技术社区  ›  to StackOverflow

在AWS中运行的应用程序如何了解其环境?

  •  1
  • to StackOverflow  · 技术社区  · 6 年前

    我在不同类型的AWS主机上运行不同类型的应用程序,包括:

    1. 在EC2实例(Windows和Linux)上运行
    2. 在自动缩放的EC2实例上运行
    3. 在弹力豆茎上跑步(ASP.NET 以及ASP.NET (核心)
    4. 在Fargate上的Linux Docker容器中运行

    我希望我的应用程序能够检测到它们正在运行的环境(开发、暂存、生产),以便它们可以在启动时加载适当的配置,例如从参数存储层次结构中特定于环境的文件夹中加载。

    理想情况下,我可以调用一个简单的API(比如 GetCurrentEnvironment()

    以上述所有主机类型通用的方式实现这一点的最佳方法是什么?

    否则,我猜解决方案是在创建主机时设置环境变量“CurrentEnvironment”或类似的变量。

    我想这是一个常见的要求,所以我很想知道别人是怎么做的。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Matt D    6 年前

    标记是最广泛支持的方法。


    弹性豆茎 可以为可从中读取的应用程序环境设置环境属性Web.config .NET应用程序中的appSettings。

    弹力豆茎>[应用程序名称]>[环境名称]>配置>软件

    添加具有 Name Value ,例如:

    • 名称=释放环境;值=暂存
    • Name=EnvironmentSecretKey;Value=someSecureKeythat无法访问SecureParameterStore

    <appSettings> 部分。

    因此,在应用程序中,使用以下代码读取值:

    var environmentName = ConfigurationManager.AppSettings["ReleaseEnvironment"];
    

    然后可以使用该值从参数存储中获取特定于环境的属性。您还可以通过这种方式传递大量值,并在更合适的情况下避免参数存储。

    其他EB部署的语言也通过环境变量得到支持: https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/environments-cfg-softwaresettings.html


    ,您可以在配置中设置环境变量,并在Lambda容器中读取它们: https://docs.aws.amazon.com/lambda/latest/dg/env_variables.html


    describe-task-definition .


    在EC2中 ,您需要使用元数据服务读取用户数据:

    user_data=`curl http://169.254.169.254/latest/user-data/`
    

    请参见: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html

        2
  •  1
  •   Yogesh_D    6 年前

    检索这些服务的元数据没有灵丹妙药。因为服务本身的性质是完全不同的。

    metadata service corresponding sdks .

    对于Beanstalk,由于技术上使用ec2,所以可以使用元数据服务。但是,我更建议您在EBS中设置相关的项是配置。例如,假设您有一个应用程序,您希望为Prod类型的部署设置4GB堆空间,为Dev类型设置1GB堆空间。您可以在部署期间执行此操作。

    metadata 但是,即使对于lambda,您也会知道在部署期间lambda的配置/大小,并可以使用它来设置相关的env变量。

    因此,您可以让这些元素的部署脚本/作业查看参数存储,并在部署期间配置相关服务。这将确保您拥有更简单的应用程序和CI/CD管道,您可以在设置应用程序时分担它们的工作。

    在我看来,标签应该用于创建的元数据,您可以理解,这个资源属于什么服务,它的用途是什么等等。