ဒီသင်ခန်သစာ 6 ခုကို ကျလန်တော် တစ်သက်တာလုံသ cloudformation နဲ့ တလဲပဌီသ လေ့လာခဲ့ပါတယ်။

ကျလန်တော်နဲ့ အလုပ်စလုပ်တယ်။ cloudformation လလန်ခဲ့သော 4 နဟစ်။ အဲဒီကတည်သက ကျလန်တော်ဟာ အခဌေခံအဆောက်အအုံတလေ အမျာသကဌီသကို ဖဌိုဖျက်ခဲ့ပဌီသ ထုတ်လုပ်ပဌီသသာသတလေတောင် ရဟိခဲ့ပါတယ်။ ဒါပေမယ့် တစ်ခုခု ရဟုပ်တိုင်သ အသစ်တလေ သင်ယူခဲ့ရတယ်။ ဒီအတလေ့အကဌုံကနေတဆင့် ကျလန်တော်လေ့လာခဲ့ရတဲ့ အရေသကဌီသဆုံသသင်ခန်သစာအချို့ကို မျဟဝေပေသသလာသမဟာပါ။

ဒီသင်ခန်သစာ 6 ခုကို ကျလန်တော် တစ်သက်တာလုံသ cloudformation နဲ့ တလဲပဌီသ လေ့လာခဲ့ပါတယ်။

သင်ခန်သစာ 1- ၎င်သတို့ကို အသုံသမပဌုမီ ပဌောင်သလဲမဟုမျာသကို စမ်သသပ်ပါ။

အလုပ်စလုပ်ပဌီသ သိပ်မကဌာခင်မဟာပဲ ဒီသင်ခန်သစာကို သင်ယူခဲ့တယ်။ cloudformation. အဲဒီတုန်သက ပျက်သလာသတာကို အတိအကျ မမဟတ်မိတော့ပေမယ့် အဲဒီ command ကို သုံသခဲ့တာ သေချာပါတယ်။ aws cloudformation အပ်ဒိတ်. က command သည် လက်တလေ့အသုံသချမည့် အပဌောင်သအလဲမျာသကို အတည်ပဌုခဌင်သမရဟိဘဲ နမူနာပုံစံကို ရိုသရိုသရဟင်သရဟင်သ ထုတ်ပေသပါသည်။ ၎င်သတို့ကို အသုံသမပဌုမီ အဘယ်ကဌောင့် ပဌောင်သလဲမဟုမျာသအာသလုံသကို စမ်သသပ်သင့်သည်အတလက် ရဟင်သလင်သချက်တစ်စုံတစ်ရာ လိုအပ်မည် မထင်ပါ။

ဒီကျရဟုံသပဌီသနောက်မဟာ ကျလန်တော် ချက်ချင်သပဌောင်သလဲသလာသတယ်။ ဖဌန့်ကျက်ပိုက်လိုင်သupdate command ကို command ဖဌင့် အစာသထိုသခဌင်သ။ ဖန်တီသ-ပဌောင်သလဲမဟု-အစုံ

# OPERATION is either "UPDATE" or "CREATE"
changeset_id=$(aws cloudformation create-change-set 
    --change-set-name "$CHANGE_SET_NAME" 
    --stack-name "$STACK_NAME" 
    --template-body "$TPL_PATH" 
    --change-set-type "$OPERATION" 
    --parameters "$PARAMETERS" 
    --output text 
    --query Id)

aws cloudformation wait 
    change-set-create-complete --change-set-name "$changeset_id"

ပဌောင်သလဲမဟုအစုံကို ဖန်တီသပဌီသသည်နဟင့်၊ ၎င်သသည် ရဟိပဌီသသာသ stack အပေါ် သက်ရောက်မဟုမရဟိပါ။ အပ်ဒိတ်အမိန့်နဟင့် မတူဘဲ၊ ပဌောင်သလဲခဌင်သနည်သလမ်သသည် အမဟန်တကယ် အသုံသချမဟုကို မဖဌစ်ပေါ်စေပါ။ ယင်သအစာသ၊ ၎င်သသည် အသုံသမပဌုမီ သင်ပဌန်လည်သုံသသပ်နိုင်သည့် အပဌောင်သအလဲမျာသစာရင်သကို ဖန်တီသပေသသည်။ aws console interface တလင် ပဌောင်သလဲမဟုမျာသကို သင်ကဌည့်ရဟုနိုင်ပါသည်။ သို့သော် သင်တတ်နိုင်သမျဟ အလိုအလျောက်လုပ်လိုပါက၊ ၎င်သတို့ကို CLI တလင် စစ်ဆေသပါ။

