AWS CloudFormation을 사용한 시작 템플릿 생성 - AWS CloudFormation

AWS CloudFormation을 사용한 시작 템플릿 생성

이 섹션에서는 AWS CloudFormation을 사용하여 Amazon EC2 시작 템플릿을 생성하는 예를 제공합니다. 시작 템플릿을 사용하면 AWS 내에서 Amazon EC2 인스턴스를 구성하고 프로비저닝하기 위한 템플릿을 생성할 수 있습니다. 시작 템플릿을 사용하면 인스턴스를 시작할 때마다 지정할 필요가 없도록 시작 파라미터를 저장할 수 있습니다. 더 많은 예는 AWS::EC2::LaunchTemplate 리소스의 섹션을 참조하세요.

시작 템플릿에 대한 자세한 내용은 시작 템플릿에서 인스턴스 시작을 참조하세요.

Auto Scaling 그룹에 사용할 시작 템플릿을 생성하는 방법에 대한 자세한 내용은 Amazon EC2 Auto Scaling 사용 설명서의 시작 템플릿을 참조하세요.

보안 그룹, 태그, 사용자 데이터와 IAM 역할을 지정하는 시작 템플릿 생성

이 코드 조각은 인스턴스를 시작하기 위한 구성 정보를 포함하는 AWS::EC2::LaunchTemplate 리소스를 보여줍니다. ImageId, InstanceType, SecurityGroups, UserDataTagSpecifications 속성의 값을 지정합니다. SecurityGroups 속성은 기존 EC2 보안 그룹과 새 보안 그룹을 지정합니다. Ref 함수는 스택 템플릿에 선언된 AWS::EC2::SecurityGroup 리소스 myNewEC2SecurityGroup의 ID를 가져옵니다.

시작 템플릿에는 사용자 정의 사용자 데이터에 대한 부분이 포함되어 있습니다. 이 섹션에서 인스턴스가 시작될 때 실행되는 구성 태스크 및 스크립트를 전달할 수 있습니다. 이 예제에서 사용자 데이터는 AWS Systems Manager Agent를 설치하고 시작합니다.

시작 템플릿에는 인스턴스에서 실행되는 애플리케이션이 사용자를 대신하여 작업을 수행할 수 있도록 하는 IAM 역할도 포함되어 있습니다. 이 예제는 IamInstanceProfile 속성을 사용하여 IAM 역할을 지정하는 시작 템플릿에 대한 AWS::IAM::Role 리소스를 보여줍니다. Ref 함수는 AWS::IAM::InstanceProfile 리소스 myInstanceProfile의 이름을 가져옵니다. IAM 역할의 권한을 구성하려면 ManagedPolicyArns 속성 값을 지정합니다.

JSON

{ "Resources":{ "myLaunchTemplate":{ "Type":"AWS::EC2::LaunchTemplate", "Properties":{ "LaunchTemplateName":{ "Fn::Sub": "${AWS::StackName}-launch-template" }, "LaunchTemplateData":{ "ImageId":"ami-02354e95b3example", "InstanceType":"t3.micro", "IamInstanceProfile":{ "Name":{ "Ref":"myInstanceProfile" } }, "SecurityGroupIds":[ { "Ref":"myNewEC2SecurityGroup" }, "sg-083cd3bfb8example" ], "UserData":{ "Fn::Base64":{ "Fn::Join": [ "", [ "#!/bin/bash\n", "cd /tmp\n", "yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm\n", "systemctl enable amazon-ssm-agent\n", "systemctl start amazon-ssm-agent\n" ] ] } }, "TagSpecifications":[ { "ResourceType":"instance", "Tags":[ { "Key":"environment", "Value":"development" } ] }, { "ResourceType":"volume", "Tags":[ { "Key":"environment", "Value":"development" } ] } ] } } }, "myInstanceRole":{ "Type":"AWS::IAM::Role", "Properties":{ "RoleName":"InstanceRole", "AssumeRolePolicyDocument":{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "Service":[ "ec2.amazonaws.com" ] }, "Action":[ "sts:AssumeRole" ] } ] }, "ManagedPolicyArns":[ "arn:aws:iam::aws:policy/myCustomerManagedPolicy" ] } }, "myInstanceProfile":{ "Type":"AWS::IAM::InstanceProfile", "Properties":{ "Path":"/", "Roles":[ { "Ref":"myInstanceRole" } ] } } } }

YAML

--- Resources: myLaunchTemplate: Type: AWS::EC2::LaunchTemplate Properties: LaunchTemplateName: !Sub ${AWS::StackName}-launch-template LaunchTemplateData: ImageId: ami-02354e95b3example InstanceType: t3.micro IamInstanceProfile: Name: !Ref myInstanceProfile SecurityGroupIds: - !Ref myNewEC2SecurityGroup - sg-083cd3bfb8example UserData: Fn::Base64: !Sub | #!/bin/bash cd /tmp yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm systemctl enable amazon-ssm-agent systemctl start amazon-ssm-agent TagSpecifications: - ResourceType: instance Tags: - Key: environment Value: development - ResourceType: volume Tags: - Key: environment Value: development myInstanceRole: Type: AWS::IAM::Role Properties: RoleName: InstanceRole AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: 'Allow' Principal: Service: - 'ec2.amazonaws.com' Action: - 'sts:AssumeRole' ManagedPolicyArns: - 'arn:aws:iam::aws:policy/myCustomerManagedPolicy' myInstanceProfile: Type: AWS::IAM::InstanceProfile Properties: Path: '/' Roles: - !Ref myInstanceRole