

這是 AWS CDK v2 開發人員指南。較舊的 CDK v1 已於 2022 年 6 月 1 日進入維護，並於 2023 年 6 月 1 日結束支援。

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

# 從 Systems Manager 參數存放區取得值
<a name="get-ssm-value"></a>

 AWS 雲端開發套件 (AWS CDK) 可以擷取 AWS Systems Manager 參數存放區屬性的值。在合成期間， AWS CDK 會產生由 AWS CloudFormation 在部署期間解析的[權杖](tokens.md)。

 AWS CDK 支援擷取純值和安全值。您可以請求任何一種值的特定版本。對於純值，您可以省略請求中的版本，以擷取最新版本。對於安全值，您必須在請求安全屬性的值時指定版本。

**注意**  
本主題說明如何從 AWS Systems Manager 參數存放區讀取屬性。您也可以從 AWS Secrets Manager 讀取秘密 （請參閱[從 AWS Secrets Manager 取得值](get-secrets-manager-value.md))。

## 在部署時間讀取 Systems Manager 值
<a name="ssm-read-at-deploy"></a>

若要從 Systems Manager 參數存放區讀取值，請使用 [https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ssm.StringParameter.html#static-valuewbrforwbrstringwbrparameterscope-parametername-version](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ssm.StringParameter.html#static-valuewbrforwbrstringwbrparameterscope-parametername-version)和 [https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ssm.StringParameter.html#static-valuewbrforwbrsecurewbrstringwbrparameterscope-parametername-version](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ssm.StringParameter.html#static-valuewbrforwbrsecurewbrstringwbrparameterscope-parametername-version)方法。根據您想要的屬性是純字串或安全字串值，選擇方法。這些方法會傳回[字符](tokens.md)，而不是實際值。值會在部署期間由 AWS CloudFormation 解析。以下是範例：

**Example**  

```
import * as ssm from 'aws-cdk-lib/aws-ssm';

// Get latest version or specified version of plain string attribute
const latestStringToken = ssm.StringParameter.valueForStringParameter(
    this, 'my-plain-parameter-name');      // latest version
const versionOfStringToken = ssm.StringParameter.valueForStringParameter(
    this, 'my-plain-parameter-name', 1);   // version 1

// Get specified version of secure string attribute
const secureStringToken = ssm.StringParameter.valueForSecureStringParameter(
    this, 'my-secure-parameter-name', 1);   // must specify version
```

```
const ssm = require('aws-cdk-lib/aws-ssm');

// Get latest version or specified version of plain string attribute
const latestStringToken = ssm.StringParameter.valueForStringParameter(
    this, 'my-plain-parameter-name');      // latest version
const versionOfStringToken = ssm.StringParameter.valueForStringParameter(
    this, 'my-plain-parameter-name', 1);   // version 1

// Get specified version of secure string attribute
const secureStringToken = ssm.StringParameter.valueForSecureStringParameter(
    this, 'my-secure-parameter-name', 1);   // must specify version
```

```
import aws_cdk.aws_ssm as ssm

# Get latest version or specified version of plain string attribute
latest_string_token = ssm.StringParameter.value_for_string_parameter(
    self, "my-plain-parameter-name")
latest_string_token = ssm.StringParameter.value_for_string_parameter(
    self, "my-plain-parameter-name", 1)

# Get specified version of secure string attribute
secure_string_token = ssm.StringParameter.value_for_secure_string_parameter(
    self, "my-secure-parameter-name", 1)   # must specify version
```

```
import software.amazon.awscdk.services.ssm.StringParameter;

//Get latest version or specified version of plain string attribute
String latestStringToken = StringParameter.valueForStringParameter(
            this, "my-plain-parameter-name");       // latest version
String versionOfStringToken = StringParameter.valueForStringParameter(
            this, "my-plain-parameter-name", 1);    // version 1

//Get specified version of secure string attribute
String secureStringToken = StringParameter.valueForSecureStringParameter(
            this, "my-secure-parameter-name", 1);   // must specify version
```

```
using Amazon.CDK.AWS.SSM;

// Get latest version or specified version of plain string attribute
var latestStringToken = StringParameter.ValueForStringParameter(
    this, "my-plain-parameter-name");      // latest version
var versionOfStringToken = StringParameter.ValueForStringParameter(
    this, "my-plain-parameter-name", 1);   // version 1

// Get specified version of secure string attribute
var secureStringToken = StringParameter.ValueForSecureStringParameter(
    this, "my-secure-parameter-name", 1);   // must specify version
```

[有限數量 AWS 的服務](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/dynamic-references.html#template-parameters-dynamic-patterns-resources)目前支援此功能。

## 合成時讀取 Systems Manager 值
<a name="ssm-read-at-synth"></a>

有時，在合成時提供參數會很有用。透過這樣做， AWS CloudFormation 範本將一律使用相同的值，而不是在部署期間解析該值。

若要在合成時間從 Systems Manager 參數存放區讀取值，請使用 [https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ssm.StringParameter.html#static-valuewbrfromwbrlookupscope-parametername](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ssm.StringParameter.html#static-valuewbrfromwbrlookupscope-parametername)方法 (Python：`value_from_lookup`)。此方法會將 參數的實際值傳回為[內容值和 AWS CDK ](context.md)值。如果該值尚未快取`cdk.json`或傳遞至命令列，則會從目前 AWS 帳戶擷取。因此，堆疊*必須以*明確的 AWS 環境資訊合成。

以下是範例：

**Example**  

```
import * as ssm from 'aws-cdk-lib/aws-ssm';

const stringValue = ssm.StringParameter.valueFromLookup(this, 'my-plain-parameter-name');
```

```
const ssm = require('aws-cdk-lib/aws-ssm');

const stringValue = ssm.StringParameter.valueFromLookup(this, 'my-plain-parameter-name');
```

```
import aws_cdk.aws_ssm as ssm

string_value = ssm.StringParameter.value_from_lookup(self, "my-plain-parameter-name")
```

```
import software.amazon.awscdk.services.ssm.StringParameter;

String stringValue = StringParameter.valueFromLookup(this, "my-plain-parameter-name");
```

```
using Amazon.CDK.AWS.SSM;

var stringValue = StringParameter.ValueFromLookup(this, "my-plain-parameter-name");
```

只能擷取純 Systems Manager 字串。無法擷取安全字串。一律會傳回最新版本。無法請求特定版本。

**重要**  
擷取的值最終將出現在您的合成 AWS CloudFormation 範本中。這可能是安全風險，取決於誰可以存取您的 AWS CloudFormation 範本及其價值類型。一般而言，請勿將此功能用於密碼、金鑰或其他您想要保持私密的值。

## 將值寫入 Systems Manager
<a name="ssm-write"></a>

您可以使用 AWS CLI、 AWS 管理主控台或 AWS SDK 來設定 Systems Manager 參數值。下列範例使用 [https://docs.aws.amazon.com/cli/latest/reference/ssm/put-parameter.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/put-parameter.html) CLI 命令。

```
aws ssm put-parameter --name "parameter-name" --type "String" --value "parameter-value"
aws ssm put-parameter --name "secure-parameter-name" --type "SecureString" --value "secure-parameter-value"
```

更新已存在的 SSM 值時，請同時包含 `--overwrite`選項。

```
aws ssm put-parameter --overwrite --name "parameter-name" --type "String" --value "parameter-value"
aws ssm put-parameter --overwrite --name "secure-parameter-name" --type "SecureString" --value "secure-parameter-value"
```