Amụtara m nkuzi isii ndị a nke ịrụ ọrụ na igwe ojii maka oge ndụ m niile.

Mụ na ya malitere ịrụ ọrụ igwe ojii Afọ 4 gara aga. Kemgbe ahụ, agbajiela m ọtụtụ akụrụngwa, ọbụlagodi ndị na-emepụtalarị. Ma mgbe ọ bụla m mejọrọ ihe, m na-amụta ihe ọhụrụ. Site na ahụmịhe a, a ga m ekekọrịta ụfọdụ nkuzi kacha mkpa m mụtara.

Amụtara m nkuzi isii ndị a nke ịrụ ọrụ na igwe ojii maka oge ndụ m niile.

Ihe ọmụmụ 1: Nyochaa mgbanwe tupu ibunye ha

Amụtara m nkuzi a obere oge ka mụ na ya malitechara ọrụ igwe ojii. Anaghị m echeta ihe m mebiri mgbe ahụ, mana m na-echeta nke ọma na m ji iwu ahụ aws cloudformation update. Iwu a na-ebupụ ndebiri na-enweghị nkwado ọ bụla nke mgbanwe ndị a ga-ebuga. Echeghị m na nkọwa ọ bụla achọrọ maka ihe kpatara ị ga-eji nwalee mgbanwe niile tupu ibuga ha.

Mgbe ọdịda a gasịrị, m gbanwere ozugbo usoro ntinye ego, na-eji iwu dochie iwu mmelite mepụta-ngbanwe-nhazi

# 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"

Ozugbo emepụtara ihe mgbanwe, ọ nweghị mmetụta na ngwugwu dị adị. N'adịghị ka iwu nwelite, ụzọ Changeet adịghị akpalite n'ezie nbunye. Kama, ọ na-emepụta ndepụta mgbanwe nke ị nwere ike nyochaa tupu ebuga ya. Ị nwere ike ịlele mgbanwe na interface aws console. Mana ọ bụrụ na ịchọrọ ịmegharị ihe niile ị nwere ike, lelee ha na 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

Iwu a kwesịrị iwepụta mmepụta yiri nke a:

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

Lezienụ anya na mgbanwe ebe Action dị Dochie, Hichapụ ma ọ bụ ebe Achọrọ Nnọchi - Eziokwu. Ndị a bụ mgbanwe kachasị dị ize ndụ ma na-edugakarị na enweghị ozi.

Ozugbo enyochala mgbanwe ndị a, enwere ike ibunye ha

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"

Ihe ọmụmụ 2: Jiri amụma nchịkọta iji gbochie dochie ma ọ bụ wepụ akụrụngwa steeti

Mgbe ụfọdụ naanị ile mgbanwe ndị ahụ ezughị. Anyị niile bụ mmadụ, anyị niile na-emehiekwa ihe. N'oge na-adịghị ka anyị malitere iji Changeets, onye otu m na-amaghị ama mere mbugharị nke butere mmelite nchekwa data. Ọ dịghị ihe ọjọọ mere n'ihi na ọ bụ ebe a na-anwale ule.

N'agbanyeghị na scripts anyị gosipụtara ndepụta mgbanwe wee rịọ maka nkwenye, agbanwere mgbanwe mgbanwe n'ihi na ndepụta mgbanwe buru ibu nke na ọ dabara na ihuenyo. Ma ebe ọ bụ na nke a bụ mmelite nkịtị na gburugburu ebe a na-anwale, a naghị elebara mgbanwe anya anya.

Enwere akụrụngwa ndị ị na-achọghị iji dochie ma ọ bụ wepu. Ndị a bụ ọrụ steeti zuru oke, dị ka ihe atụ nchekwa data RDS ma ọ bụ ụyọkọ elasticsearch, wdg. Ọ ga-adị mma ma ọ bụrụ na aws ga-ajụ ibunye ya ozugbo ma ọ bụrụ na ọrụ a na-arụ ga-achọ ihichapụ ụdị akụrụngwa ahụ. Luckily, ígwé ojii nwere ụzọ arụpụtara iji mee nke a. A na-akpọ nke a amụma stack, ma ị nwere ike ịgụkwu gbasara ya na ya akwụkwọ:

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"

Ihe nkuzi 3: Jiri UsePreviousValue mgbe ị na-emelite ngwugwu nwere paramita nzuzo

Mgbe ị mepụtara ihe RDS mysql, AWS chọrọ ka ịnye MasterUsername na MasterUserPassword. Ebe ọ bụ na ọ ka mma ịghara idebe ihe nzuzo na koodu isi na achọrọ m ịmegharị ihe niile, etinyere m "smart method" ebe tupu ntinye akwụkwọ ga-enweta nzere site na s3, ma ọ bụrụ na achọtaghị nzere ahụ, a na-emepụta nzere ọhụrụ na echekwara na s3.

