fragen stichworte

Fügen Sie ElastiCache-Cluster zur Elastic Beanstalk-Anwendung hinzu

Ich habe eine Elastic Beanstalk-App eingerichtet, die die Docker-Plattform verwendet. Alles läuft reibungslos und ich kann die App mit dem Befehl eb deploy cli erneut bereitstellen. Die App ist auf einem benutzerdefinierten VPC eingerichtet (etwas, das ich kaum verstehe) und ist über das Web zugänglich.

Ich möchte meiner App einen Memcached ElastiCache-Cluster hinzufügen. Ich habe versucht, den Cluster manuell über die Konsole zu erstellen, aber ich kann mich anscheinend nie mit der App verbinden (egal, wie ich ihn eingerichtet habe) (ich habe versucht, die Verbindung mit der Elastic Beanstalk-Instanz herzustellen). Ich habe meiner App ein .ebextensions -Verzeichnis hinzugefügt und versucht, eine Direktive für EB hinzuzufügen, um den Cache-Cluster für mich zu erstellen. Ich habe versucht, die AWS-Beispielvorlage zu verwenden, aber das hat nicht funktioniert. Ich habe versucht, die Einstellungen zu ändern und habe sogar versucht, die Direktive auf die minimal erforderlichen Parameter zu vereinfachen, damit EB den Cluster erstellen kann. Nichts, was ich mache, scheint zu funktionieren. Unten ist meine aktuelle Datei:

Resources:
  MyElastiCache:
    Type: "AWS::ElastiCache::CacheCluster"
    Properties:
      CacheNodeType: "cache.t2.small"
      NumCacheNodes: "1"
      Engine: "memcached"
      VpcSecurityGroupIds: 
        - sg-XXXXXXXX
      CacheSubnetGroupName: "subnet-XXXXXXXX"

Für das VpcSecurityGroupIds habe ich sowohl EC2-Sicherheitsgruppen als auch VPC-Sicherheitsgruppen ausprobiert. Keiner scheint zu helfen. Die CacheSubnetGroupName ist die ID eines Subnetzes in meiner VPC.

Es ist sehr frustrierend, da es nur 5 Minuten dauert, um die minimale Änderung zu testen, da EB meine App jedes Mal neu einsetzen muss, wenn ich etwas Neues probiere. Jede Hilfe wäre sehr dankbar.

Bearbeiten: Hier ist mein letzter Versuch.

Resources:
  MyElastiCacheSubnetGroup:
    Type: "AWS::ElastiCache::SubnetGroup"
    Properties:
      Description: "Blah blah blah"
      SubnetIds:
        - subnet-XXXXXXXX
        - subnet-XXXXXXXX
        - subnet-XXXXXXXX
        - subnet-XXXXXXXX
  MyElastiCache:
    Type: "AWS::ElastiCache::CacheCluster"
    Properties:
      CacheNodeType: "cache.t2.small"
      NumCacheNodes: "1"
      Engine: "memcached"
      VpcSecurityGroupIds: 
        - sg-XXXXXXXX
      CacheSubnetGroupName:
        Ref: "MyElastiCacheSubnetGroup"

Und der Fehler dazu: Service:AmazonCloudFormation, Message:Stack named 'awseb-e-amyvnbtvps-stack' aborted operation. Current state: 'UPDATE_ROLLBACK_IN_PROGRESS' Reason: The following resource(s) failed to create: [MyElastiCacheSubnetGroup].

antworten

Die Eigenschaft VpcSecurityGroupIds ist eine Liste von einer oder mehreren VPC-Sicherheitsgruppen, die dem Cache-Cluster zugewiesen werden.

Stellen Sie sicher, dass eine dieser Sicherheitsgruppen Verbindungen an Port 11211 von der Sicherheitsgruppe der EC2-Instanz Ihrer EB-Anwendung oder von einer CIDR, die die EC2-Instanzen Ihrer EB-Anwendung enthält, zulässt. Ohne diese Regel schlagen Verbindungen fehl.

Das CacheSubnetGroupName ist kein VPC-Subnetz.

Sie müssen eine Cache-Subnetzgruppe erstellen, bevor Sie Ihren Cache-Cluster in einer VPC erstellen. Eine Cache-Subnetzgruppe ist eine Sammlung von VPC-Subnetzen. Weitere Informationen finden Sie im Folgenden:

http://docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide/SubnetGroups.html

Sie können die Ressource für die Cache-Subnetzgruppe in Ihrer .ebextensions -Datei erstellen:

Resources:
  MyElastiCacheSubnetGroup:
    Type: "AWS::ElastiCache::SubnetGroup"
    Properties:
      Description: "Something informational"
      SubnetIds:
        - subnet-XXXXXX
  MyElastiCache:
    Type: "AWS::ElastiCache::CacheCluster"
    Properties:
      CacheNodeType: "cache.t2.small"
      NumCacheNodes: "1"
      Engine: "memcached"
      VpcSecurityGroupIds: 
        - sg-XXXXXXXX
      CacheSubnetGroupName: 
        Ref: "MyElastiCacheSubnetGroup"

Kommen Sie dazu, um herauszufinden, dass der IAM-Account, der die Bereitstellung verwaltet, nicht über die erforderlichen Richtlinien zum Erstellen von Elasticache-Diensten verfügt. Sobald ich dem IAM-Benutzer die entsprechenden Berechtigungen erteilt habe. Es fing an zu arbeiten. Leider ist der Fehler in den Elastic Beanstalk Events nicht sehr gut definiert. Ich habe entdeckt, dass die Ereignisse auch in Cloudformation aufgelistet sind, und dort habe ich festgestellt, dass die Berechtigungen das Problem waren.