วิธีการใช้งานฟังก์ชัน Saved configuration ใน Elastic Beanstalk

เราสามารถใช้งานฟังก์ชัน Saved configuration ใน Elastic Beanstalk เพื่อสร้าง Environment ซึ่ง หรือปรับสภาพ Environment ที่กำลังใช้งานอยู่ได้อย่างง่ายดาย ซึ่งผมจะมาอธิบายในบทความนี้ครับ

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

POP จากบริษัท Classmethod (Thailand) ครับ

ครั้งนี้ผมจะมาแนะนำการใช้งานฟังก์ชัน Saved configuration ใน Elastic Beanstalk โดยจะเน้นไปที่ฟังก์ชัน Saved configuration ที่มีอยู่ตรงเมนูด้านซ้ายใน Elastic Beanstalk ครับ

บทนำ

เราสามารถใช้ฟังก์ชัน Saved configuration บันทึกข้อมูลการตั้งค่าของแต่ละสภาพแวดล้อมได้
โดยเฉพาะ Laravel ต้องมีการตั้งค่า Environment properties จำนวนมาก ดังนั้นฟังก์ชันนี้จึงเหมาะที่จะใช้สร้าง Environment ซ้ำ หรือปรับเปลี่ยนสภาพ Environment

การ Saved configuration

ผมได้ทำการ Saved configuration ไว้ก่อนหน้านี้แล้ว โดยใช้ชื่อ Configuration name:single

ดูตัวอย่างได้ที่ลิงก์บทความนี้ครับ

การ [Load] Saved configuration เพื่อปรับสภาพ Environment

ขั้นตอนนี้คือการใช้ Saved configuration เปลี่ยนสภาพ Environment อื่นที่กำลังใช้งานอยู่

วิธีเข้ามาที่ Saved configuration

เข้ามาที่ Service Elastic Beanstalk แล้วมาที่เมนูด้านซ้าย เลือกApplications

แล้วให้ค้นหาชื่อของเรา และคลิกเข้าไปได้เลย เช่นtinnakorn

แล้วดูที่เมนูด้านซ้าย จะเห็นว่าแสดงเป็นชื่อ Application ของเรา ในตัวอย่างนี้คือ▼ tinnakorn
ทีนี้ให้เลือกSaved configuration

การ Load Saved configuration ให้กับ Environment

ติ๊กตรง Configuration name ที่ต้องการนำไปใช้ เช่นsingleและคลิกLoad

เลือก Environment ที่ต้องการ และคลิกLoadแล้วรอระบบอัปเดตสักครู่

การสร้าง Environment จาก Saved configuration

เข้ามาที่ Saved configurations ของเรา
แล้วติ๊กConfiguration name ที่ต้องการใช้สร้าง Environment ซ้ำ และคลิกLaunch evironment

ในหัวข้อ Select environment tier นี้ให้เลือกWeb server environmentและคลิกSelect

แล้วตั้งค่าหัวข้อ Environment information และ Application code ตามต้องการ
จากนั้นถ้าไม่มีตั้งค่าในConfigure more optionsให้คลิกปุ่มCreate environmentได้เลยครับ

ข้อควรระวัง: หาก Key Pair หรือ Security Group ที่อยู่ในการตั้งค่า Saved configuration หายไป จะไม่สามารถ Create enviroment ได้ เพราะฉนั้นหากท่านผู้อ่านต้องการลบ Key Pair กับ Security Group กรุณาตรวจสอบว่าไม่ซ้ำกับการตั้งค่าที่มีอยู่ใน Saved configuration ด้วย

ตรวจสอบที่บันทึกไฟล์จริงของ Saved configuration ว่าอยู่ที่ไหน

เข้ามาที่ Service S3 แล้วเลือก Buckets จากเมนูด้านซ้าย
จากนั้นค้นหาและเลือก Buckets:elasticbeanstalk-[region]-[aws-account-id]

เข้าไปที่ Path:resources/templates/[application-name]
จะเห็นว่ามีไฟล์ของแต่ละสภาพแวดล้อมอยู่ในนี้ แต่ในตัวอย่างนี้มีแค่ไฟล์singleเพราะผมทำการ Saved configurations ไว้แค่ไฟล์เดียว

ดาวน์โหลดไฟล์ของ Saved configurations

ติ๊กไฟล์ที่ต้องการดาวน์โหลด และคลิกDownload
ไฟล์ที่ได้มาเป็นไฟล์ตั้งค่ารูปแบบ YAML

จากนั้นลองเปิดไฟล์ที่ดาวน์โหลดมา จะเห็นว่ามีข้อมูลการตั้งค่าถูกบันทึกลงในไฟล์นี้ทั้งหมด

