Skip to content

Commit

Permalink
Merge pull request #188 from do-su-0805/add/support_ecs-external
Browse files Browse the repository at this point in the history
add support Amazon ECS Anywhere ( experimental )
  • Loading branch information
yseto authored Jul 27, 2022
2 parents fdd36bb + e113554 commit 55f81de
Show file tree
Hide file tree
Showing 7 changed files with 70 additions and 0 deletions.
10 changes: 10 additions & 0 deletions agent/platform.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,16 @@ func NewPlatform(ctx context.Context, ignoreContainer *regexp.Regexp) (platform.
}
return ecs.NewECSPlatform(ctx, metadataURI, executionEnv, ignoreContainer)

// experimental : on AWS ECS External Instance, `AWS_EXECUTION_ENV` is not defined.
// follow user's `MACKEREL_CONTAINER_PLATFORM` setting and using unique value that does not interfere with AWS.
case platform.ECSExternal:
metadataURI, err := getEnvValue("ECS_CONTAINER_METADATA_URI")
if err != nil {
return nil, err
}
executionEnv := ecs.ExecutionEnvExternal
return ecs.NewECSPlatform(ctx, metadataURI, executionEnv, ignoreContainer)

case platform.Kubernetes:
useReadOnlyPort := true
insecureTLS := false
Expand Down
5 changes: 5 additions & 0 deletions platform/ecs/ecs.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@ import (
const (
executionEnvFargate = "AWS_ECS_FARGATE"
executionEnvEC2 = "AWS_ECS_EC2"

// ExecutionEnvExternal : (experimental) It is a definition that is handled internally, not an environment variable.
ExecutionEnvExternal = "ECS_EXTERNAL"
)

var (
Expand Down Expand Up @@ -123,6 +126,8 @@ func resolveProvider(executionEnv string) (provider, error) {
return fargateProvider, nil
case executionEnvEC2:
return ecsProvider, nil
case ExecutionEnvExternal:
return externalProvider, nil
default:
return provider("UNKNOWN"), fmt.Errorf("unknown execution env: %q", executionEnv)
}
Expand Down
1 change: 1 addition & 0 deletions platform/ecs/ecs_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ func TestResolveProvider(t *testing.T) {
}{
{"AWS_ECS_FARGATE", fargateProvider},
{"AWS_ECS_EC2", ecsProvider},
{"ECS_EXTERNAL", externalProvider},
{"unknown", provider("UNKNOWN")},
{"", provider("UNKNOWN")},
}
Expand Down
2 changes: 2 additions & 0 deletions platform/ecs/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,6 @@ type provider string
const (
ecsProvider provider = "ecs"
fargateProvider provider = "fargate"
// experimental
externalProvider provider = "external"
)
1 change: 1 addition & 0 deletions platform/ecs/spec_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ func TestGenerateSpec(t *testing.T) {
{"taskmetadata/testdata/metadata_ec2_host.json", ecsProvider},
{"taskmetadata/testdata/metadata_ec2_awsvpc.json", ecsProvider},
{"taskmetadata/testdata/metadata_fargate.json", fargateProvider},
{"taskmetadata/testdata/metadata_external.json", externalProvider},
}

var path string
Expand Down
49 changes: 49 additions & 0 deletions platform/ecs/taskmetadata/testdata/metadata_external.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
{
"Cluster": "test-clusrer",
"TaskARN": "arn:aws:ecs:ap-northeast-1:999999999999:task/task-id",
"Family": "test-external",
"Revision": "4",
"DesiredStatus": "RUNNING",
"KnownStatus": "RUNNING",
"Limits": {
"CPU": 0.25,
"Memory": 256
},
"PullStartedAt": "2022-03-14T06:44:39.928830311Z",
"PullStoppedAt": "2022-03-14T06:44:42.387434211Z",
"LaunchType": "EXTERNAL",
"Containers": [
{
"DockerId": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
"Name": "mackerel-container-agent",
"DockerName": "ecs-test-cluster-1-mackerel-container-agent-ffffffffffffffffffff",
"Image": "mackerel/mackerel-container-agent:latest",
"ImageID": "sha256:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
"Labels": {
"com.amazonaws.ecs.cluster": "test-cluster",
"com.amazonaws.ecs.container-name": "mackerel-container-agent",
"com.amazonaws.ecs.task-arn": "arn:aws:ecs:ap-northeast-1:999999999999:task/task-id",
"com.amazonaws.ecs.task-definition-family": "test-fargate",
"com.amazonaws.ecs.task-definition-version": "1"
},
"DesiredStatus": "RUNNING",
"KnownStatus": "RUNNING",
"Limits": {
"CPU": 0,
"Memory": 128
},
"CreatedAt": "2019-03-29T02:54:57.61447652Z",
"StartedAt": "2019-03-29T02:54:58.346799541Z",
"Type": "NORMAL",
"Networks": [
{
"NetworkMode": "awsvpc",
"IPv4Addresses": [
"172.17.0.2"
]
}
]
}
]
}

2 changes: 2 additions & 0 deletions platform/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,6 @@ const (
Kubernetes Type = "kubernetes"
EKSOnFargate Type = "eks_fargate"
None Type = "none"
// experimental
ECSExternal Type = "ecs_external"
)

0 comments on commit 55f81de

Please sign in to comment.