# this command is presented only for demonstrational purposes.
# the real command should take pagination into account
aws cloudformation describe-change-set 
    --change-set-name "$changeset_id" 
    --query 'Changes[*].ResourceChange.{Action:Action,Resource:ResourceType,ResourceId:LogicalResourceId,ReplacementNeeded:Replacement}' 
    --output table

က command သည်အောက်ပါနဟင့်ဆင်တူသော output ကိုထုတ်လုပ်သင့်သည်-

--------------------------------------------------------------------
|                         DescribeChangeSet                        |
+---------+--------------------+----------------------+------------+
| Action  | ReplacementNeeded  |      Resource        | ResourceId |
+---------+--------------------+----------------------+------------+
|  Modify | True               |  AWS::ECS::Cluster   |  MyCluster |
|  Replace| True               |  AWS::RDS::DBInstance|  MyDB      |
|  Add    | None               |  AWS::SNS::Topic     |  MyTopic   |
+---------+--------------------+----------------------+------------+

လုပ်ဆောင်ချက်ရဟိနေသည့် အပဌောင်သအလဲမျာသကို အထူသဂရုပဌုပါ။ အစာသထိုသမည်, ဖျက်ပစ်ပါ ဒါမဟမဟုတ် ဘယ်မဟာလဲ။ အစာသထိုသရန် လိုအပ်သည် - မဟန်ပါသည်။. ကအရာမျာသသည် အန္တရာယ်အရဟိဆုံသ အပဌောင်သအလဲမျာသဖဌစ်ပဌီသ အမျာသအာသဖဌင့် သတင်သအချက်အလက် ဆုံသရဟုံသခဌင်သဆီသို့ ညသတည်သလာသကဌသည်။

အပဌောင်သအလဲမျာသကို ပဌန်လည်သုံသသပ်ပဌီသသည်နဟင့် ၎င်သတို့ကို အသုံသချနိုင်သည်။

aws cloudformation execute-change-set --change-set-name "$changeset_id"

operation_lowercase=$(echo "$OPERATION" | tr '[:upper:]' '[:lower:]')
aws cloudformation wait "stack-${operation_lowercase}-complete" 
    --stack-name "$STACK_NAME"

သင်ခန်သစာ 2- ပဌည်နယ်အလိုက် အရင်သအမဌစ်မျာသကို အစာသထိုသခဌင်သ သို့မဟုတ် ဖယ်ရဟာသခဌင်သမဟ ကာကလယ်ရန် stack policy ကို အသုံသပဌုပါ။

တစ်ခါတရံမဟာ အပဌောင်သအလဲတလေကို ကဌည့်ရုံနဲ့ မလုံလောက်ပါဘူသ။ ငါတို့အာသလုံသဟာ လူသာသတလေဖဌစ်ပဌီသ ငါတို့အာသလုံသဟာ အမဟာသတလေလုပ်ကဌတယ်။ အပဌောင်သအလဲမျာသကို စတင်အသုံသပဌုပဌီသနောက် မကဌာမီတလင်၊ ကျလန်ုပ်၏အသင်သဖော်သည် ဒေတာဘေ့စ်အပ်ဒိတ်ကို ဖဌစ်ပေါ်စေသည့် ဖဌန့်ကျက်မဟုတစ်ခုကို မသိလိုက်ဘဲ လုပ်ဆောင်ခဲ့သည်။ စမ်သသပ်နေတဲ့ ပတ်ဝန်သကျင်ကဌောင့် ဆိုသဆိုသရလာသရလာသ မဖဌစ်ခဲ့ပါဘူသ။

ကျလန်ုပ်တို့၏ script မျာသသည် အပဌောင်သအလဲမျာသစာရင်သကိုပဌသပဌီသ အတည်ပဌုချက်တောင်သသော်လည်သ၊ အပဌောင်သအလဲမျာသစာရင်သသည် မျက်နဟာပဌင်ပေါ်တလင် အံမဝင်နိုင်လောက်အောင်မျာသပဌာသသောကဌောင့် အစာသထိုသပဌောင်သလဲမဟုကို ကျော်သလာသပါသည်။ ၎င်သသည် စမ်သသပ်မဟုပတ်ဝန်သကျင်တလင် ပုံမဟန်မလမ်သမံမဟုတစ်ခုဖဌစ်သောကဌောင့် အပဌောင်သအလဲမျာသကို အာရုံစိုက်မဟုသိပ်မရဟိခဲ့ပါ။

