Skip to content

Commit 432fb5e

Browse files
author
Lachlan Donald
authored
Merge pull request #589 from buildkite/use-launch-templates-take-2
Use a LaunchTemplate instead of a LaunchConfiguration
2 parents 8aa53bb + 29e73fb commit 432fb5e

File tree

1 file changed

+118
-109
lines changed

1 file changed

+118
-109
lines changed

templates/aws-stack.yml

Lines changed: 118 additions & 109 deletions
Original file line numberDiff line numberDiff line change
@@ -693,102 +693,130 @@ Resources:
693693
Roles:
694694
- !Ref IAMRole
695695

696-
AgentLaunchConfiguration:
697-
Type: AWS::AutoScaling::LaunchConfiguration
696+
AgentLaunchTemplate:
697+
Type: "AWS::EC2::LaunchTemplate"
698698
Properties:
699-
AssociatePublicIpAddress: !Ref AssociatePublicIpAddress
700-
SecurityGroups: [ !If [ "CreateSecurityGroup", !Ref SecurityGroup, !Ref SecurityGroupId ] ]
701-
KeyName: !If [ "HasKeyName", !Ref KeyName, !Ref 'AWS::NoValue' ]
702-
IamInstanceProfile: !Ref IAMInstanceProfile
703-
InstanceType: !Ref InstanceType
704-
SpotPrice: !If [ "UseSpotInstances", !Ref SpotPrice, !Ref 'AWS::NoValue' ]
705-
ImageId: !If [ UseDefaultAMI, !FindInMap [ AWSRegion2AMI, !Ref 'AWS::Region', !Ref InstanceOperatingSystem ], !Ref ImageId ]
706-
BlockDeviceMappings:
707-
- DeviceName: !Ref RootVolumeName
708-
Ebs: { VolumeSize: !Ref RootVolumeSize, VolumeType: !Ref RootVolumeType }
709-
UserData:
710-
Fn::Base64: !If
711-
- UseWindowsAgents
712-
- !Sub
713-
- |
714-
<powershell>
715-
$Env:DOCKER_USERNS_REMAP="${EnableDockerUserNamespaceRemap}"
716-
$Env:DOCKER_EXPERIMENTAL="${EnableDockerExperimental}"
717-
powershell -file C:\buildkite-agent\bin\bk-configure-docker.ps1 >> C:\buildkite-agent\elastic-stack.log
718-
719-
$Env:BUILDKITE_STACK_NAME="${AWS::StackName}"
720-
$Env:BUILDKITE_STACK_VERSION=%v
721-
$Env:BUILDKITE_SCALE_IN_IDLE_PERIOD="${ScaleInIdlePeriod}"
722-
$Env:BUILDKITE_SECRETS_BUCKET="${LocalSecretsBucket}"
723-
$Env:BUILDKITE_AGENT_TOKEN="${BuildkiteAgentToken}"
724-
$Env:BUILDKITE_AGENTS_PER_INSTANCE="${AgentsPerInstance}"
725-
$Env:BUILDKITE_AGENT_TAGS="${BuildkiteAgentTags}"
726-
$Env:BUILDKITE_AGENT_TIMESTAMP_LINES="${BuildkiteAgentTimestampLines}"
727-
$Env:BUILDKITE_AGENT_EXPERIMENTS="${BuildkiteAgentExperiments}"
728-
$Env:BUILDKITE_AGENT_RELEASE="${BuildkiteAgentRelease}"
729-
$Env:BUILDKITE_QUEUE="${BuildkiteQueue}"
730-
$Env:BUILDKITE_AGENT_ENABLE_GIT_MIRRORS_EXPERIMENT="${EnableAgentGitMirrorsExperiment}"
731-
$Env:BUILDKITE_ELASTIC_BOOTSTRAP_SCRIPT="${BootstrapScriptUrl}"
732-
$Env:BUILDKITE_AUTHORIZED_USERS_URL="${AuthorizedUsersUrl}"
733-
$Env:BUILDKITE_ECR_POLICY="${ECRAccessPolicy}"
734-
$Env:BUILDKITE_TERMINATE_INSTANCE_AFTER_JOB="${BuildkiteTerminateInstanceAfterJob}"
735-
$Env:BUILDKITE_ADDITIONAL_SUDO_PERMISSIONS="${BuildkiteAdditionalSudoPermissions}"
736-
$Env:BUILDKITE_WINDOWS_ADMINISTRATOR="${BuildkiteWindowsAdministrator}"
737-
$Env:AWS_DEFAULT_REGION="${AWS::Region}"
738-
$Env:SECRETS_PLUGIN_ENABLED="${EnableSecretsPlugin}"
739-
$Env:ECR_PLUGIN_ENABLED="${EnableECRPlugin}"
740-
$Env:DOCKER_LOGIN_PLUGIN_ENABLED="${EnableDockerLoginPlugin}"
741-
$Env:AWS_REGION="${AWS::Region}"
742-
powershell -file C:\buildkite-agent\bin\bk-install-elastic-stack.ps1 >> C:\buildkite-agent\elastic-stack.log
743-
</powershell>
744-
- {
745-
LocalSecretsBucket: !If [ CreateSecretsBucket, !Ref ManagedSecretsBucket, !Ref SecretsBucket ],
746-
}
747-
- !Sub
748-
- |
749-
Content-Type: multipart/mixed; boundary="==BOUNDARY=="
750-
MIME-Version: 1.0
751-
--==BOUNDARY==
752-
Content-Type: text/cloud-boothook; charset="us-ascii"
753-
DOCKER_USERNS_REMAP=${EnableDockerUserNamespaceRemap} \
754-
DOCKER_EXPERIMENTAL=${EnableDockerExperimental} \
755-
/usr/local/bin/bk-configure-docker.sh
756-
--==BOUNDARY==
757-
Content-Type: text/x-shellscript; charset="us-ascii"
758-
#!/bin/bash -xv
759-
BUILDKITE_STACK_NAME="${AWS::StackName}" \
760-
BUILDKITE_STACK_VERSION=%v \
761-
BUILDKITE_SCALE_IN_IDLE_PERIOD=${ScaleInIdlePeriod} \
762-
BUILDKITE_SECRETS_BUCKET="${LocalSecretsBucket}" \
763-
BUILDKITE_AGENT_TOKEN="${BuildkiteAgentToken}" \
764-
BUILDKITE_AGENTS_PER_INSTANCE="${AgentsPerInstance}" \
765-
BUILDKITE_AGENT_TAGS="${BuildkiteAgentTags}" \
766-
BUILDKITE_AGENT_TIMESTAMP_LINES="${BuildkiteAgentTimestampLines}" \
767-
BUILDKITE_AGENT_EXPERIMENTS="${BuildkiteAgentExperiments}" \
768-
BUILDKITE_AGENT_RELEASE="${BuildkiteAgentRelease}" \
769-
BUILDKITE_QUEUE="${BuildkiteQueue}" \
770-
BUILDKITE_AGENT_ENABLE_GIT_MIRRORS_EXPERIMENT=${EnableAgentGitMirrorsExperiment} \
771-
BUILDKITE_ELASTIC_BOOTSTRAP_SCRIPT="${BootstrapScriptUrl}" \
772-
BUILDKITE_AUTHORIZED_USERS_URL="${AuthorizedUsersUrl}" \
773-
BUILDKITE_ECR_POLICY=${ECRAccessPolicy} \
774-
BUILDKITE_TERMINATE_INSTANCE_AFTER_JOB=${BuildkiteTerminateInstanceAfterJob} \
775-
BUILDKITE_ADDITIONAL_SUDO_PERMISSIONS=${BuildkiteAdditionalSudoPermissions} \
776-
AWS_DEFAULT_REGION=${AWS::Region} \
777-
SECRETS_PLUGIN_ENABLED=${EnableSecretsPlugin} \
778-
ECR_PLUGIN_ENABLED=${EnableECRPlugin} \
779-
DOCKER_LOGIN_PLUGIN_ENABLED=${EnableDockerLoginPlugin} \
780-
AWS_REGION=${AWS::Region} \
781-
/usr/local/bin/bk-install-elastic-stack.sh
782-
--==BOUNDARY==--
783-
- {
784-
LocalSecretsBucket: !If [ CreateSecretsBucket, !Ref ManagedSecretsBucket, !Ref SecretsBucket ],
785-
}
699+
LaunchTemplateData:
700+
NetworkInterfaces:
701+
- DeviceIndex: 0
702+
AssociatePublicIpAddress: { Ref: AssociatePublicIpAddress }
703+
Groups:
704+
- !If [ "CreateSecurityGroup", !Ref SecurityGroup, !Ref SecurityGroupId ]
705+
KeyName: !If [ "HasKeyName", !Ref KeyName, !Ref 'AWS::NoValue' ]
706+
IamInstanceProfile:
707+
Arn: !GetAtt "IAMInstanceProfile.Arn"
708+
InstanceType: !Ref InstanceType
709+
MarketType: !If [ "UseSpotInstances", "spot", !Ref 'AWS::NoValue' ]
710+
SpotOptions: !If
711+
- UseSpotInstances
712+
- SpotOptions:
713+
MaxPrice: !Ref SpotPrice
714+
- !Ref "AWS::NoValue"
715+
ImageId: !If [ UseDefaultAMI, !FindInMap [ AWSRegion2AMI, !Ref 'AWS::Region', !Ref InstanceOperatingSystem ], !Ref ImageId ]
716+
BlockDeviceMappings:
717+
- DeviceName: /dev/xvda
718+
Ebs: { VolumeSize: !Ref RootVolumeSize, VolumeType: !Ref RootVolumeType }
719+
TagSpecifications:
720+
- ResourceType: instance
721+
Tags:
722+
- Key: Role
723+
Value: buildkite-agent
724+
- Key: Name
725+
Value: buildkite-agent
726+
- Key: BuildkiteAgentRelease
727+
Value: !Ref BuildkiteAgentRelease
728+
- Key: BuildkiteQueue
729+
Value: !Ref BuildkiteQueue
730+
- !If
731+
- UseCostAllocationTags
732+
- Key: !Ref CostAllocationTagName
733+
Value: !Ref CostAllocationTagValue
734+
- !Ref "AWS::NoValue"
735+
UserData:
736+
Fn::Base64: !If
737+
- UseWindowsAgents
738+
- !Sub
739+
- |
740+
<powershell>
741+
$Env:DOCKER_USERNS_REMAP="${EnableDockerUserNamespaceRemap}"
742+
$Env:DOCKER_EXPERIMENTAL="${EnableDockerExperimental}"
743+
powershell -file C:\buildkite-agent\bin\bk-configure-docker.ps1 >> C:\buildkite-agent\elastic-stack.log
744+
745+
$Env:BUILDKITE_STACK_NAME="${AWS::StackName}"
746+
$Env:BUILDKITE_STACK_VERSION=%v
747+
$Env:BUILDKITE_SCALE_IN_IDLE_PERIOD="${ScaleInIdlePeriod}"
748+
$Env:BUILDKITE_SECRETS_BUCKET="${LocalSecretsBucket}"
749+
$Env:BUILDKITE_AGENT_TOKEN="${BuildkiteAgentToken}"
750+
$Env:BUILDKITE_AGENTS_PER_INSTANCE="${AgentsPerInstance}"
751+
$Env:BUILDKITE_AGENT_TAGS="${BuildkiteAgentTags}"
752+
$Env:BUILDKITE_AGENT_TIMESTAMP_LINES="${BuildkiteAgentTimestampLines}"
753+
$Env:BUILDKITE_AGENT_EXPERIMENTS="${BuildkiteAgentExperiments}"
754+
$Env:BUILDKITE_AGENT_RELEASE="${BuildkiteAgentRelease}"
755+
$Env:BUILDKITE_QUEUE="${BuildkiteQueue}"
756+
$Env:BUILDKITE_AGENT_ENABLE_GIT_MIRRORS_EXPERIMENT="${EnableAgentGitMirrorsExperiment}"
757+
$Env:BUILDKITE_ELASTIC_BOOTSTRAP_SCRIPT="${BootstrapScriptUrl}"
758+
$Env:BUILDKITE_AUTHORIZED_USERS_URL="${AuthorizedUsersUrl}"
759+
$Env:BUILDKITE_ECR_POLICY="${ECRAccessPolicy}"
760+
$Env:BUILDKITE_TERMINATE_INSTANCE_AFTER_JOB="${BuildkiteTerminateInstanceAfterJob}"
761+
$Env:BUILDKITE_ADDITIONAL_SUDO_PERMISSIONS="${BuildkiteAdditionalSudoPermissions}"
762+
$Env:BUILDKITE_WINDOWS_ADMINISTRATOR="${BuildkiteWindowsAdministrator}"
763+
$Env:AWS_DEFAULT_REGION="${AWS::Region}"
764+
$Env:SECRETS_PLUGIN_ENABLED="${EnableSecretsPlugin}"
765+
$Env:ECR_PLUGIN_ENABLED="${EnableECRPlugin}"
766+
$Env:DOCKER_LOGIN_PLUGIN_ENABLED="${EnableDockerLoginPlugin}"
767+
$Env:AWS_REGION="${AWS::Region}"
768+
powershell -file C:\buildkite-agent\bin\bk-install-elastic-stack.ps1 >> C:\buildkite-agent\elastic-stack.log
769+
</powershell>
770+
- {
771+
LocalSecretsBucket: !If [ CreateSecretsBucket, !Ref ManagedSecretsBucket, !Ref SecretsBucket ],
772+
}
773+
- !Sub
774+
- |
775+
Content-Type: multipart/mixed; boundary="==BOUNDARY=="
776+
MIME-Version: 1.0
777+
--==BOUNDARY==
778+
Content-Type: text/cloud-boothook; charset="us-ascii"
779+
DOCKER_USERNS_REMAP=${EnableDockerUserNamespaceRemap} \
780+
DOCKER_EXPERIMENTAL=${EnableDockerExperimental} \
781+
/usr/local/bin/bk-configure-docker.sh
782+
--==BOUNDARY==
783+
Content-Type: text/x-shellscript; charset="us-ascii"
784+
#!/bin/bash -xv
785+
BUILDKITE_STACK_NAME="${AWS::StackName}" \
786+
BUILDKITE_STACK_VERSION=%v \
787+
BUILDKITE_SCALE_IN_IDLE_PERIOD=${ScaleInIdlePeriod} \
788+
BUILDKITE_SECRETS_BUCKET="${LocalSecretsBucket}" \
789+
BUILDKITE_AGENT_TOKEN="${BuildkiteAgentToken}" \
790+
BUILDKITE_AGENTS_PER_INSTANCE="${AgentsPerInstance}" \
791+
BUILDKITE_AGENT_TAGS="${BuildkiteAgentTags}" \
792+
BUILDKITE_AGENT_TIMESTAMP_LINES="${BuildkiteAgentTimestampLines}" \
793+
BUILDKITE_AGENT_EXPERIMENTS="${BuildkiteAgentExperiments}" \
794+
BUILDKITE_AGENT_RELEASE="${BuildkiteAgentRelease}" \
795+
BUILDKITE_QUEUE="${BuildkiteQueue}" \
796+
BUILDKITE_AGENT_ENABLE_GIT_MIRRORS_EXPERIMENT=${EnableAgentGitMirrorsExperiment} \
797+
BUILDKITE_ELASTIC_BOOTSTRAP_SCRIPT="${BootstrapScriptUrl}" \
798+
BUILDKITE_AUTHORIZED_USERS_URL="${AuthorizedUsersUrl}" \
799+
BUILDKITE_ECR_POLICY=${ECRAccessPolicy} \
800+
BUILDKITE_TERMINATE_INSTANCE_AFTER_JOB=${BuildkiteTerminateInstanceAfterJob} \
801+
BUILDKITE_ADDITIONAL_SUDO_PERMISSIONS=${BuildkiteAdditionalSudoPermissions} \
802+
AWS_DEFAULT_REGION=${AWS::Region} \
803+
SECRETS_PLUGIN_ENABLED=${EnableSecretsPlugin} \
804+
ECR_PLUGIN_ENABLED=${EnableECRPlugin} \
805+
DOCKER_LOGIN_PLUGIN_ENABLED=${EnableDockerLoginPlugin} \
806+
AWS_REGION=${AWS::Region} \
807+
/usr/local/bin/bk-install-elastic-stack.sh
808+
--==BOUNDARY==--
809+
- {
810+
LocalSecretsBucket: !If [ CreateSecretsBucket, !Ref ManagedSecretsBucket, !Ref SecretsBucket ],
811+
}
786812

