管理您的环境变量 - AWS App Runner

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

管理您的环境变量

使用以下方法之一管理 App Runner 服务的环境变量:

应用程序运行器控制台

在 App Runner 控制台上创建服务或更新服务时,可以添加环境变量。

添加环境变量

添加环境变量
  1. 打开 App Runner 控制台,然后在 “区域” 列表中,选择您的 AWS 区域。

  2. 根据您是在创建还是更新服务,执行以下步骤之一:

    • 如果您要创建新服务,请选择创建 App Runner 服务,然后转到配置服务

    • 如果您要更新现有服务,请选择要更新的服务,然后转到该服务的配置选项卡。

  3. 转到环境变量-在 “服务设置” 下可选

  4. 根据您的要求选择以下任一选项:

    • 环境变量源中选择纯文本,然后分别在环境变量名称和环境变量值下输入其键值对。

      注意

      如果要引用非敏感数据,请选择纯文本。这些数据未经加密,在 App Runner 服务配置和应用程序日志中对其他人可见。

    • 环境变量源中选择 Secr ets Manager,以引用 AWS Secrets Manager 作为环境变量存储在服务中的密钥。分别在环境变量名称和环境变量值下提供您所引用的密钥的环境变量名称和亚马逊资源名称 (ARN)。

    • 环境变量源中选择 SSM 参数存储,将存储在 SSM 参数存储中的参数作为服务中的环境变量引用。分别在环境变量名称和环境变量值下提供您所引用的参数的环境变量名称和 ARN。

      注意
      • 在创建或更新 PORT App Runner 服务时,不能将环境变量指定为名称。它是 App Runner 服务的保留环境变量。

      • 如果 SSM 参数存储参数与您要启动的服务 AWS 区域 相同,则可以指定完整的 Amazon 资源名称 (ARN) 或参数名称。如果参数位于不同的区域,则需要指定完整的 ARN。

      • 确保你所引用的参数与你正在启动或更新的服务位于同一个账户中。目前,您无法跨账户引用 SSM 参数存储参数。

  5. 选择添加环境变量以引用另一个环境变量。

  6. 展开 IAM 策略模板以查看和复制为 AWS Secrets Manager 和 SSM Parameter Store 提供的 IAM 策略模板。只有在您尚未使用所需权限更新实例角色的 IAM 策略时,才需要执行此操作。有关更多信息,请参阅 权限

移除环境变量

在删除环境变量之前,请确保更新您的应用程序代码以反映相同的内容。如果应用程序代码未更新,则您的 App Runner 服务可能会失败。

移除环境变量
  1. 打开 App Runner 控制台,然后在 “区域” 列表中,选择您的 AWS 区域。

  2. 转到要更新的服务的配置选项卡。

  3. 转到环境变量-在 “服务设置” 下可选

  4. 选择要移除的环境变量旁边的 “移除”。您会收到一条确认删除的消息。

  5. 选择删除

应用程序运行器 API 或 AWS CLI

您可以引用 Secrets Manager 和 SSM Parameter Store 中存储的敏感数据,方法是将它们作为环境变量添加到服务中。

注意

更新您的实例角色的 IAM 策略,这样 App Runner 就可以访问存储在 Secrets Manager 和 SSM Parameter Store 中的机密和参数。有关更多信息,请参阅 权限