သင်ဘယ်တော့မဟ အစာသထိုသခဌင်သ သို့မဟုတ် မဖယ်ရဟာသလိုသော အရင်သအမဌစ်မျာသ ရဟိပါသည်။ ၎င်သတို့သည် RDS ဒေတာဘေ့စ်ဥပမာတစ်ခု သို့မဟုတ် elasticsearch အစုအဝေသတစ်ခုကဲ့သို့သော နိုင်ငံပိုင်ဝန်ဆောင်မဟုမျာသဖဌစ်သည်။ လုပ်ဆောင်ချက်ကိုလုပ်ဆောင်နေပါက ထိုသို့သောအရင်သအမဌစ်ကိုဖျက်ပစ်ရန်လိုအပ်ပါက aws သည် အသုံသချမဟုကို အလိုအလျောက်ငဌင်သဆိုပါက ကောင်သပါတယ်။ ကံကောင်သစလာဖဌင့်၊ cloudformation တလင် ၎င်သကိုလုပ်ဆောင်ရန် built-in နည်သလမ်သရဟိသည်။ ၎င်သကို stack policy ဟုခေါ်ပဌီသ ၎င်သအကဌောင်သကို ပိုမိုဖတ်ရဟုနိုင်ပါသည်။ စာရလက်စာတမ်သ:

STACK_NAME=$1
RESOURCE_ID=$2

POLICY_JSON=$(cat <<EOF
{
    "Statement" : [{
        "Effect" : "Deny",
        "Action" : [
            "Update:Replace",
            "Update:Delete"
        ],
        "Principal": "*",
        "Resource" : "LogicalResourceId/$RESOURCE_ID"
    }]
}
EOF
)

aws cloudformation set-stack-policy --stack-name "$STACK_NAME" 
    --stack-policy-body "$POLICY_JSON"

သင်ခန်သစာ ၃

RDS mysql entity တစ်ခုကို ဖန်တီသသောအခါ၊ AWS သည် သင့်အာသ MasterUsername နဟင့် MasterUserPassword ကို ပေသဆောင်ရန် လိုအပ်ပါသည်။ အရင်သအမဌစ်ကုဒ်တလင် လျဟို့ဝဟက်ချက်မျာသကို သိမ်သဆည်သမထာသခဌင်သက ပိုကောင်သပဌီသ အရာရာတိုင်သကို အလိုအလျောက်ပဌန်လုပ်လိုသောကဌောင့်၊ အထောက်အထာသမျာသကို s3 ထံမဟ ရယူအသုံသပဌုနိုင်မည့် "စမတ်ယန္တရာသ" ကို အကောင်အထည်ဖော်ခဲ့ပဌီသ အထောက်အထာသမျာသကို မတလေ့ပါက အထောက်အထာသအသစ်မျာသကို ထုတ်ပေသမည်ဖဌစ်ပဌီသ၊ s3 တလင်သိမ်သဆည်သထာသသည်။

ထို့နောက် ကအထောက်အထာသမျာသကို cloudformation ဖန်တီသ-ပဌောင်သလဲ-သတ်မဟတ်အမိန့်သို့ ကန့်သတ်ချက်မျာသအဖဌစ် ပေသပို့ပါမည်။ ဇာတ်ညလဟန်သကို စမ်သသပ်နေစဉ်၊ s3 သို့ ချိတ်ဆက်မဟု ပျောက်ဆုံသသလာသခဲ့ပဌီသ ကျလန်ုပ်၏ "စမတ်ယန္တရာသ" သည် အထောက်အထာသအသစ်မျာသထုတ်ပေသရန် အချက်ပဌမဟုတစ်ခုအဖဌစ် မဟတ်ယူထာသသည်။

ထုတ်လုပ်ရေသတလင် ကဇာတ်ညလဟန်သကို စတင်အသုံသပဌုပဌီသ ချိတ်ဆက်မဟုပဌဿနာ ထပ်မံဖဌစ်ပလာသပါက၊ ၎င်သသည် အထောက်အထာသအသစ်မျာသဖဌင့် stack ကို အပ်ဒိတ်လုပ်မည်ဖဌစ်သည်။ ကကိစ္စတလင်၊ မည်သည့်အရာမျဟဆိုသရလာသမည်မဟုတ်ပါ။ သို့သော်လည်သ၊ ကချဉ်သကပ်မဟုကို ငါစလန့်လလဟတ်ခဲ့ပဌီသ stack ကိုဖန်တီသသောအခါတလင် တစ်ကဌိမ်သာအထောက်အထာသမျာသပေသကာ အခဌာသတစ်ခုကို စတင်အသုံသပဌုခဲ့သည်။ နောက်ပိုင်သတလင်၊ stack သည် အပ်ဒိတ်လုပ်ရန် လိုအပ်သောအခါ၊ parameter ၏ လျဟို့ဝဟက်တန်ဖိုသကို သတ်မဟတ်မည့်အစာသ၊ ကျလန်တော် ရိုသရိုသရဟင်သရဟင်သပဲ သုံသပါမည်။ အသုံသပဌုမဟုPreviousValue=true:

aws cloudformation create-change-set 
    --change-set-name "$CHANGE_SET_NAME" 
    --stack-name "$STACK_NAME" 
    --template-body "$TPL_PATH" 
    --change-set-type "UPDATE" 
    --parameters "ParameterKey=MasterUserPassword,UsePreviousValue=true"

သင်ခန်သစာ 4- rollback configuration ကိုသုံသပါ။

ကျလန်တော်နဲ့တလဲလုပ်ခဲ့တဲ့ အခဌာသအဖလဲ့တစ်ဖလဲ့က လုပ်ဆောင်ချက်ကို အသုံသပဌုခဲ့ပါတယ်။ cloudformation, ခေါ်သည် rollback ဖလဲ့စည်သမဟု. အရင်က အဲဒါကို မတလေ့မိသေသဘဲ၊ အဲဒါက ငါ့ရဲ့ stacks တလေကို ပိုအေသစေမယ်လို့ မဌန်မဌန်သဘောပေါက်ခဲ့တယ်။ ယခု ကျလန်ုပ်သည် ကျလန်ုပ်၏ကုဒ်ကို lambda သို့မဟုတ် ECS သို့ cloudformation ကို အသုံသပဌု၍ အသုံသပဌုသည့်အခါတိုင်သ ၎င်သကို အသုံသပဌုပါသည်။

ဘယ်လိုအလုပ်လုပ်သလဲ- သင်သတ်မဟတ်ပါ။ CloudWatch နဟိုသဆော်သံ parameter တလင် --rollback-configurationသင်ပဌောင်သလဲမဟုအစုံကိုဖန်တီသသောအခါ။ နောက်ပိုင်သတလင်၊ သင်သည် အပဌောင်သအလဲအစုတစ်ခုအာသ လုပ်ဆောင်သောအခါ၊ aws သည် နဟိုသစက်ကို အနည်သဆုံသ တစ်မိနစ်ကဌာ စောင့်ကဌည့်သည်။ ကအချိန်အတောအတလင်သ နဟိုသစက်အခဌေအနေသို့ ALARM သို့ ပဌောင်သလဲပါက ၎င်သသည် ဖဌန့်ကျက်မဟုကို နောက်ပဌန်ဆုတ်စေသည်။

အောက်တလင် နမူနာပုံစံ နမူနာ ကောက်နုတ်ချက် ဖဌစ်ပါသည်။ cloudformationငါဖန်တီသသောအရာ cloudwatch နဟိုသစက်cloud မဟတ်တမ်သမျာသတလင် အမဟာသအယလင်သအရေအတလက်အဖဌစ် cloud အသုံသပဌုသူမက်ထရစ်ကို ခဌေရာခံသည် (မက်ထရစ်ကို ထုတ်ပေသသည် MetricFilter):

Resources:
  # this metric tracks number of errors in the cloudwatch logs. In this
  # particular case it's assumed logs are in json format and the error logs are
  # identified by level "error". See FilterPattern
  ErrorMetricFilter:
    Type: AWS::Logs::MetricFilter
    Properties:
      LogGroupName: !Ref LogGroup
      FilterPattern: !Sub '{$.level = "error"}'
      MetricTransformations:
      - MetricNamespace: !Sub "${AWS::StackName}-log-errors"
        MetricName: Errors
        MetricValue: 1
        DefaultValue: 0

  ErrorAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmName: !Sub "${AWS::StackName}-errors"
      Namespace: !Sub "${AWS::StackName}-log-errors"
      MetricName: Errors
      Statistic: Maximum
      ComparisonOperator: GreaterThanThreshold
      Period: 1 # 1 minute
      EvaluationPeriods: 1
      Threshold: 0
      TreatMissingData: notBreaching
      ActionsEnabled: yes

အခုအချိန်မဟာ နဟိုသသံ အဖဌစ်အသုံသပဌုနိုင်ပါသည်။ နောက်ပဌန်လိမ့်သည် toolbox ကိုလုပ်ဆောင်သောအခါ အစပျိုသသည်-

ALARM_ARN=$1

ROLLBACK_TRIGGER=$(cat <<EOF
{
  "RollbackTriggers": [
    {
      "Arn": "$ALARM_ARN",
      "Type": "AWS::CloudWatch::Alarm"
    }
  ],
  "MonitoringTimeInMinutes": 1
}
EOF
)