A ga-ebufe nzere ndị a dị ka paramita na iwu Cloudformation create-change-set Command. Mgbe ị na-anwale edemede ahụ, o mere na njikọ ahụ na s3 furu efu, na "usoro smart" m mesoro ya dị ka ihe mgbaàmà iji mepụta nzere ọhụrụ.

Ọ bụrụ na m malitere iji edemede a na mmepụta na nsogbu njikọ ahụ mere ọzọ, ọ ga-eji nzere ọhụrụ kwalite nchịkọta ahụ. N'okwu a, ọ dịghị ihe ọjọọ ga-eme. Agbanyeghị, m hapụrụ usoro a wee malite iji nke ọzọ, na-enye nzere naanị otu ugboro - mgbe ị na-eke mkpokọta. Ma emesịa, mgbe nchịkọta ahụ chọrọ imelite, kama ịkọwa uru nzuzo nke paramita ahụ, m ga-eji ya. JiriPreviousValue=ezi:

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"

Ihe ọmụmụ 4: Jiri nhazigharị azụ

Otu ọzọ mụ na ya rụkọrọ ọrụ ji ọrụ ahụ igwe ojii, akpọ nhazigharị mpịakọta. Ahụbeghị m ya mbụ wee chọpụta ngwa ngwa na ọ ga-eme ka mwepu mkpọ mkpọ dị jụụ karị. Ugbu a, m na-eji ya oge ọ bụla m na-ebuga koodu m na lambda ma ọ bụ ECS site na iji igwe ojii.

Ka o si arụ ọrụ: ị kọwapụta CloudWatch mkpu na paramita --rollback-nhazimgbe ị mepụtara Changeset. Mgbe emechara, mgbe ịmere usoro mgbanwe, aws na-enyocha mkpu ma ọ dịkarịa ala otu nkeji. Ọ na-atụgharị mbugharị ahụ ma ọ bụrụ na oti mkpu na-agbanwe ọnọdụ ka ọ bụrụ Mkpuchi n'oge a.

N'okpuru bụ ọmụmaatụ nke ndebiri ndebiri igwe ojiinke m na-eke igwe elekere mkpu, nke na-eso metric onye ọrụ igwe ojii dị ka ọnụọgụ njehie dị na ndekọ igwe ojii (a na-emepụta metric ahụ site na 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

Ugbu a Mkpu enwere ike iji ya ahaghachi kpalite mgbe ị na-eme igbe ngwaọrụ:

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"

Ihe ọmụmụ 5: Gbaa mbọ hụ na ị na-ebunye ụdị ndebiri kachasị ọhụrụ

Ọ dị mfe ibugharị ụdị nke igwe ojii na-adịchaghị ọhụrụ, mana ime nke a ga-akpata nnukwu mmebi. Nke a mere anyị otu ugboro: onye nrụpụta ebugharịghị mgbanwe ndị ọhụrụ sitere na Git wee bufee ụdị ngwugwu ahụ n'amaghị ama. Nke a butere mbelata oge maka ngwa nke ji nchịkọta a.

Ihe dị mfe dị ka ịgbakwunye nlele iji hụ ma alaka ụlọ ọrụ adịla ọhụrụ tupu ịme ya ga-adị mma (na-eche na git bụ ngwa njikwa ụdị gị):

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

Ihe omumu nke 6: Emeghachila wheel

Ọ nwere ike ịdị ka ibugharị ya na igwe ojii - ọ dị mfe. Naanị ị chọrọ ụyọkọ scripts bash na-emezu iwu aws cli.

Afọ 4 gara aga amalitere m site na edemede dị mfe a na-akpọ iwu aws cloudformation create-stack Command. N'oge na-adịghị anya, edemede adịkwaghị mfe. Ihe ọmụmụ ọ bụla a mụtara mere ka edemede ahụ dịkwuo mgbagwoju anya. Ọ bụghị naanị na ọ siri ike, kamakwa juputara na ahụhụ.

Ana m arụ ọrụ ugbu a na obere ngalaba IT. Ahụmahụ egosila na otu ọ bụla nwere ụzọ nke ya si ebubata nchịkọta igwe ojii. Nke ahụ dịkwa njọ. Ọ ga-aka mma ma ọ bụrụ na onye ọ bụla na-eme otu ụzọ ahụ. Ọ dabara nke ọma, enwere ọtụtụ ngwaọrụ dị iji nyere gị aka ibugharị na hazie nchịkọta igwe ojii.

Ihe mmụta ndị a ga-enyere gị aka izere mmejọ.

isi: www.habr.com

Tinye a comment