in cdk/lib/EcsAnywhereStack.ts [8:83]
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// Create VPC
const vpc = new ec2.Vpc(this, 'EcsAnywhereVPC', {
cidr: '192.168.0.0/16',
subnetConfiguration: [
{
subnetType: ec2.SubnetType.PRIVATE,
name: 'EcsAnywherePrivate',
cidrMask: 24,
},
{
subnetType: ec2.SubnetType.PUBLIC,
name: 'EcsAnywherePublic',
cidrMask: 24,
},
]
});
// Create ECS cluster
const ecsAnywhereCluster = new ecs.Cluster(this, 'EcsAnywhereCluster', {
vpc,
clusterName: "EcsAnywhereCluster",
});
// Create ExternalTaskDefinition
const taskDefinition = new ecs.ExternalTaskDefinition(this, 'ExternalTaskDefinition');
taskDefinition.addContainer('NginxContainer', {
image : ecs.ContainerImage.fromRegistry(
"public.ecr.aws/nginx/nginx:latest"
),
cpu: 100,
memoryLimitMiB: 256,
containerName : "EcsAnywhereContainer"
})
// Create ExternalService
const ecsService = new ecs.ExternalService(this, 'ExternalService', {
serviceName: "EcsAnywhereService",
cluster: ecsAnywhereCluster,
taskDefinition,
desiredCount: 1,
})
// Create IAM Role
const instance_iam_role = new iam.Role( this, 'EcsAnywhereInstanceRole', {
roleName: "EcsAnywhereInstanceRole",
assumedBy : new iam.ServicePrincipal("ssm.amazonaws.com"),
managedPolicies: [
iam.ManagedPolicy.fromAwsManagedPolicyName("AmazonSSMManagedInstanceCore"),
iam.ManagedPolicy.fromManagedPolicyArn(this, "EcsAnywhereEC2Policy", "arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role"),
]
})
// Output
new CfnOutput(this, "RegisterExternalInstance", {
description: "Create an Systems Manager activation pair",
value: `aws ssm create-activation --iam-role ${instance_iam_role.roleName}`,
exportName: "1-RegisterExternalInstance",
})
new CfnOutput(this, "DownloadInstallationScript", {
description: "On your VM, download installation script",
value: 'curl -o "ecs-anywhere-install.sh" "https://amazon-ecs-agent-packages-preview.s3.us-east-1.amazonaws.com/ecs-anywhere-install.sh" && sudo chmod +x ecs-anywhere-install.sh',
exportName: "2-DownloadInstallationScript",
});
new CfnOutput(this, "ExecuteScript", {
description: "Run installation script on VM",
value: "sudo ./ecs-anywhere-install.sh --region $REGION --cluster $CLUSTER_NAME --activation-id $ACTIVATION_ID --activation-code $ACTIVATION_CODE",
exportName: "3-ExecuteInstallationScript",
});
}