in internal/pkg/deploy/cloudformation/stack/backend_svc.go [99:227]
func (s *BackendService) Template() (string, error) {
crs, err := convertCustomResources(s.rc.CustomResourcesURL)
if err != nil {
return "", err
}
addonsParams, err := s.addonsParameters()
if err != nil {
return "", err
}
addonsOutputs, err := s.addonsOutputs()
if err != nil {
return "", err
}
exposedPorts, err := s.manifest.ExposedPorts()
if err != nil {
return "", fmt.Errorf("parse exposed ports in service manifest %s: %w", s.name, err)
}
sidecars, err := convertSidecars(s.manifest.Sidecars, exposedPorts.PortsForContainer, s.rc)
if err != nil {
return "", fmt.Errorf("convert the sidecar configuration for service %s: %w", s.name, err)
}
publishers, err := convertPublish(s.manifest.Publish(), s.rc.AccountID, s.rc.Region, s.app, s.env, s.name)
if err != nil {
return "", fmt.Errorf(`convert "publish" field for service %s: %w`, s.name, err)
}
advancedCount, err := convertAdvancedCount(s.manifest.Count.AdvancedCount)
if err != nil {
return "", fmt.Errorf("convert the advanced count configuration for service %s: %w", s.name, err)
}
var autoscaling *template.AutoscalingOpts
var desiredCountOnSpot *int
var capacityProviders []*template.CapacityProviderStrategy
if advancedCount != nil {
autoscaling = advancedCount.Autoscaling
desiredCountOnSpot = advancedCount.Spot
capacityProviders = advancedCount.Cps
}
entrypoint, err := convertEntryPoint(s.manifest.EntryPoint)
if err != nil {
return "", err
}
command, err := convertCommand(s.manifest.Command)
if err != nil {
return "", err
}
importedALBConfig, err := s.convertImportedALB()
if err != nil {
return "", err
}
scTarget := s.manifest.ServiceConnectTarget(exposedPorts)
scOpts := template.ServiceConnectOpts{
Server: convertServiceConnectServer(s.manifest.Network.Connect, scTarget),
Client: s.manifest.Network.Connect.Enabled(),
}
albListenerConfig, err := s.convertALBListener()
if err != nil {
return "", err
}
content, err := s.parser.ParseBackendService(template.WorkloadOpts{
// Workload parameters.
AppName: s.app,
EnvName: s.env,
EnvVersion: s.rc.EnvVersion,
Version: s.rc.Version,
SerializedManifest: string(s.rawManifest),
WorkloadType: manifestinfo.BackendServiceType,
WorkloadName: s.name,
// Configuration for the main container.
EntryPoint: entrypoint,
Command: command,
HealthCheck: convertContainerHealthCheck(s.manifest.BackendServiceConfig.ImageConfig.HealthCheck),
PortMappings: convertPortMappings(exposedPorts.PortsForContainer[s.name]),
Secrets: convertSecrets(s.manifest.BackendServiceConfig.Secrets),
Variables: convertEnvVars(s.manifest.BackendServiceConfig.Variables),
// Additional options that are common between **all** workload templates.
AddonsExtraParams: addonsParams,
Autoscaling: autoscaling,
CapacityProviders: capacityProviders,
CredentialsParameter: aws.StringValue(s.manifest.ImageConfig.Image.Credentials),
DeploymentConfiguration: convertDeploymentConfig(s.manifest.DeployConfig),
DesiredCountOnSpot: desiredCountOnSpot,
DependsOn: convertDependsOn(s.manifest.ImageConfig.Image.DependsOn),
DockerLabels: s.manifest.ImageConfig.Image.DockerLabels,
ExecuteCommand: convertExecuteCommand(&s.manifest.ExecuteCommand),
LogConfig: convertLogging(s.manifest.Logging),
NestedStack: addonsOutputs,
Network: convertNetworkConfig(s.manifest.Network),
Publish: publishers,
PermissionsBoundary: s.permBound,
Platform: convertPlatform(s.manifest.Platform),
Storage: convertStorageOpts(s.manifest.Name, s.manifest.Storage),
// ALB configs.
ALBEnabled: s.albEnabled,
GracePeriod: s.convertGracePeriod(),
ALBListener: albListenerConfig,
ImportedALB: importedALBConfig,
// Custom Resource Config.
CustomResources: crs,
// Sidecar config.
Sidecars: sidecars,
// service connect and service discovery options.
ServiceConnectOpts: scOpts,
ServiceDiscoveryEndpoint: s.rc.ServiceDiscoveryEndpoint,
// Additional options for request driven web service templates.
Observability: template.ObservabilityOpts{
Tracing: strings.ToUpper(aws.StringValue(s.manifest.Observability.Tracing)),
},
})
if err != nil {
return "", fmt.Errorf("parse backend service template: %w", err)
}
overriddenTpl, err := s.taskDefOverrideFunc(convertTaskDefOverrideRules(s.manifest.TaskDefOverrides), content.Bytes())
if err != nil {
return "", fmt.Errorf("apply task definition overrides: %w", err)
}
return string(overriddenTpl), nil
}