

这是 AWS CDK v2 开发者指南。旧版 CDK v1 于 2022 年 6 月 1 日进入维护阶段，并于 2023 年 6 月 1 日终止支持。

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

# 从 Systems Manager Parameter Store 中获取值
<a name="get-ssm-value"></a>

AWS 云开发工具包 (AWS CDK) 可以检索 AWS Systems Manager Parameter Store 属性的值。在合成过程中，AWS CDK 会生成一个 [令牌](tokens.md)，该令牌在部署期间由 AWS CloudFormation 解析。

AWS CDK 支持检索纯文本值和安全值。您可以请求任何一种值的特定版本。对于纯文本值，您可以在检索最新版本的请求中省略版本。对于安全值，您必须在请求安全属性的值时指定版本。

**注意**  
本主题介绍如何从 AWS Systems Manager Parameter Store 读取属性。您也可以从 AWS Secrets Manager 读取密钥（请参阅[从 AWS Secrets Manager 获取值](get-secrets-manager-value.md)）。

## 在部署时读取 Systems Manager 的值
<a name="ssm-read-at-deploy"></a>

要从 Systems Manager Parameter Store 读取值，请使用 [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 Parameter Store 读取值，请使用 [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"
```