ElasticBeanstalk im VPC

ElasticBeanstalk als auch Opsworks können inzwischen in einem VPC betrieben werden. Allerdings muss dabei das VPC zwingend Public und Private-Subnets haben. Wenn man die ElasticBeanstalk EC2-Instanzen auf 2 Verfügbarkeitszonen aufteilen will, braucht man somit 4 Subnets.

Beispiel:

  • Subnet 1 in Availability Zone A (Public)
  • Subnet 2 in Availability Zone A (Private)
  • Subnet 3 in Availability Zone B (Public)
  • Subnet 4 in Availability Zone B (Private)

Dazu muss eine NAT-Instanz in Subnet 1 erstellt werden. Die NAT-Instanz ermöglicht den EC2-Instanzen im Private-Subnet eine Kommunikation mit dem Internet (bzw. mit dem ElasticBeanstalk-Dienst!). Die Security-Gruppe dieser NAT-Instanz muss Inbound-Traffic am besten vom ganzen VPC-IP-Kreis erlauben (oder zumindest von der Security-Gruppe, der die ElasticBeanstalk-EC2-Instanzen angehören). Wichtig ist auch die Outbound-Role der Security-Gruppe der Elastic-Beanstalk EC2-Instanzen, die muss Outbound Traffic zur NAT-Instanz erlauben. Instanz.

Zusammengefasst:

Wenn man ElasticBeanstalk im VPC betreibt, dann wird der LoadBalancer an die Public-Subnets konnektiert, die ElasticBeanstalk EC2-Instanzen kommen immer in die Private-Subnets. Die ElasticBeanstalk EC2-Instanzen im Private-Subnet kommunizieren dann zwingend über die NAT-Instanz mit dem Beanstalk Service!

Wichtig ist, dass die Security-Gruppen der NAT Instanz und der ElasticBeanstalk-Instanz vorher so eingestellt werden, dass die ElasticBeanstalk-EC2-Instanzen über die NAT Instanz kommunizieren können, da sonst das ElasticBeanstalk Enviremont nicht richtig startet …

ElasticBeanstalk IAM Rechte

Leider scheint die Permission Policy ElasticBeansTalkFullAccess in IAM nicht da zu tun, was man erwartet …. offenbar hat AWS an IAM etwas geändert, was sie in ihre Standard-Routinen für Beanstalk nicht eingebaut haben, die letzten drei Rechte müssen manuell hinzugefügt werden, damit wirklich volle Rechte gegeben sind:

{
  "Statement": [
   {
     "Effect": "Allow",
     "Action": [
       "elasticbeanstalk:*",
       "ec2:*",
       "elasticloadbalancing:*",
       "autoscaling:*",
       "cloudwatch:*",
       "s3:*",
       "sns:*",
       "cloudformation:*",
       "rds:*",
       "iam:ListInstanceProfiles",
       "iam:AddRoleToInstanceProfile",
       "iam:PassRole"
     ],
     "Resource": "*"
   }
  ]
}