Move container log definition to container class
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
package fargate
|
package fargate
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/aws/aws-sdk-go/aws"
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
@@ -18,6 +19,11 @@ const (
|
|||||||
containerStatusRunning = "RUNNING"
|
containerStatusRunning = "RUNNING"
|
||||||
containerStatusStopped = "STOPPED"
|
containerStatusStopped = "STOPPED"
|
||||||
|
|
||||||
|
// Container log configuration options.
|
||||||
|
containerLogOptionRegion = "awslogs-region"
|
||||||
|
containerLogOptionGroup = "awslogs-group"
|
||||||
|
containerLogOptionStreamPrefix = "awslogs-stream-prefix"
|
||||||
|
|
||||||
// Default container resource limits.
|
// Default container resource limits.
|
||||||
containerDefaultCPULimit = VCPU / 4
|
containerDefaultCPULimit = VCPU / 4
|
||||||
containerDefaultMemoryLimit = 512 * MiB
|
containerDefaultMemoryLimit = 512 * MiB
|
||||||
@@ -65,6 +71,21 @@ func newContainerFromDefinition(def *ecs.ContainerDefinition, startTime *time.Ti
|
|||||||
return &cntr, nil
|
return &cntr, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ConfigureLogs configures container logs to be sent to the given CloudWatch log group.
|
||||||
|
func (cntr *container) configureLogs(region string, logGroupName string, streamPrefix string) {
|
||||||
|
streamPrefix = fmt.Sprintf("%s_%s", streamPrefix, *cntr.definition.Name)
|
||||||
|
|
||||||
|
// Fargate requires awslogs log driver.
|
||||||
|
cntr.definition.LogConfiguration = &ecs.LogConfiguration{
|
||||||
|
LogDriver: aws.String(ecs.LogDriverAwslogs),
|
||||||
|
Options: map[string]*string{
|
||||||
|
containerLogOptionRegion: aws.String(region),
|
||||||
|
containerLogOptionGroup: aws.String(logGroupName),
|
||||||
|
containerLogOptionStreamPrefix: aws.String(streamPrefix),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// GetStatus returns the status of a container running in Fargate.
|
// GetStatus returns the status of a container running in Fargate.
|
||||||
func (cntr *container) getStatus(runtimeState *ecs.Container) corev1.ContainerStatus {
|
func (cntr *container) getStatus(runtimeState *ecs.Container) corev1.ContainerStatus {
|
||||||
var reason string
|
var reason string
|
||||||
|
|||||||
@@ -80,10 +80,6 @@ func NewPod(cluster *Cluster, pod *corev1.Pod) (*Pod, error) {
|
|||||||
ContainerDefinitions: []*ecs.ContainerDefinition{},
|
ContainerDefinitions: []*ecs.ContainerDefinition{},
|
||||||
}
|
}
|
||||||
|
|
||||||
if cluster.executionRoleArn != "" {
|
|
||||||
taskDef.ExecutionRoleArn = aws.String(cluster.executionRoleArn)
|
|
||||||
}
|
|
||||||
|
|
||||||
// For each container in the pod...
|
// For each container in the pod...
|
||||||
for _, containerSpec := range pod.Spec.Containers {
|
for _, containerSpec := range pod.Spec.Containers {
|
||||||
// Create a container definition.
|
// Create a container definition.
|
||||||
@@ -92,16 +88,9 @@ func NewPod(cluster *Cluster, pod *corev1.Pod) (*Pod, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Configure container logs to be sent to CloudWatch Logs if enabled.
|
||||||
if cluster.cloudWatchLogGroupName != "" {
|
if cluster.cloudWatchLogGroupName != "" {
|
||||||
// Configure container logs to be sent to the configured Cloudwatch Logs Log Group.
|
cntr.configureLogs(cluster.region, cluster.cloudWatchLogGroupName, tag)
|
||||||
cntr.definition.LogConfiguration = &ecs.LogConfiguration{
|
|
||||||
LogDriver: aws.String(ecs.LogDriverAwslogs),
|
|
||||||
Options: map[string]*string{
|
|
||||||
"awslogs-group": aws.String(cluster.cloudWatchLogGroupName),
|
|
||||||
"awslogs-region": aws.String(cluster.region),
|
|
||||||
"awslogs-stream-prefix": aws.String(fmt.Sprintf("%s_%s", tag, containerSpec.Name)),
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add the container's resource requirements to its pod's total resource requirements.
|
// Add the container's resource requirements to its pod's total resource requirements.
|
||||||
@@ -124,9 +113,15 @@ func NewPod(cluster *Cluster, pod *corev1.Pod) (*Pod, error) {
|
|||||||
taskDef.Cpu = aws.String(strconv.Itoa(int(fgPod.taskCPU)))
|
taskDef.Cpu = aws.String(strconv.Itoa(int(fgPod.taskCPU)))
|
||||||
taskDef.Memory = aws.String(strconv.Itoa(int(fgPod.taskMemory)))
|
taskDef.Memory = aws.String(strconv.Itoa(int(fgPod.taskMemory)))
|
||||||
|
|
||||||
|
// Set a custom task execution IAM role if configured.
|
||||||
|
if cluster.executionRoleArn != "" {
|
||||||
|
taskDef.ExecutionRoleArn = aws.String(cluster.executionRoleArn)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set a custom task IAM role if configured.
|
||||||
if val, ok := pod.Annotations[taskRoleAnnotation]; ok {
|
if val, ok := pod.Annotations[taskRoleAnnotation]; ok {
|
||||||
taskDef.TaskRoleArn = aws.String(val)
|
taskDef.TaskRoleArn = aws.String(val)
|
||||||
fgPod.taskRoleArn = *taskDef.TaskRoleArn
|
fgPod.taskRoleArn = val
|
||||||
}
|
}
|
||||||
|
|
||||||
// Register the task definition with Fargate.
|
// Register the task definition with Fargate.
|
||||||
|
|||||||
Reference in New Issue
Block a user