|
12 | 12 | },
|
13 | 13 | "InstanceType" : {
|
14 | 14 | "Type" : "String",
|
15 |
| - "Description" : "EC2 HVM instance type (t2.micro, m3.medium, etc).", |
| 15 | + "Description" : "EC2 HVM instance type (t2.medium, m3.medium, etc).", |
16 | 16 | "AllowedValues" : [
|
17 | 17 | "t2.micro","t2.small","t2.medium","t2.large","m4.large","m4.xlarge","m4.2xlarge","m4.4xlarge","m4.10xlarge","m3.medium",
|
18 | 18 | "m3.large","m3.xlarge","m3.2xlarge","c4.large","c4.xlarge","c4.2xlarge","c4.4xlarge","c4.8xlarge","c3.large","c3.xlarge",
|
|
23 | 23 | },
|
24 | 24 | "ManagerInstanceType" : {
|
25 | 25 | "Type" : "String",
|
26 |
| - "Description" : "EC2 HVM instance type (t2.medium, m3.medium, etc).", |
| 26 | + "Description" : "EC2 HVM instance type (m3.medium, m4.large etc).", |
27 | 27 | "AllowedValues" : [
|
28 |
| - "t2.medium","t2.large","m4.large","m4.xlarge","m4.2xlarge","m4.4xlarge","m4.10xlarge","m3.medium", |
| 28 | + "m4.large","m4.xlarge","m4.2xlarge","m4.4xlarge","m4.10xlarge","m3.medium", |
29 | 29 | "m3.large","m3.xlarge","m3.2xlarge","c4.large","c4.xlarge","c4.2xlarge","c4.4xlarge","c4.8xlarge","c3.large","c3.xlarge",
|
30 | 30 | "c3.2xlarge","c3.4xlarge","c3.8xlarge","r3.large","r3.xlarge","r3.2xlarge","r3.4xlarge","r3.8xlarge","i2.xlarge",
|
31 | 31 | "i2.2xlarge","i2.4xlarge","i2.8xlarge" ],
|
|
59 | 59 | "MinLength": "8",
|
60 | 60 | "MaxLength": "40",
|
61 | 61 | "ConstraintDescription": "must be at least 8 characters"
|
| 62 | + }, |
| 63 | + "License": { |
| 64 | + "Type": "String", |
| 65 | + "Description": "Docker Datacenter License in JSON format or URL to download it. Get Trial License here https://store.docker.com/bundles/docker-datacenter " |
62 | 66 | }
|
63 | 67 | },
|
64 | 68 | "Metadata" : {
|
|
73 | 77 | "Parameters" : [ "ManagerInstanceType", "InstanceType", "KeyName" ]
|
74 | 78 | },
|
75 | 79 | {
|
76 |
| - "Label" : { "default":"Optional Features" }, |
77 |
| - "Parameters" : [ "DDCUsernameSet", "DDCPasswordSet"] |
| 80 | + "Label" : { "default":"DDC Properties" }, |
| 81 | + "Parameters" : [ "DDCUsernameSet", "DDCPasswordSet","License"] |
78 | 82 | }
|
79 | 83 | ],
|
80 | 84 | "ParameterLabels" : {
|
|
84 | 88 | "ManagerInstanceType" : { "default" : "Swarm manager instance type?" },
|
85 | 89 | "KeyName" : { "default" : "Which SSH key to use?" },
|
86 | 90 | "DDCUsernameSet" : { "default" : "Enter the Username you want to use with Docker Datacenter" },
|
87 |
| - "DDCPasswordSet" : { "default" : "Enter your Docker Datacenter password" } |
| 91 | + "DDCPasswordSet" : { "default" : "Enter your Docker Datacenter password" }, |
| 92 | + "License" : { "default" : "Enter your Docker Datacenter License" } |
88 | 93 | }
|
89 | 94 | }
|
90 | 95 | },
|
|
496 | 501 | }
|
497 | 502 | },
|
498 | 503 | "ManagerAsg" : {
|
499 |
| - "DependsOn" : ["SwarmDynDBTable", "PubSubnetAz1", "PubSubnetAz2", "SSHLoadBalancer", "ExternalLoadBalancer"], |
| 504 | + "DependsOn" : ["SwarmDynDBTable", "PubSubnetAz1", "PubSubnetAz2", "UCPLoadBalancer","DTRLoadBalancer" ,"ExternalLoadBalancer"], |
500 | 505 | "Type" : "AWS::AutoScaling::AutoScalingGroup",
|
501 | 506 | "Properties" : {
|
502 | 507 | "VPCZoneIdentifier" : [ { "Fn::Join" : [",", [ { "Ref" : "PubSubnetAz1" }, { "Ref" : "PubSubnetAz2" } ] ] } ],
|
503 |
| - "LaunchConfigurationName" : { "Ref" : "ManagerLaunchConfigBeta3" }, |
504 |
| - "LoadBalancerNames" : [ { "Ref" : "SSHLoadBalancer" }, { "Ref" : "ExternalLoadBalancer" } ], |
| 508 | + "LaunchConfigurationName" : { "Ref" : "ManagerLaunchConfig" }, |
| 509 | + "LoadBalancerNames" : [ { "Ref" : "DTRLoadBalancer" }, { "Ref" : "ExternalLoadBalancer" },{ "Ref" : "UCPLoadBalancer" } ], |
505 | 510 | "MinSize" : "0",
|
506 | 511 | "MaxSize" : "5",
|
507 | 512 | "DesiredCapacity" : { "Ref" : "ManagerSize" },
|
|
540 | 545 | }
|
541 | 546 | },
|
542 | 547 |
|
543 |
| - "ManagerLaunchConfigBeta3": { |
| 548 | + "ManagerLaunchConfig": { |
544 | 549 | "DependsOn": "ExternalLoadBalancer",
|
545 | 550 | "Type": "AWS::AutoScaling::LaunchConfiguration",
|
546 | 551 | "Properties": {
|
|
624 | 629 | "-v /var/lib/docker/swarm:/var/lib/docker/swarm ",
|
625 | 630 | "docker4x/l4controller-aws:$DOCKER_FOR_IAAS_VERSION run --log=4 --all=true\n",
|
626 | 631 |
|
627 |
| - "docker run --log-driver=json-file --name=ddc-init-aws --restart=no --rm ", |
| 632 | + "docker run --log-driver=json-file --name=ddc-init-aws --restart=no --rm", |
628 | 633 | "-e NODE_TYPE='manager' ",
|
629 | 634 | "-e STACK_NAME='",{ "Ref" : "AWS::StackName" }, "' ",
|
630 | 635 | "-e REGION='",{ "Ref" : "AWS::Region" }, "' ",
|
631 | 636 | "-e UCP_ADMIN_USER='",{ "Ref" : "DDCUsernameSet" }, "' ",
|
632 | 637 | "-e UCP_ADMIN_PASSWORD='",{ "Ref" : "DDCPasswordSet" }, "' ",
|
633 |
| - "-e ELB_NAME='SSHLoadBalancer' ", |
| 638 | + "-e NODE_NAME=$HOSTNAME ", |
| 639 | + "-e S3_BUCKET_NAME='",{ "Ref": "DDCBucket" }, "' ", |
| 640 | + "-e LICENSE='",{ "Ref": "License" }, "' ", |
| 641 | + "-e UCP_ELB_HOSTNAME='",{"Fn::GetAtt": ["UCPLoadBalancer","DNSName"]}, "' ", |
| 642 | + "-e DTR_ELB_HOSTNAME='",{"Fn::GetAtt": ["DTRLoadBalancer","DNSName"]}, "' ", |
634 | 643 | "-e INSTALL_DDC='yes' ",
|
635 | 644 | "-v /var/run/docker.sock:/var/run/docker.sock ",
|
636 | 645 | "-v /usr/bin/docker:/usr/bin/docker ",
|
| 646 | + "-v /tmp/docker:/tmp/docker ", |
637 | 647 | "docker4x/ddc-init-aws:$DOCKER_FOR_IAAS_VERSION\n"
|
638 | 648 |
|
639 | 649 | ]
|
|
647 | 657 | "Type" : "AWS::AutoScaling::AutoScalingGroup",
|
648 | 658 | "Properties" : {
|
649 | 659 | "VPCZoneIdentifier" : [ { "Fn::Join" : [",", [ { "Ref" : "PubSubnetAz1" }, { "Ref" : "PubSubnetAz2" } ] ] } ],
|
650 |
| - "LaunchConfigurationName" : { "Ref" : "NodeLaunchConfigBeta3" }, |
| 660 | + "LaunchConfigurationName" : { "Ref" : "NodeLaunchConfig" }, |
651 | 661 | "LoadBalancerNames" : [ { "Ref" : "ExternalLoadBalancer" } ],
|
652 | 662 | "MinSize" : "0",
|
653 | 663 | "MaxSize" : "1000",
|
|
686 | 696 | }
|
687 | 697 | }
|
688 | 698 | },
|
689 |
| - "NodeLaunchConfigBeta3": { |
| 699 | + "NodeLaunchConfig": { |
690 | 700 | "DependsOn": "ManagerAsg",
|
691 | 701 | "Type": "AWS::AutoScaling::LaunchConfiguration",
|
692 | 702 | "Properties": {
|
|
753 | 763 | "-e REGION='",{ "Ref" : "AWS::Region" }, "' ",
|
754 | 764 | "-e UCP_ADMIN_USER='",{ "Ref" : "DDCUsernameSet" }, "' ",
|
755 | 765 | "-e UCP_ADMIN_PASSWORD='",{ "Ref" : "DDCPasswordSet" }, "' ",
|
756 |
| - "-e ELB_NAME='SSHLoadBalancer' ", |
757 | 766 | "-e INSTALL_DDC='yes' ",
|
758 | 767 | "-v /var/run/docker.sock:/var/run/docker.sock ",
|
759 | 768 | "-v /usr/bin/docker:/usr/bin/docker ",
|
760 | 769 | "docker4x/ddc-init-aws:$DOCKER_FOR_IAAS_VERSION\n"
|
| 770 | + |
761 | 771 | ]
|
762 | 772 | ]
|
763 | 773 | }
|
|
813 | 823 | ]
|
814 | 824 | }
|
815 | 825 | },
|
816 |
| - "SSHLoadBalancerSG": { |
| 826 | + "UCPLoadBalancerSG": { |
| 827 | + "DependsOn": "Vpc", |
| 828 | + "Type": "AWS::EC2::SecurityGroup", |
| 829 | + "Properties": { |
| 830 | + "VpcId": { |
| 831 | + "Ref": "Vpc" |
| 832 | + }, |
| 833 | + "GroupDescription": "UCP Load Balancer SecurityGroup", |
| 834 | + "SecurityGroupIngress": [ |
| 835 | + {"IpProtocol": "tcp","FromPort": "443","ToPort": "443","CidrIp": "0.0.0.0/0"} |
| 836 | + ] |
| 837 | + } |
| 838 | + }, |
| 839 | + "UCPLoadBalancer" : { |
| 840 | + "DependsOn" : ["AttachGateway", "PubSubnetAz1", "PubSubnetAz2"], |
| 841 | + "Type" : "AWS::ElasticLoadBalancing::LoadBalancer", |
| 842 | + "Properties" : { |
| 843 | + "ConnectionSettings" : { |
| 844 | + "IdleTimeout" : "1800" |
| 845 | + }, |
| 846 | + "Subnets" : [ |
| 847 | + {"Ref" : "PubSubnetAz1" }, |
| 848 | + {"Ref" : "PubSubnetAz2" } |
| 849 | + ], |
| 850 | + "LoadBalancerName" : { "Fn::Join": [ "-", [ { "Ref": "AWS::StackName"}, "ELB-UCP" ] ] }, |
| 851 | + "CrossZone" : "true", |
| 852 | + "HealthCheck" : { |
| 853 | + "HealthyThreshold" : "2", |
| 854 | + "Interval" : "10", |
| 855 | + "Target" : "TCP:443", |
| 856 | + "Timeout" : "2", |
| 857 | + "UnhealthyThreshold" : "4" |
| 858 | + }, |
| 859 | + "Listeners" : [ |
| 860 | + { |
| 861 | + "LoadBalancerPort" : "443", |
| 862 | + "InstancePort" : "443", |
| 863 | + "Protocol" : "TCP" |
| 864 | + } |
| 865 | + ], |
| 866 | + "SecurityGroups" : [ { "Ref" : "UCPLoadBalancerSG" } ], |
| 867 | + "Tags": [ |
| 868 | + { |
| 869 | + "Key" : "Name", |
| 870 | + "Value" : { "Fn::Join": [ "-", [ { "Ref": "AWS::StackName"}, "ELB-UCP" ] ] } |
| 871 | + } |
| 872 | + ] |
| 873 | + } |
| 874 | + }, |
| 875 | + "DTRLoadBalancerSG": { |
817 | 876 | "DependsOn": "Vpc",
|
818 | 877 | "Type": "AWS::EC2::SecurityGroup",
|
819 | 878 | "Properties": {
|
820 | 879 | "VpcId": {
|
821 | 880 | "Ref": "Vpc"
|
822 | 881 | },
|
823 |
| - "GroupDescription": "SSH Load Balancer SecurityGroup", |
| 882 | + "GroupDescription": "DTR Load Balancer SecurityGroup", |
824 | 883 | "SecurityGroupIngress": [
|
825 |
| - {"IpProtocol": "-1","FromPort": "22","ToPort": "22","CidrIp": "0.0.0.0/0"} |
| 884 | + {"IpProtocol": "tcp","FromPort": "443","ToPort": "443","CidrIp": "0.0.0.0/0"} |
826 | 885 | ]
|
827 | 886 | }
|
828 | 887 | },
|
829 |
| - "SSHLoadBalancer" : { |
| 888 | + "DTRLoadBalancer" : { |
830 | 889 | "DependsOn" : ["AttachGateway", "PubSubnetAz1", "PubSubnetAz2"],
|
831 | 890 | "Type" : "AWS::ElasticLoadBalancing::LoadBalancer",
|
832 | 891 | "Properties" : {
|
|
837 | 896 | {"Ref" : "PubSubnetAz1" },
|
838 | 897 | {"Ref" : "PubSubnetAz2" }
|
839 | 898 | ],
|
840 |
| - "LoadBalancerName" : { "Fn::Join": [ "-", [ { "Ref": "AWS::StackName"}, "ELB-SSH" ] ] }, |
| 899 | + "LoadBalancerName" : { "Fn::Join": [ "-", [ { "Ref": "AWS::StackName"}, "ELB-DTR" ] ] }, |
841 | 900 | "CrossZone" : "true",
|
842 | 901 | "HealthCheck" : {
|
843 | 902 | "HealthyThreshold" : "2",
|
844 | 903 | "Interval" : "10",
|
845 |
| - "Target" : "TCP:22", |
| 904 | + "Target": "HTTPS:8443/health", |
846 | 905 | "Timeout" : "2",
|
847 | 906 | "UnhealthyThreshold" : "4"
|
848 | 907 | },
|
849 | 908 | "Listeners" : [
|
850 | 909 | {
|
851 |
| - "LoadBalancerPort" : "22", |
852 |
| - "InstancePort" : "22", |
| 910 | + "LoadBalancerPort" : "443", |
| 911 | + "InstancePort" : "8443", |
853 | 912 | "Protocol" : "TCP"
|
854 | 913 | }
|
855 | 914 | ],
|
856 |
| - "SecurityGroups" : [ { "Ref" : "SSHLoadBalancerSG" } ], |
| 915 | + "SecurityGroups" : [ { "Ref" : "DTRLoadBalancerSG" } ], |
857 | 916 | "Tags": [
|
858 | 917 | {
|
859 | 918 | "Key" : "Name",
|
860 |
| - "Value" : { "Fn::Join": [ "-", [ { "Ref": "AWS::StackName"}, "ELB-SSH" ] ] } |
| 919 | + "Value" : { "Fn::Join": [ "-", [ { "Ref": "AWS::StackName"}, "ELB-DTR" ] ] } |
861 | 920 | }
|
862 | 921 | ]
|
863 | 922 | }
|
864 | 923 | },
|
| 924 | + "DDCBucket": { |
| 925 | + "Type": "AWS::S3::Bucket", |
| 926 | + "DeletionPolicy": "Retain" |
| 927 | + }, |
865 | 928 | "ProxyRole": {
|
866 | 929 | "Type": "AWS::IAM::Role",
|
867 | 930 | "Properties": {
|
|
892 | 955 | "cloudformation:DescribeStackResources"
|
893 | 956 | ],
|
894 | 957 | "Resource": "*"
|
895 |
| - }] |
| 958 | + } |
| 959 | + ] |
896 | 960 | },
|
897 | 961 | "Roles": [ {
|
898 | 962 | "Ref": "ProxyRole"
|
899 | 963 | } ]
|
900 | 964 | }
|
901 | 965 | },
|
| 966 | + "S3Policies": { |
| 967 | + "DependsOn": "ProxyRole", |
| 968 | + "Type": "AWS::IAM::Policy", |
| 969 | + "Properties": { |
| 970 | + "PolicyName": "S3-DDC-Policy", |
| 971 | + "PolicyDocument": { |
| 972 | + "Version" : "2012-10-17", |
| 973 | + "Statement": [{ |
| 974 | + "Effect": "Allow", |
| 975 | + "Action": [ |
| 976 | + "s3:ListBucket", |
| 977 | + "s3:GetBucketLocation", |
| 978 | + "s3:ListBucketMultipartUploads" |
| 979 | + ], |
| 980 | + "Resource": { "Fn::Join": ["", ["arn:aws:s3:::", { "Ref": "DDCBucket" }] ] } |
| 981 | + }, |
| 982 | + { |
| 983 | + "Effect": "Allow", |
| 984 | + "Action": [ |
| 985 | + "s3:PutObject", |
| 986 | + "s3:GetObject", |
| 987 | + "s3:DeleteObject", |
| 988 | + "s3:ListMultipartUploadParts", |
| 989 | + "s3:AbortMultipartUpload" |
| 990 | + ], |
| 991 | + "Resource": { "Fn::Join": ["", ["arn:aws:s3:::", { "Ref": "DDCBucket" }, "/*"] ] } |
| 992 | + } ] |
| 993 | + }, |
| 994 | + "Roles": [ { |
| 995 | + "Ref": "ProxyRole" |
| 996 | + } ] |
| 997 | + } |
| 998 | + }, |
902 | 999 | "DynDBPolicies": {
|
903 | 1000 | "DependsOn": ["SwarmDynDBTable", "ProxyRole"],
|
904 | 1001 | "Type": "AWS::IAM::Policy",
|
|
1029 | 1126 | }
|
1030 | 1127 | },
|
1031 | 1128 | "Outputs": {
|
1032 |
| - "DefaultDNSTarget" : { |
1033 |
| - "Description" : "Use this name to update your DNS records", |
| 1129 | + "UCPLoginURL" : { |
| 1130 | + "Description" : "Docker Datacenter Login URL", |
1034 | 1131 | "Value" : {
|
1035 |
| - "Fn::GetAtt" : [ "ExternalLoadBalancer", "DNSName" ] |
| 1132 | + "Fn::Join": [ "", ["https://", {"Fn::GetAtt" : [ "UCPLoadBalancer", "DNSName"] } ] ] |
1036 | 1133 | }
|
1037 | 1134 | },
|
1038 |
| - "SSH" : { |
1039 |
| - "Description" : "Use this command to login to your Docker console.", |
| 1135 | + "DTRLoginURL" : { |
| 1136 | + "Description" : "Docker Datacenter Login URL", |
1040 | 1137 | "Value" : {
|
1041 |
| - "Fn::Join": [ "", ["ssh docker@", {"Fn::GetAtt" : [ "SSHLoadBalancer", "DNSName"] } ] ] |
| 1138 | + "Fn::Join": [ "", ["https://", {"Fn::GetAtt" : [ "DTRLoadBalancer", "DNSName"] } ] ] |
1042 | 1139 | }
|
1043 | 1140 | },
|
1044 |
| - "DDCLoginURL" : { |
1045 |
| - "Description" : "Docker Datacenter Login URL", |
| 1141 | + "DefaultDNSTarget" : { |
| 1142 | + "Description" : "Default DNS name for applications deployed on the cluster", |
1046 | 1143 | "Value" : {
|
1047 |
| - "Fn::Join": [ "", ["https://", {"Fn::GetAtt" : [ "SSHLoadBalancer", "DNSName"] } ] ] |
| 1144 | + "Fn::GetAtt" : [ "ExternalLoadBalancer", "DNSName" ] |
1048 | 1145 | }
|
1049 | 1146 | },
|
1050 | 1147 | "DDCUsername" : {
|
|
0 commit comments