File: single (คลิกดูตัวอย่างข้อมูลไฟล์ที่นี่)
EnvironmentConfigurationMetadata:
        DateCreated: '1660538421000'
        DateModified: '1660538421000'
      Platform:
        PlatformArn: arn:aws:elasticbeanstalk:[region]::platform/PHP 8.1 running on
          64bit Amazon Linux 2/3.4.0
      OptionSettings:
        aws:elasticbeanstalk:container:php:phpini:
          document_root: /public
        aws:ec2:instances:
          InstanceTypes: t3a.nano
        aws:elasticbeanstalk:application:environment:
          APP_ENV: local
          MAIL_ENCRYPTION: null
          DB_PORT: '3306'
          AWS_SECRET_ACCESS_KEY: ''
          PUSHER_APP_KEY: ''
          APP_NAME: Laravel
          VITE_PUSHER_HOST: ${PUSHER_HOST}
          APP_KEY: base64:sVxmnJFIjiK8yQmu+ZnPbXZiI7+VWl67178FoVMdy9k=
          REDIS_PORT: '6379'
          DB_USERNAME: admin
          PUSHER_HOST: ''
          MAIL_FROM_NAME: ${APP_NAME}
          DB_CONNECTION: mysql
          LOG_DEPRECATIONS_CHANNEL: null
          VITE_PUSHER_APP_KEY: ${PUSHER_APP_KEY}
          LOG_LEVEL: debug
          APP_URL: http://localhost
          FILESYSTEM_DISK: local
          PUSHER_APP_SECRET: ''
          PUSHER_APP_ID: ''
          PUSHER_SCHEME: https
          LOG_CHANNEL: stack
          MAIL_PASSWORD: null
          PUSHER_PORT: '443'
          PUSHER_APP_CLUSTER: mt1
          MAIL_HOST: mailhog
          AWS_DEFAULT_REGION: us-east-1
          SESSION_LIFETIME: '120'
          AWS_BUCKET: ''
          AWS_USE_PATH_STYLE_ENDPOINT: false
          VITE_PUSHER_PORT: ${PUSHER_PORT}
          SESSION_DRIVER: file
          QUEUE_CONNECTION: sync
          AWS_ACCESS_KEY_ID: ''
          REDIS_PASSWORD: null
          APP_DEBUG: false
          REDIS_HOST: 127.0.0.1
          VITE_PUSHER_APP_CLUSTER: ${PUSHER_APP_CLUSTER}
          MAIL_USERNAME: null
          DB_HOST: [host]
          MAIL_PORT: '1025'
          VITE_PUSHER_SCHEME: ${PUSHER_SCHEME}
          MEMCACHED_HOST: 127.0.0.1
          MAIL_FROM_ADDRESS: hello@example.com
          MAIL_MAILER: smtp
          BROADCAST_DRIVER: log
          CACHE_DRIVER: file
          DB_DATABASE: laravel
          DB_PASSWORD: ********
        aws:elasticbeanstalk:environment:
          ServiceRole: arn:aws:iam::[aws-account-id]:role/aws-elasticbeanstalk-service-role
          EnvironmentType: SingleInstance
        aws:elasticbeanstalk:healthreporting:system:
          ConfigDocument:
            Version: 1
            CloudWatchMetrics:
              Instance:
                RootFilesystemUtil: null
                CPUIrq: null
                LoadAverage5min: null
                ApplicationRequests5xx: null
                ApplicationRequests4xx: null
                CPUUser: null
                LoadAverage1min: null
                ApplicationLatencyP50: null
                CPUIdle: null
                InstanceHealth: null
                ApplicationLatencyP95: null
                ApplicationLatencyP85: null
                ApplicationLatencyP90: null
                CPUSystem: null
                ApplicationLatencyP75: null
                CPUSoftirq: null
                ApplicationLatencyP10: null
                ApplicationLatencyP99: null
                ApplicationRequestsTotal: null
                ApplicationLatencyP99.9: null
                ApplicationRequests3xx: null
                ApplicationRequests2xx: null
                CPUIowait: null
                CPUNice: null
              Environment:
                InstancesSevere: null
                InstancesDegraded: null
                ApplicationRequests5xx: null
                ApplicationRequests4xx: null
                ApplicationLatencyP50: null
                ApplicationLatencyP95: null
                ApplicationLatencyP85: null
                InstancesUnknown: null
                ApplicationLatencyP90: null
                InstancesInfo: null
                InstancesPending: null
                ApplicationLatencyP75: null
                ApplicationLatencyP10: null
                ApplicationLatencyP99: null
                ApplicationRequestsTotal: null
                InstancesNoData: null
                ApplicationLatencyP99.9: null
                ApplicationRequests3xx: null
                ApplicationRequests2xx: null
                InstancesOk: null
                InstancesWarning: null
            Rules:
              Environment:
                ELB:
                  ELBRequests4xx:
                    Enabled: true
                Application:
                  ApplicationRequests4xx:
                    Enabled: true
        aws:autoscaling:launchconfiguration:
          SecurityGroups:
          - [security-group]
          RootVolumeSize: '8'
          DisableIMDSv1: true
          IamInstanceProfile: aws-elasticbeanstalk-ec2-role
        AWSEBAutoScalingLaunchConfiguration.aws:autoscaling:launchconfiguration:
          EC2KeyName: [key-pair]
          RootVolumeType: gp2
      EnvironmentTier:
        Type: Standard
        Name: WebServer
      AWSConfigurationTemplateVersion: 1.1.0.0

สรุป

ผมได้ลองใช้งานฟังก์ชัน Saved configuration แล้วรู้สึกว่ามีความสะดวกในการสร้าง Environment มาก เพราะมันจะบันทึกการตั้งค่าไว้ให้ทุกอย่างตามที่เราได้ตั้งค่าไว้ก่อนหน้านี้
ยิ่งไปกว่านั้นเรายังสามารถปรับเปลี่ยนสภาพ Environment ที่กำลังใช้งานอยู่ได้อีกด้วย

ผมหวังว่าบทความนี้จะเป็นประโยชน์ให้กับผู้อ่านได้นะครับ

POP จากบริษัท Classmethod (Thailand) ครับ !

Link อ้างอิง