

AWS App Runner 自 2026 年 4 月 30 日起，不再開放給新客戶。如果您想要使用 App Runner，請在該日期之前註冊。現有客戶可以繼續正常使用該服務。如需詳細資訊，請參閱[AWS App Runner 可用性變更](https://docs.aws.amazon.com/apprunner/latest/dg/apprunner-availability-change.html)。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 參考環境變數
<a name="env-variable"></a>

透過 App Runner，您可以在[建立服務或](manage-create.md)[更新](manage-configure.md)服務時，將秘密和組態參考為服務中的環境變數。

您可以參考非敏感組態資料，例如**純文字**中的逾時和重試計數作為鍵/值對。您在**純文字**中參考的組態資料不會加密，其他人可以在 App Runner 服務組態和應用程式日誌中看到。

**注意**  
基於安全考量，請勿在 App Runner 服務中參考**純文字**中的任何敏感資料。

## 參考敏感資料做為環境變數
<a name="env-variable.sensitivedata"></a>

App Runner 支援在服務中安全地參考敏感資料做為環境變數。考慮在 *AWS Secrets Manager*或 *AWS Systems Manager 參數存放*區中存放您要參考的敏感資料。然後，您可以從 App Runner 主控台或呼叫 API，安全地在服務中將其參考為環境變數。這可有效地將秘密和參數管理與應用程式程式碼和服務組態分開，從而改善在 App Runner 上執行之應用程式的整體安全性。

**注意**  
App Runner 不會因為參考 Secrets Manager 和 SSM 參數存放區做為環境變數而向您收費。不過，您需要為使用 Secrets Manager 和 SSM 參數存放區支付標準定價。  
如需關於定價的詳細資訊，請參閱下列資訊：  
 [AWS Secrets Manager 定價](https://aws.amazon.com/secrets-manager/pricing)
 [AWS SSM 參數存放區定價 ](https://aws.amazon.com/systems-manager/pricing) 

 以下是參考敏感資料做為環境變數的程序：

1. 在 或 AWS Secrets Manager AWS Systems Manager 參數存放區中，將 API 金鑰、資料庫登入資料、資料庫連線參數或應用程式版本等敏感資料儲存為秘密或參數。

1. 更新執行個體角色的 IAM 政策，讓 App Runner 可以存取存放在 Secrets Manager 和 SSM 參數存放區中的秘密和參數。如需詳細資訊，請參閱 [ 許可](#env-variable.sensitivedata.permissions)。

1. 透過指派名稱並提供其 Amazon Resource Name (ARN)，將秘密和參數安全地參考為環境變數。您可以在[建立服務或](manage-create.md)[更新服務組態](manage-configure.md)時新增環境變數。您可以使用下列其中一個選項來新增環境變數：
   +  App Runner 主控台 
   +  App Runner API 
   +  `apprunner.yaml` 組態檔案 
**注意**  
您無法在建立或更新 App Runner 服務時，將 指派`PORT`為環境變數的名稱。這是 App Runner 服務的預留環境變數。

   如需如何參考秘密和參數的詳細資訊，請參閱[管理環境變數](env-variable-manage.md)。

**注意**  
 由於 App Runner 只會儲存對秘密和參數 ARNs參考，因此其他人在 App Runner 服務組態和應用程式日誌中看不到敏感資料。

## 考量事項
<a name="env-variable.sensitivedata.considerations"></a>
+ 請務必使用適當的許可來更新執行個體角色，以存取 參數存放區中 AWS Secrets Manager 或 中的 AWS Systems Manager 秘密和參數。如需詳細資訊，請參閱 [ 許可](#env-variable.sensitivedata.permissions)。
+ 請確定 AWS Systems Manager 參數存放區與您要啟動或更新 AWS 帳戶 的服務位於相同的 中。目前，您無法跨帳戶參考 SSM 參數存放區參數。
+ 當秘密和參數值輪換或變更時，它們不會在您的 App Runner 服務中自動更新。重新部署您的 App Runner 服務，因為 App Runner 只會在部署期間提取秘密和參數。
+ 您也可以選擇透過 App Runner 服務中的 SDK 直接呼叫 AWS Secrets Manager 和 AWS Systems Manager 參數存放區。
+ 為了避免錯誤，在將它們參考為環境變數時，請確定下列事項：
  + 您可以指定秘密的正確 ARN。
  + 您可以指定 參數的正確名稱或 ARN。

## 許可
<a name="env-variable.sensitivedata.permissions"></a>

若要啟用參考存放在 AWS Secrets Manager 或 SSM 參數存放區中的秘密和參數，請將適當的許可新增至*執行個體角色*的 IAM 政策，以存取 Secrets Manager 和 SSM 參數存放區。

**注意**  
 未經您的許可，App Runner 無法存取您帳戶中的資源。您可以透過更新 IAM 政策來提供許可。

您可以使用下列政策範本，在 IAM 主控台中更新您的執行個體角色。您可以修改這些政策範本，以符合您的特定需求。如需更新執行個體角色的詳細資訊，請參閱《*IAM 使用者指南*》中的[修改角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-managingrole-editing-console.html)。

**注意**  
您也可以在[建立環境變數](env-variable-manage.md#env-variable-manage.console)時，從 App Runner 主控台複製下列範本。

將下列範本複製到您的執行個體角色，以新增從 參考*秘密*的許可*AWS Secrets Manager*。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "secretsmanager:GetSecretValue",
            "kms:Decrypt*"
        ],
        "Resource": [
            "arn:aws:secretsmanager:us-east-1:111122223333:secret:my-secret",
            "arn:aws:kms:us-east-1:111122223333:key/my-key"
         ]
     }
   ]
}
```

------

將下列範本複製到執行個體角色，以新增從*AWS Systems Manager*參數存放區參考*參數*的許可。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:GetParameters"
            ],
            "Resource": [
            "arn:aws:ssm:us-east-1:111122223333:parameter/my-parameter"
            ]
        }
    ]
}
```

------

# 管理您的環境變數
<a name="env-variable-manage"></a>

使用下列其中一種方法來管理 App Runner 服務的環境變數：
+ [App Runner 主控台](#env-variable-manage.console)
+ [App Runner API 或 AWS CLI](#env-variable-manage.api)

## App Runner 主控台
<a name="env-variable-manage.console"></a>

當您[在 App Runner 主控台上建立服務或](manage-create.md)[更新服務時](manage-configure.md)，您可以新增環境變數。

### 新增環境變數
<a name="env-variable-manage.console.add"></a>

**新增環境變數**

1. 開啟 [App Runner 主控台](https://console.aws.amazon.com/apprunner)，然後在**區域**清單中選取您的 AWS 區域。

1. 根據您是要建立或更新服務，請執行下列其中一個步驟：
   + 如果您要建立新的服務，請選擇**建立 App Runner 服務**，然後前往**設定服務**。
   +  如果您要更新現有的服務，請選取您要更新的服務，然後前往服務的**組態**索引標籤。

1.  前往**環境變數 - 服務設定下的選用**。 ****

1.  根據您的需求選擇下列任一選項：
   + 從**環境變數來源**中選擇**純文字**，並在**環境變數名稱**和**環境變數值**下分別輸入其鍵值對。
**注意**  
如果您想要參考非敏感資料，請選擇**純文字**。此資料不會加密，其他人可以在 App Runner 服務組態和應用程式日誌中看到。
   + 從**環境變數來源**中選擇 **Secrets Manager**，以參考存放在 中的秘密 AWS Secrets Manager 做為服務中的環境變數。分別在環境變數名稱和環境**變數值**下**，提供您參考之秘密的環境變數名稱**和 Amazon Resource Name (ARN)。
   + 從**環境變數來源**選擇 **SSM 參數存放**區，以參考存放在 SSM 參數存放區中的參數做為服務中的環境變數。分別在環境變數名稱和**環境變數值**下，提供您參考之參數**的環境變數名稱**和 ARN。
**注意**  
您無法在建立或更新 App Runner 服務時，將 指派`PORT`為環境變數的名稱。這是 App Runner 服務的預留環境變數。
 如果 SSM 參數存放區參數與您要啟動 AWS 區域 的服務位於相同位置，您可以指定完整 Amazon Resource Name (ARN) 或 參數的名稱。如果 參數位於不同的區域，您需要指定完整的 ARN。
請確定您參考的 參數與您啟動或更新的服務位於相同的 帳戶。目前，您無法跨帳戶參考 SSM 參數存放區參數。

1. 選擇**新增環境變數**以參考另一個環境變數。

1. 展開 **IAM 政策範本**，以檢視和複製為 AWS Secrets Manager 和 SSM 參數存放區提供的 IAM 政策範本。只有在您尚未使用所需的許可更新執行個體角色的 IAM 政策時，才需要執行此操作。如需詳細資訊，請參閱 [ 許可](env-variable.md#env-variable.sensitivedata.permissions)。

### 移除環境變數
<a name="env-variable-manage.console.remove"></a>

刪除環境變數之前，請確定您的應用程式程式碼已更新以反映相同的程式碼。如果應用程式碼未更新，您的 App Runner 服務可能會失敗。

**移除環境變數**

1. 開啟 [App Runner 主控台](https://console.aws.amazon.com/apprunner)，然後在**區域**清單中選取您的 AWS 區域。

1.  前往您要更新之服務的**組態**索引標籤。

1.  前往**環境變數 - 服務設定下的選用**。 ****

1.  選擇您要**移除**的環境變數旁的移除。您會收到確認刪除的訊息。

1.  選擇 **刪除**。

## App Runner API 或 AWS CLI
<a name="env-variable-manage.api"></a>

您可以參考存放在 Secrets Manager 和 SSM 參數存放區中的敏感資料，方法是將它們新增為服務中的環境變數。

**注意**  
更新執行個體角色的 IAM 政策，讓 App Runner 可以存取存放在 Secrets Manager 和 SSM 參數存放區的秘密和參數。如需詳細資訊，請參閱 [ 許可](env-variable.md#env-variable.sensitivedata.permissions)。

**參考秘密和組態做為環境變數**

1. 在 Secrets Manager 或 SSM 參數存放區中建立秘密或組態。

   下列範例示範如何使用 SSM 參數存放區建立秘密和參數。  
**Example 建立秘密 - 請求**  

   下列範例示範如何建立代表資料庫登入資料的秘密。

   ```
   aws secretsmanager create-secret \
   —name DevRdsCredentials \
   —description "Rds credentials for development account." \
   —secret-string "{\"user\":\"diegor\",\"password\":\"EXAMPLE-PASSWORD\"}"
   ```  
**Example 建立秘密 - 回應**  

   ```
   arn:aws:secretsmanager:<region>:<aws_account_id>:secret:DevRdsCredentials
   ```  
**Example 建立組態 - 請求**  

   下列範例示範如何建立代表 RDS 連線字串的參數。

   ```
   aws systemsmanager put-parameter \
   —name DevRdsConnectionString \
   —value "mysql2://dev-mysqlcluster-rds.com:3306/diegor" \
   —type "String" \
   —description "Rds connection string for development account."
   ```  
**Example 建立組態 - 回應**  

   ```
   arn:aws:ssm:<region>:<aws_account_id>:parameter/DevRdsConnectionString
   ```

1. 將秘密和組態新增為環境變數，以參考儲存在 Secrets Manager 和 SSM 參數存放區中的秘密和組態。您可以在建立或更新 App Runner 服務時新增環境變數。

   下列範例示範如何在程式碼型和映像型 App Runner 服務上將秘密和組態參考為環境變數。  
**Example 影像型 App Runner 服務的 Input.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>"
     }
   }
   ```  
**Example 以映像為基礎的 App Runner 服務 – 請求**  

   ```
   aws apprunner create-service \
   --cli-input-json file://input.json
   ```  
**Example 以映像為基礎的 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>"
      }
   ...
   }
   ```  
**Example 程式碼型 App Runner 服務的 Input.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>"
     }
   }
   ```  
**Example 程式碼型 App Runner 服務 – 請求**  

   ```
   aws apprunner create-service \
   --cli-input-json file://input.json
   ```  
**Example 程式碼型 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>"
      }
   ...
   }
   ```

1. `apprunner.yaml` 模型會更新以反映新增的秘密。

   以下是更新`apprunner.yaml`模型的範例。  
**Example `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"
   ```