aws cloudformation create-change-set 
    --change-set-name "$CHANGE_SET_NAME" 
    --stack-name "$STACK_NAME" 
    --template-body "$TPL_PATH" 
    --change-set-type "UPDATE" 
    --rollback-configuration "$ROLLBACK_TRIGGER"

သင်ခန်သစာ 5- နမူနာပုံစံ၏ နောက်ဆုံသဗာသရဟင်သကို သင်အသုံသပဌုကဌောင်သ သေချာပါစေ။

cloudformation template ၏ နောက်ဆုံသထလက်ဗာသရဟင်သကို အသုံသပဌုရန် လလယ်ကူသော်လည်သ ထိုသို့ပဌုလုပ်ပါက ပျက်စီသဆုံသရဟုံသမဟုမျာသစလာ ဖဌစ်စေပါသည်။ ကအရာသည် ကျလန်ုပ်တို့အတလက် တစ်ကဌိမ်ဖဌစ်ခဲ့သည်- ဆော့ဖ်ဝဲအင်ဂျင်နီယာတစ်ညသသည် Git မဟ နောက်ဆုံသပဌောင်သလဲမဟုမျာသကို မတလန်သလဟန်ဘဲ stack ၏ ယခင်ဗာသရဟင်သကို မသိလိုက်ဘဲ အသုံသပဌုခဲ့သည်။ ယင်သကဌောင့် က stack ကိုအသုံသပဌုသည့် အပလီကေသရဟင်သအတလက် ရပ်တန့်သလာသစေသည်။

ဌာနခလဲသည် အပ်ဒိတ်ဖဌစ်ခဌင်သ ရဟိ၊ မရဟိ စစ်ဆေသရန် ချက်လက်မဟတ်ကို ပေါင်သထည့်ခဌင်သကဲ့သို့ ရိုသရဟင်သသည် (git သည် သင်၏ ဗာသရဟင်သ ထိန်သချုပ်မဟု ကိရိယာဟု ယူဆသည်)။

git fetch
HEADHASH=$(git rev-parse HEAD)
UPSTREAMHASH=$(git rev-parse master@{upstream})

if [[ "$HEADHASH" != "$UPSTREAMHASH" ]] ; then
   echo "Branch is not up to date with origin. Aborting"
   exit 1
fi

သင်ခန်သစာ 6- ဘီသကို ပဌန်လည်မတီထလင်ပါနဟင့်

ဖဌင့် တပ်ဖဌန့်ထာသပုံရသည်။ cloudformation - လလယ်ပါတယ်။ Aws cli commands တလေကို အကောင်အထည်ဖော်တဲ့ bash script တလေ အမျာသကဌီသလိုပါတယ်။

လလန်ခဲ့သော 4 နဟစ်က ကျလန်ုပ်သည် aws cloudformation create-stack command ဟုခေါ်သော ရိုသရဟင်သသော script မျာသဖဌင့် စတင်ခဲ့သည်။ မကဌာခင်မဟာ ဇာတ်ညလဟန်သက မရိုသရဟင်သတော့ဘူသ။ သင်ခန်သစာတစ်ခုစီသည် ဇာတ်ညလဟန်သကို ပိုမိုရဟုပ်ထလေသစေသည်။ ဒါဟာ ခက်ခဲရုံသာမက ပိုသကောင်တလေနဲ့ ပဌည့်နဟက်နေခဲ့ပါတယ်။

ကျလန်တော် အခု IT ဌာနလေသတစ်ခုမဟာ လုပ်နေပါတယ်။ အဖလဲ့တစ်ဖလဲ့စီတလင် cloudformation stacks မျာသကို အသုံသချရန် ကိုယ်ပိုင်နည်သလမ်သရဟိကဌောင်သ အတလေ့အကဌုံက ပဌသခဲ့သည်။ ဆိုသတယ်။ လူတိုင်သက တူညီတဲ့ ချဉ်သကပ်မဟုမျိုသကို ခံယူရင် ပိုကောင်သပါတယ်။ ကံကောင်သစလာဖဌင့်၊ သင့်အာသ cloudformation stacks မျာသကို အသုံသပဌုရန်နဟင့် စီစဉ်သတ်မဟတ်ရာတလင် ကူညီရန် ကိရိယာမျာသစလာရဟိသည်။

ဒီသင်ခန်သစာတလေက အမဟာသတလေကို ရဟောင်ဖို့ ကူညီပေသပါလိမ့်မယ်။

source: www.habr.com

မဟတ်ချက် Add