Systems Manager 參數類型 - AWS CloudFormation

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

Systems Manager 參數類型

「Systems Manager」參數類型與「Systems Manager 參數存放區」中的既有參 您可以指定「Systems Manager」參數鍵做為「Systems Manager」參數類型的值,並從「參數存放區」 CloudFormation 擷取最新值以用於堆疊。例如,當您需要經常使用不同的值來更新應用程式資源時,例如 Amazon Machine Image (AMI),此功能會很有用IDs。

您可以在主控台的堆疊的「參數」索引標籤上查看「Systems Manager」參數的解析值,或執行describe-stacksdescribe-change-set。這些值目前用於對應 Systems Manager 參數索引鍵的堆疊定義中。請注意,這些值是在建立或更新堆疊時所設定,因此可能會與參數存放區中的最新值不同。

由於「Systems Manager」參數類型的值是參數索引鍵,因此您應該注意下列行為:

  • 對於堆疊更新,請使用主控台中的 [使用現有值] 選項,以及update-stack告知使 CloudFormation 用現有 Systems Manager 參數金鑰的UsePreviousValue屬性,而不是其值。 CloudFormation 始終在更新堆棧時從參數存儲中獲取最新值。

  • CloudFormation 可以對 Systems Manager 參數鍵執行驗證,但不能對其對應的值執行驗證。針對驗證用途,您可以將參數索引鍵視為字串。您應該執行參數存放區中 Systems Manager 參數值的任何驗證。

當您建立或更新堆疊並建立變更集時, CloudFormation 會使用執行作業時存在於參數存放區中的任何值。如果指定的參數不存在於調用者下的參數存儲中 AWS 帳戶,則 CloudFormation返回驗證錯誤。

當您執行變更集時, CloudFormation 會使用變更集中指定的值。您應該先檢閱這些值,再執行變更集,因為它們可能會在您建立變更集與執行變更集之間於參數存放區中變更。

如需有關參數存放區的資訊,請參閱 Systems Manager 參數存放區

注意

對於儲存在相同的參數存放區參數 AWS 帳戶,您必須提供參數名稱。對於另一個參數存放區共用的參數 AWS 帳戶,您必須提供完整參數ARN。

支援的 Systems Manager 參數類

CloudFormation 支援下列「Systems Manager」參數類型:

AWS::SSM::Parameter::Name

Systems Manager 參數索引鍵的名稱。

當您想要傳遞參數索引鍵時,請使用此參數。例如,您可以使用此類型來驗證參數已存在。

AWS::SSM::Parameter::Value<String>

值為字串的 Systems Manager 參數。這對應至參數存放區中的 String 參數類型。

AWS::SSM::Parameter::Value<List<String>>AWS::SSM::Parameter::Value<CommaDelimitedList>

值為字串清單的 Systems Manager 參數。這對應至參數存放區中的 StringList 參數類型。

AWS::SSM::Parameter::Value<AWS-specific parameter type>

其值為 AWS特定參數類型的 Systems Manager 參數。例如,以下指定 AWS::EC2::KeyPair::KeyName 類型:

AWS::SSM::Parameter::Value<AWS::EC2::KeyPair::KeyName>

AWS::SSM::Parameter::Value<List<AWS-specific parameter type>>

其值為 AWS特定參數類型清單的 Systems Manager 參數。例如,以下指定 AWS::EC2::KeyPair::KeyName 類型清單:

AWS::SSM::Parameter::Value<List<AWS::EC2::KeyPair::KeyName>>

不支援的 Systems Manager 參數

CloudFormation 不支援下列 Systems Manager 參數類型:

  • 系統管理員參數類型清單 — 例如:List<AWS::SSM::Parameter::Value<String>>

此外, CloudFormation 不支援將範本參數定義為「SecureStringSystems Manager」參數類型。但是,您可以將安全字串指定為某些資源的參數。如需詳細資訊,請參閱使用動態參照指定儲存在其他服務中的值

範例

AMI參考 Systems Manager 公用參數做為預設值的識別碼

<AWS::EC2::Image::Id>類型專門用於 AMI ID 參數,並支持由提供的公共參數 AWS。

下列範例會宣告名為 type LatestAmiId AWS::SSM::Parameter::Value<AWS::EC2::Image::Id> 的參數。依預設,EC2例證的ImageId性質會參考/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2。此公用參數是最新版 Amazon Linux 2 的區域 AMI ID 值的別名AMI。若要取得有關公用參數的更多資訊,請參閱AWS Systems Manager 使用指南中的〈尋找公參數〉

JSON

{ "Parameters": { "LatestAmiId": { "Description": "Region specific image from the Parameter Store", "Type": "AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>", "Default": "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2" } }, "Resources": { "Instance": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId": { "Ref": "LatestAmiId" } } } } }

YAML

Parameters: LatestAmiId: Description: Region specific image from the Parameter Store Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>' Default: '/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2' Resources: Instance: Type: 'AWS::EC2::Instance' Properties: ImageId: !Ref LatestAmiId

AMI參考「Systems Manager」參數且沒有預設值的 ID

下列範例會宣告名為 type AWS::SSM::Parameter::Value<AWS::EC2::Image::Id> 且沒有預設值ImageId的參數。這表示建立堆疊時,您必須提供參考所需 AMI ID 的 Systems Manager 參數金鑰。

JSON

{ "Parameters": { "ImageId": { "Type": "AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>" } }, "Resources": { "Instance": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId": { "Ref": "ImageId" } } } } }

YAML

Parameters: ImageId: Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>' Resources: Instance: Type: 'AWS::EC2::Instance' Properties: ImageId: !Ref ImageId

下列命令會根據範例範本來建立堆疊。它提供 Systems Manager 參數索引鍵 (myLatestAMI) 作為 ImageId 範本參數的值。這假設myLatestAMI參數存在於呼叫者下的參數存放區中 AWS 帳戶。

aws cloudformation create-stack --stack-name S2 --template-body example template \ --parameters ParameterKey=ImageId,ParameterValue=myLatestAMI

參考 Systems Manager 字串參數

下列範例會宣告名為 type InstanceType AWS::SSM::Parameter::Value<String> 的參數。因為沒有預設值,所以在建立堆疊時,您必須提供參照所需執行個體類型的 Systems Manager 參數鍵。

JSON

{ "Parameters": { "InstanceType": { "Type": "AWS::SSM::Parameter::Value<String>" } }, "Resources": { "Instance": { "Type": "AWS::EC2::Instance", "Properties": { "InstanceType": { "Ref": "InstanceType" } } } } }

YAML

Parameters: InstanceType: Type: 'AWS::SSM::Parameter::Value<String>' Resources: Instance: Type: 'AWS::EC2::Instance' Properties: InstanceType: !Ref InstanceType

下列命令會根據範例範本來建立堆疊。它提供 Systems Manager 參數索引鍵 (myInstanceType) 作為 InstanceType 範本參數的值。這假設myInstanceType參數存在於呼叫者下的參數存放區中 AWS 帳戶。

aws cloudformation create-stack --stack-name S1 --template-body example template \ --parameters ParameterKey=InstanceType,ParameterValue=myInstanceType