787813
AgentAutoScaleGroup:
788814
Type: AWS::AutoScaling::AutoScalingGroup
789815
Properties:
790816
VPCZoneIdentifier: !If [ "CreateVpcResources", [ !Ref Subnet0, !Ref Subnet1 ], !Ref Subnets ]
791-
LaunchConfigurationName: !Ref AgentLaunchConfiguration
817+
LaunchTemplate:
818+
LaunchTemplateId: !Ref AgentLaunchTemplate
819+
Version: !GetAtt "AgentLaunchTemplate.LatestVersionNumber"
792820
MinSize: !Ref MinSize
793821
MaxSize: !Ref MaxSize
794822
Cooldown: 0
@@ -803,25 +831,6 @@ Resources:
803831
TerminationPolicies:
804832
- OldestLaunchConfiguration
805833
- ClosestToNextInstanceHour
806-
Tags:
807-
- Key: Role
808-
Value: buildkite-agent
809-
PropagateAtLaunch: true
810-
- Key: Name
811-
Value: buildkite-agent
812-
PropagateAtLaunch: true
813-
- Key: BuildkiteAgentRelease
814-
Value: !Ref BuildkiteAgentRelease
815-
PropagateAtLaunch: true
816-
- Key: BuildkiteQueue
817-
Value: !Ref BuildkiteQueue
818-
PropagateAtLaunch: true
819-
- !If
820-
- UseCostAllocationTags
821-
- Key: !Ref CostAllocationTagName
822-
Value: !Ref CostAllocationTagValue
823-
PropagateAtLaunch: true
824-
- !Ref "AWS::NoValue"
825834
CreationPolicy:
826835
ResourceSignal:
827836
Timeout: !Ref InstanceCreationTimeout

0 commit comments

Comments
 (0)