ฉันมีการตั้งค่าแอป Elastic Beanstalk โดยใช้แพลตฟอร์มนักเทียบท่า ทุกอย่างทำงานได้อย่างราบรื่นและฉันสามารถทำให้แอปใช้งานได้อีกครั้งโดยใช้eb deployคำสั่ง cli แอปนี้ได้รับการตั้งค่าบน VPC ที่กำหนดเอง (ซึ่งฉันแทบจะไม่เข้าใจ) และเข้าถึงได้ทางเว็บ

ฉันต้องการเพิ่มคลัสเตอร์ Memcached ElastiCache ในแอปของฉัน ฉันพยายามสร้างคลัสเตอร์ด้วยตนเองผ่านคอนโซล แต่ดูเหมือนว่าจะไม่สามารถเชื่อมต่อกับมันได้ (ไม่ว่าจะตั้งค่าอย่างไร) จากแอปของฉัน (ฉันได้ลอง telnetting จากอินสแตนซ์ Elastic Beanstalk แล้ว) ฉันได้เพิ่ม.ebextensionsไดเร็กทอรีไปยังแอพของฉันและได้ลองเพิ่มคำสั่งสำหรับ EB เพื่อสร้างคลัสเตอร์แคชสำหรับฉัน ฉันได้ลองใช้เทมเพลตตัวอย่าง AWS แล้ว แต่ไม่ได้ผล ฉันได้ลองเปลี่ยนการตั้งค่าและได้พยายามลดความซับซ้อนของคำสั่งให้เหลือพารามิเตอร์ที่จำเป็นขั้นต่ำสุดเพื่อให้ EB สร้างคลัสเตอร์ ไม่มีอะไรที่ฉันทำดูเหมือนว่าจะทำงาน ด้านล่างนี้เป็นไฟล์ปัจจุบันของฉัน:

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

สำหรับVpcSecurityGroupIdsผมได้พยายามรักษาความปลอดภัยทั้งสองกลุ่ม EC2 และกลุ่มรักษาความปลอดภัย VPC ดูเหมือนจะไม่ช่วย CacheSubnetGroupNameคือรหัสของเครือข่ายย่อยภายใน VPC ของฉัน

มันน่าหงุดหงิดมากเพราะใช้เวลา 5 นาทีในการทดสอบการเปลี่ยนแปลงที่น้อยที่สุด เนื่องจาก EB ต้องทำให้แอปของฉันใช้งานได้ใหม่ทุกครั้งที่ฉันลองอะไรใหม่ๆ ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมอย่างมาก.

แก้ไข: นี่คือความพยายามครั้งล่าสุดของฉัน

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"

และข้อผิดพลาดที่จะไปกับมัน: 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].

answer

VpcSecurityGroupIdsคุณสมบัติคือรายการหนึ่งหรือมากกว่ากลุ่มรักษาความปลอดภัย VPCที่จะได้รับมอบหมายให้คลัสเตอร์แคช

ตรวจสอบให้แน่ใจว่ากลุ่มความปลอดภัยกลุ่มใดกลุ่มหนึ่งอนุญาตการเชื่อมต่อบนพอร์ต 11211 จากกลุ่มความปลอดภัยของอินสแตนซ์ EC2 ของแอปพลิเคชัน EB ของคุณ หรือ CIDR ที่มีอินสแตนซ์ EC2 ของแอปพลิเคชัน EB ของคุณ หากไม่มีกฎนี้ การเชื่อมต่อใดๆ จะล้มเหลว

CacheSubnetGroupNameไม่ได้เป็นเครือข่ายย่อย VPC

คุณต้องสร้าง Cache Subnet Group ก่อนที่คุณจะสร้าง Cache Cluster ใน VPC กลุ่มเครือข่ายย่อยของแคชคือชุดของเครือข่ายย่อย VPC ดูข้อมูลเพิ่มเติมต่อไปนี้:

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

คุณสามารถสร้างทรัพยากร Cache Subnet Group ใน.ebextensionsไฟล์ของคุณ:

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"

มาพบว่า ข้อผิดพลาดคือบัญชี IAM ที่จัดการการปรับใช้ไม่มีนโยบายที่จำเป็นในการสร้างบริการ Elasticache เมื่อฉันให้สิทธิ์ที่เหมาะสมแก่ผู้ใช้ IAM มันเริ่มทำงาน ขออภัย ข้อผิดพลาดไม่ได้กำหนดไว้อย่างดีในเหตุการณ์ Elastic Beanstalk ฉันค้นพบว่าเหตุการณ์ต่างๆ นั้นแสดงอยู่ใน Cloudformation ด้วย และนั่นคือจุดที่ฉันค้นพบว่าการอนุญาตนั้นเป็นปัญหา