将密钥和配置作为环境变量引用
  1. 在 Secrets Manager 或 SSM 参数存储区中创建密钥或配置。

    以下示例说明如何使用 SSM 参数存储区创建密钥和参数。

    例 创建密钥-请求

    以下示例说明如何创建代表数据库凭证的密钥。

    aws secretsmanager create-secret \ —name DevRdsCredentials \ —description "Rds credentials for development account." \ —secret-string "{\"user\":\"diegor\",\"password\":\"EXAMPLE-PASSWORD\"}"
    例 创建密钥-响应
    arn:aws:secretsmanager:<region>:<aws_account_id>:secret:DevRdsCredentials
    例 创建配置-请求

    以下示例说明如何创建表示 RDS 连接字符串的参数。

    aws systemsmanager put-parameter \ —name DevRdsConnectionString \ —value "mysql2://dev-mysqlcluster-rds.com:3306/diegor" \ —type "String" \ —description "Rds connection string for development account."
    例 创建配置-响应
    arn:aws:ssm:<region>:<aws_account_id>:parameter/DevRdsConnectionString
  2. 通过将存储在 Secrets Manager 和 SSM Parameter Store 中的密钥和配置添加为环境变量来引用它们。您可以在创建或更新 App Runner 服务时添加环境变量。

    以下示例说明如何在基于代码和基于图像的 App Runner 服务上将密钥和配置作为环境变量引用。

    例 基于图像的 App Runner 服务的输入.json 文件
    { "ServiceName": "example-secrets", "SourceConfiguration": { "ImageRepository": { "ImageIdentifier": "<image-identifier>", "ImageConfiguration": { "Port": "<port>", "RuntimeEnvironmentSecrets": { "Credential1":"arn:aws:secretsmanager:<region>:<aws_account_id>:secret:XXXXXXXXXXXX", "Credential2":"arn:aws:ssm:<region>:<aws_account_id>:parameter/<parameter-name>" } }, "ImageRepositoryType": "ECR_PUBLIC" } }, "InstanceConfiguration": { "Cpu": "1 vCPU", "Memory": "3 GB", "InstanceRoleArn": "<instance-role-arn>" } }
    例 基于图像的 App Runner 服务-请求
    aws apprunner create-service \ --cli-input-json file://input.json
    例 基于图像的 App Runner 服务-响应
    { ... "ImageRepository": { "ImageIdentifier":"<image-identifier>", "ImageConfiguration":{ "Port": "<port>", "RuntimeEnvironmentSecrets":{ "Credential1": "arn:aws:secretsmanager:<region>:<aws_account_id>:secret:XXXXXXXXXXXX", "Credential2": "arn:aws:ssm:<region>:<aws_account_id>:parameter/<parameter-name>" }, "ImageRepositoryType":"ECR" } }, "InstanceConfiguration": { "CPU": "1 vCPU", "Memory": "3 GB", "InstanceRoleArn: "<instance-role-arn>" } ... }
    例 基于代码的 App Runner 服务的输入.json 文件
    { "ServiceName": "example-secrets", "SourceConfiguration": { "AuthenticationConfiguration": { "ConnectionArn": "arn:aws:apprunner:us-east-1:123456789012:connection/my-github-connection/XXXXXXXXXX" }, "AutoDeploymentsEnabled": false, "CodeRepository": { "RepositoryUrl": "<repository-url>", "SourceCodeVersion": { "Type": "BRANCH", "Value": "main" }, "CodeConfiguration": { "ConfigurationSource": "API", "CodeConfigurationValues": { "Runtime": "<runtime>", "BuildCommand": "<build-command>", "StartCommand": "<start-command>", "Port": "<port>", "RuntimeEnvironmentSecrets": { "Credential1":"arn:aws:secretsmanager:<region>:<aws_account_id>:secret:XXXXXXXXXXXX", "Credential2":"arn:aws:ssm:<region>:<aws_account_id>:parameter/<parameter-name>" } } } } }, "InstanceConfiguration": { "Cpu": "1 vCPU", "Memory": "3 GB", "InstanceRoleArn": "<instance-role-arn>" } }
    例 基于代码的 App Runner 服务-请求
    aws apprunner create-service \ --cli-input-json file://input.json
    例 基于代码的 App Runner 服务-响应
    { ... "SourceConfiguration":{ "CodeRepository":{ "RepositoryUrl":"<repository-url>", "SourceCodeVersion":{ "Type":"Branch", "Value":"main" }, "CodeConfiguration":{ "ConfigurationSource":"API", "CodeConfigurationValues":{ "Runtime":"<runtime>", "BuildCommand":"<build-command>", "StartCommand":"<start-command>", "Port":"<port>", "RuntimeEnvironmentSecrets":{ "Credential1" : "arn:aws:secretsmanager:<region>:<aws_account_id>:secret:XXXXXXXX", "Credential2" : "arn:aws:ssm:<region>:<aws_account_id>:parameter/<parameter-name>" } } } }, "InstanceConfiguration": { "CPU": "1 vCPU", "Memory": "3 GB", "InstanceRoleArn: "<instance-role-arn>" } ... }
  3. apprunner.yaml模型已更新,以反映新增的秘密。

    以下是更新后的apprunner.yaml模型的示例。

    apprunner.yaml
    version: 1.0 runtime: python3 build: commands: build: - python -m pip install flask run: command: python app.py network: port: 8080 env: - name: MY_VAR_EXAMPLE value: "example" secrets: - name: my-secret value-from: "arn:aws:secretsmanager:<region>:<aws_account_id>:secret:XXXXXXXXXXXX" - name: my-parameter value-from: "arn:aws:ssm:<region>:<aws_account_id>:parameter/<parameter-name>" - name: my-parameter-only-name value-from: "parameter-name"