CloudFormation에서 제공하는 파라미터 유형을 사용하여 런타임 시 기존 리소스 지정
템플릿을 생성할 때 CloudFormation에서 제공하는 특수 파라미터 유형을 사용하여 사용자가 기존 AWS 리소스의 식별자 또는 Systems Manager 파라미터의 식별자를 입력해야 하는 파라미터를 생성할 수 있습니다.
개요
CloudFormation에서 파라미터를 사용하여 스택 생성 또는 업데이트 중에 입력 값을 제공하여 스택을 사용자 지정할 수 있습니다. 이 특성을 통해 템플릿을 다양한 시나리오에서 유연하게 재사용할 수 있습니다.
파라미터는 CloudFormation 템플릿의 Parameters
섹션에 정의되어 있습니다. 파라미터마다 이름과 유형이 있으며, 기본값과 허용되는 값 등의 추가 설정이 있을 수 있습니다. 자세한 내용은 CloudFormation 템플릿 Parameters 구문 단원을 참조하십시오.
파라미터 유형에 따라 파라미터가 허용할 수 있는 입력 값의 종류가 결정됩니다. 예를 들어, Number
는 숫자 값만 허용하고 String
은 텍스트 입력을 허용합니다.
CloudFormation은 템플릿에서 기존 AWS 리소스 및 Systems Manager 파라미터를 참조하는 데 사용할 수 있는 몇 가지 추가 파라미터 유형을 제공합니다.
이러한 파라미터 유형은 두 가지 범주로 분류됩니다.
-
AWS 특정 파라미터 유형 - CloudFormation은 스택을 생성하거나 업데이트할 때 잘못된 값을 포착하는 데 도움이 되는 파라미터 유형 세트를 제공합니다. 이러한 파라미터 유형을 사용할 때 템플릿을 사용하는 모든 사용자는 스택을 생성하는 AWS 계정과 리전에서 유효한 값을 지정해야 합니다.
AWS Management Console을 사용하는 경우 CloudFormation은 계정과 리전의 미리 채워진 기존 값 목록을 제공합니다. 이렇게 하면 사용자가 특정 이름이나 ID를 기억하고 정확하게 입력할 필요가 없습니다. 대신 드롭다운 목록에서 값을 선택하기만 하면 됩니다. 경우에 따라 ID, 이름 또는
Name
태그 값으로 값을 검색할 수도 있습니다. -
Systems Manager 파라미터 유형 - CloudFormation은 또한 Systems Manager Parameter Store의 기존 파라미터에 해당하는 파라미터 유형을 제공합니다. 이러한 파라미터 유형을 사용하는 경우 템플릿을 사용하는 모든 사용자는 Parameter Store 파라미터 키를 Systems Manager 파라미터 유형 값으로 지정해야 합니다. 그러면 CloudFormation이 Parameter Store에서 스택에 사용할 최신 값을 검색합니다. 이는 새로운 Amazon Machine Image(AMI) ID와 같은 새 속성 값으로 애플리케이션을 자주 업데이트해야 할 때 유용할 수 있습니다. Parameter Store에 대한 자세한 내용은 Systems Manager Parameter Store를 참조하세요.
Parameters
섹션에 파라미터가 정의되면 Ref
함수를 사용하여 CloudFormation 템플릿 전체에서 파라미터 값을 참조할 수 있습니다.
예제
다음 예에서는 다음 파라미터 유형을 사용하는 템플릿을 보여줍니다.
-
AWS::EC2::VPC::Id
-
AWS::EC2::Subnet::Id
-
AWS::EC2::KeyPair::KeyName
-
AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>
이 템플릿에서 스택을 생성하려면 계정에서 기존 VPC ID, 서브넷 ID 및 키 페어 이름을 지정해야 합니다. 원하는 AMI ID를 참조하는 기존 Parameter Store 키를 지정하거나 기본값인
를 유지할 수도 있습니다. 이 공용 파라미터는 최신 Amazon Linux 2 AMI의 리전 AMI ID에 대한 별칭입니다. 공용 파라미터에 대한 자세한 내용은 AWS Systems Manager 사용 설명서의 Parameter Store에서 퍼블릭 파라미터 검색을 참조하세요./aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2
JSON
{ "Parameters": { "VpcId": { "Description": "ID of an existing Virtual Private Cloud (VPC).", "Type": "AWS::EC2::VPC::Id" }, "PublicSubnetId": { "Description": "ID of an existing public subnet within the specified VPC.", "Type": "AWS::EC2::Subnet::Id" }, "KeyName": { "Description": "Name of an existing EC2 key pair to enable SSH access to the instance.", "Type": "AWS::EC2::KeyPair::KeyName" }, "AMIId": { "Description": "Name of a Parameter Store parameter that stores the ID of the Amazon Machine Image (AMI).", "Type": "AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>", "Default": "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2" } }, "Resources": { "InstanceSecurityGroup": { "Type": "AWS::EC2::SecurityGroup", "Properties": { "GroupDescription": "Enable SSH access via port 22", "VpcId": { "Ref": "VpcId" }, "SecurityGroupIngress": [ { "IpProtocol": "tcp", "FromPort": 22, "ToPort": 22, "CidrIp": "0.0.0.0/0" } ] } }, "Ec2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "KeyName": { "Ref": "KeyName" }, "ImageId": { "Ref": "AMIId" }, "NetworkInterfaces": [ { "AssociatePublicIpAddress": "true", "DeviceIndex": "0", "SubnetId": { "Ref": "PublicSubnetId" }, "GroupSet": [{ "Ref": "InstanceSecurityGroup" }] } ] } } }, "Outputs": { "InstanceId": { "Value": { "Ref": "Ec2Instance" } } } }
YAML
Parameters: VpcId: Description: ID of an existing Virtual Private Cloud (VPC). Type: 'AWS::EC2::VPC::Id' PublicSubnetId: Description: ID of an existing public subnet within the specified VPC. Type: 'AWS::EC2::Subnet::Id' KeyName: Description: Name of an existing EC2 KeyPair to enable SSH access to the instance. Type: 'AWS::EC2::KeyPair::KeyName' AMIId: Description: Name of a Parameter Store parameter that stores the ID of the Amazon Machine Image (AMI). Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>' Default: '/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2' Resources: InstanceSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: Enable SSH access via port 22 VpcId: !Ref VpcId SecurityGroupIngress: - IpProtocol: tcp FromPort: 22 ToPort: 22 CidrIp: 0.0.0.0/0 Ec2Instance: Type: AWS::EC2::Instance Properties: KeyName: !Ref KeyName ImageId: !Ref AMIId NetworkInterfaces: - AssociatePublicIpAddress: "true" DeviceIndex: "0" SubnetId: !Ref PublicSubnetId GroupSet: - !Ref InstanceSecurityGroup Outputs: InstanceId: Value: !Ref Ec2Instance
스택을 생성하는 AWS CLI 명령
다음 create-stack 명령은 예제 템플릿을 기초로 스택을 생성합니다.
aws cloudformation create-stack --stack-name
MyStack
\ --template-bodyfile://sampletemplate.json
\ --parameters \ ParameterKey="VpcId",ParameterValue="vpc-a123baa3
" \ ParameterKey="PublicSubnetId",ParameterValue="subnet-123a351e
" \ ParameterKey="KeyName",ParameterValue="MyKeyName
" \ ParameterKey="AMIId",ParameterValue="MyParameterKey
"
List<AWS::EC2::Subnet::Id>
와 같이 문자열 목록을 허용하는 파라미터 유형을 사용하려면 다음 예와 같이 ParameterValue
내부의 쉼표를 이중 백슬래시로 이스케이프해야 합니다.
--parameters ParameterKey="SubnetIDs",ParameterValue="
subnet-5ea0c127\\,subnet-6194ea3b\\,subnet-c87f2be0
"
고려 사항
동적 참조를 사용하여 타사 자격 증명과 같은 민감한 구성 정의에 대한 액세스를 제한하는 것이 좋습니다. 자세한 내용은 동적 참조를 사용하여 다른 서비스에 저장된 값 가져오기 단원을 참조하십시오.
템플릿 사용자가 다른 AWS 계정의 값을 지정할 수 있도록 하려면 AWS 특정 파라미터 유형을 사용하지 마세요. 대신 String
또는 CommaDelimitedList
유형의 파라미터를 정의하세요.
Systems Manager 파라미터 유형과 관련하여 몇 가지 유의해야 할 사항이 있습니다.
-
확인된 파라미터 값은 콘솔의 스택 파라미터 탭에서 확인하거나 describe-stacks 또는 describe-change-set를 실행하여 확인할 수 있습니다. 이러한 값은 스택이 생성되거나 업데이트될 때 설정되므로 Parameter Store의 최신 값과 다를 수 있습니다.
-
스택 업데이트의 경우 기존 값 사용 옵션을 사용하거나
UsePreviousValue
를 true로 설정하면 해당 값이 아닌 동일한 Parameter Store 키를 계속 사용한다는 의미입니다. CloudFormation은 항상 최신 값을 검색합니다. -
허용되는 값이나 기타 제약 조건을 지정하는 경우 CloudFormation은 지정한 파라미터 키에 대해 이를 검증하지만 해당 값은 검증하지 않습니다. Parameter Store 자체에서 값을 검증해야 합니다.
-
스택을 생성하거나 업데이트하고 변경 세트를 생성할 때 CloudFormation은 해당 시점에 Parameter Store에 있는 임의의 값을 사용합니다. 지정한 파라미터가 호출자의 AWS 계정과 연결된 Parameter Store에 없는 경우 CloudFormation은 검증 오류를 반환합니다.
-
변경 세트를 실행하면, CloudFormation은 변경 세트에서 지정한 값을 사용합니다. 변경 세트를 실행하기 전에 값을 확인해야 합니다. 변경 세트를 생성해 실행하는 동안 Parameter Store에서 변경될 수 있기 때문입니다.
-
동일한 AWS 계정에 저장된 Parameter Store 파라미터의 경우 파라미터 이름을 제공해야 합니다. 다른 AWS 계정에서 공유하는 Parameter Store 파라미터의 경우 전체 파라미터 ARN을 제공해야 합니다.
지원되는 AWS 특정 파라미터 유형
CloudFormation에서는 다음과 같은 AWS 관련 유형을 지원합니다.
AWS::EC2::AvailabilityZone::Name
-
가용 영역(예:
us-west-2a
). AWS::EC2::Image::Id
-
Amazon EC2 이미지 ID(예:
ami-0ff8a91507f77f867
). CloudFormation 콘솔은 이 파라미터 유형에 대해 드롭다운 값 목록을 표시하지 않습니다. AWS::EC2::Instance::Id
-
Amazon EC2 인스턴스 ID(예:
i-1e731a32
). AWS::EC2::KeyPair::KeyName
-
Amazon EC2 키 페어 이름.
AWS::EC2::SecurityGroup::GroupName
-
기본 VPC 보안 그룹 이름(예:
my-sg-abc
). AWS::EC2::SecurityGroup::Id
-
보안 그룹 ID(예:
sg-a123fd85
). AWS::EC2::Subnet::Id
-
서브넷 ID(예:
subnet-123a351e
). AWS::EC2::Volume::Id
-
Amazon EBS 볼륨 ID(예:
vol-3cdd3f56
). AWS::EC2::VPC::Id
-
VPC ID(예:
vpc-a123baa3
). AWS::Route53::HostedZone::Id
-
Amazon Route 53 호스팅 영역 ID(예:
Z23YXV4OVPL04A
). List<AWS::EC2::AvailabilityZone::Name>
-
리전 가용 영역 어레이(예:
us-west-2a, us-west-2b
). List<AWS::EC2::Image::Id>
-
Amazon EC2 이미지 ID 어레이(예:
ami-0ff8a91507f77f867, ami-0a584ac55a7631c0c
). CloudFormation 콘솔은 이 파라미터 유형에 대해 드롭다운 값 목록을 표시하지 않습니다. List<AWS::EC2::Instance::Id>
-
Amazon EC2 인스턴스 ID 어레이(예:
i-1e731a32, i-1e731a34
). List<AWS::EC2::SecurityGroup::GroupName>
-
기본 VPC 보안 그룹 이름 어레이(예:
my-sg-abc, my-sg-def
). List<AWS::EC2::SecurityGroup::Id>
-
보안 그룹 ID 어레이(예:
sg-a123fd85, sg-b456fd85
). List<AWS::EC2::Subnet::Id>
-
서브넷 ID 어레이(예:
subnet-123a351e, subnet-456b351e
). List<AWS::EC2::Volume::Id>
-
Amazon EBS 볼륨 ID 어레이(예:
vol-3cdd3f56, vol-4cdd3f56
). List<AWS::EC2::VPC::Id>
-
VPC ID 어레이(예:
vpc-a123baa3, vpc-b456baa3
). List<AWS::Route53::HostedZone::Id>
-
Amazon Route 53 호스팅 영역 ID 어레이(예:
Z23YXV4OVPL04A, Z23YXV4OVPL04B
).
지원되는 Systems Manager 파라미터 유형
CloudFormation은 다음과 같은 Systems Manager 파라미터 유형을 지원합니다.
AWS::SSM::Parameter::Name
-
시스템 관리자 파라미터 키의 이름입니다. 이 파라미터 유형은 필수 파라미터가 존재하는지 확인하는 데만 사용합니다. CloudFormation은 파라미터와 연결된 실제 값을 검색하지 않습니다.
AWS::SSM::Parameter::Value<String>
-
값이 문자열인 시스템 관리자 파라미터입니다. 이는 Parameter Store의
String
파라미터 유형과 일치합니다. AWS::SSM::Parameter::Value<List<String>>
또는AWS::SSM::Parameter::Value<CommaDelimitedList>
-
값이 문자열 목록인 시스템 관리자 파라미터입니다. 이는 Parameter Store의
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 파라미터 유형을 지원하지 않습니다.
-
Systems Manager 파라미터 유형 목록(예:
List<AWS::SSM::Parameter::Value<String>>
)
추가로 CloudFormation에서는 SecureString
Systems Manager 파라미터 유형으로 템플릿 파라미터를 정의하는 것을 지원하지 않습니다. 하지만 보안 문자열을 특정 리소스에 대한 파라미터 값으로 지정할 수 있습니다. 자세한 내용은 동적 참조를 사용하여 다른 서비스에 저장된 값 가져오기 단원을 참조하십시오.