這是 AWS CDK v2 開發人員指南。較舊的 CDK v1 已於 2022 年 6 月 1 日進入維護,並於 2023 年 6 月 1 日結束支援。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
從 Systems Manager 參數存放區取得值
 AWS 雲端開發套件 (AWS CDK) 可以擷取 AWS Systems Manager 參數存放區屬性的值。在合成期間, AWS CDK 會產生由 AWS CloudFormation 在部署期間解析的權杖。
 AWS CDK 支援擷取純值和安全值。您可以請求任何一種值的特定版本。對於純值,您可以省略請求中的版本,以擷取最新版本。對於安全值,您必須在請求安全屬性的值時指定版本。
      在部署時間讀取 Systems Manager 值
      若要從 Systems Manager 參數存放區讀取值,請使用 valueForStringParameter和 valueForSecureStringParameter方法。根據您想要的屬性是純字串或安全字串值,選擇方法。這些方法會傳回字符,而不是實際值。值會在部署期間由 AWS CloudFormation 解析。以下是範例:
      
            - TypeScript
- 
                  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
 
- JavaScript
- 
                  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
 
- Python
- 
                  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
 
- Java
- 
                  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
 
- C#
- 
                  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 的服務目前支援此功能。
    
      合成時讀取 Systems Manager 值
      有時,在合成時提供參數會很有用。透過這樣做, AWS CloudFormation 範本將一律使用相同的值,而不是在部署期間解析該值。
      若要在合成時間從 Systems Manager 參數存放區讀取值,請使用 valueFromLookup方法 (Python:value_from_lookup)。此方法會將 參數的實際值傳回為內容值和 AWS CDK 值。如果該值尚未快取cdk.json或傳遞至命令列,則會從目前 AWS 帳戶擷取。因此,堆疊必須以明確的 AWS 環境資訊合成。
      以下是範例:
      
            - TypeScript
- 
                  import * as ssm from 'aws-cdk-lib/aws-ssm';
const stringValue = ssm.StringParameter.valueFromLookup(this, 'my-plain-parameter-name');
 
- JavaScript
- 
                  const ssm = require('aws-cdk-lib/aws-ssm');
const stringValue = ssm.StringParameter.valueFromLookup(this, 'my-plain-parameter-name');
 
- Python
- 
                  import aws_cdk.aws_ssm as ssm
string_value = ssm.StringParameter.value_from_lookup(self, "my-plain-parameter-name")
 
- Java
- 
                  import software.amazon.awscdk.services.ssm.StringParameter;
String stringValue = StringParameter.valueFromLookup(this, "my-plain-parameter-name");
 
- C#
- 
                  using Amazon.CDK.AWS.SSM;
var stringValue = StringParameter.ValueFromLookup(this, "my-plain-parameter-name");
 
只能擷取純 Systems Manager 字串。無法擷取安全字串。一律會傳回最新版本。無法請求特定版本。
      擷取的值最終將出現在您的合成 AWS CloudFormation 範本中。這可能是安全風險,取決於誰可以存取您的 AWS CloudFormation 範本及其價值類型。一般而言,請勿將此功能用於密碼、金鑰或其他您想要保持私密的值。
將值寫入 Systems Manager
      您可以使用 AWS CLI、 AWS 管理主控台或 AWS SDK 來設定 Systems Manager 參數值。下列範例使用 ssm put-parameter 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"