D’fhoghlaim mé na 6 cheacht seo maidir le bheith ag obair le néalformáil don chuid eile de mo shaol.

Thosaigh mé ag obair le scamallfhoirmiú 4 bliana ó shin. Ó shin i leith tá go leor bonneagair briste agam, fiú cinn a bhí i dtáirgeadh cheana féin. Ach gach uair a rinne mé praiseach de rud éigin, d'fhoghlaim mé rud éigin nua. Tríd an taithí seo, roinnfidh mé cuid de na ceachtanna is tábhachtaí a d’fhoghlaim mé.

D’fhoghlaim mé na 6 cheacht seo maidir le bheith ag obair le néalformáil don chuid eile de mo shaol.

Ceacht 1: Déan tástáil ar athruithe sula n-imscartar iad

D’fhoghlaim mé an ceacht seo go luath tar éis dom tosú ag obair leis scamallfhoirmiú. Ní cuimhin liom cad go díreach a bhris mé ansin, ach is cinnte gur cuimhin liom gur úsáid mé an t-ordú nuashonrú scamall aws. Ní dhéanann an t-ordú seo ach an teimpléad a rolladh amach gan aon bhailíochtú ar na hathruithe a úsáidfear. Ní dóigh liom go bhfuil gá le haon mhíniú cén fáth ar cheart duit gach athrú a thástáil sula n-imscartar iad.

Tar éis an teip seo, d'athraigh mé láithreach píblíne imscaradh, ag cur an ordú nuashonraithe in ionad an ordaithe cruthaigh-athrú-tacar

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

Nuair a chruthaítear tacar athruithe, níl aon éifeacht aige ar an gcruach atá ann cheana féin. Murab ionann agus an t-ordú nuashonraithe, ní spreagann an cur chuige changeset an t-imscaradh iarbhír. Ina áit sin, cruthaíonn sé liosta athruithe ar féidir leat a athbhreithniú roimh imscaradh. Is féidir leat féachaint ar na hathruithe ar chomhéadan consól aws. Ach más fearr leat gach rud is féidir leat a uathoibriú, seiceáil iad sa 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

Ba cheart don ordú seo aschur cosúil leis an méid seo a leanas a tháirgeadh:

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

Tabhair aird ar leith ar athruithe san áit a bhfuil Gníomh Ionadaigh, Scrios nó cén áit Replacement Needed - Fíor. Is iad seo na hathruithe is contúirtí agus de ghnáth mar thoradh ar chailliúint faisnéise.

Nuair a bheidh na hathruithe athbhreithnithe, is féidir iad a imscaradh

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"

Ceacht 2: Bain úsáid as polasaí cruachta le cosc ​​a chur ar acmhainní stáit a athsholáthar nó a bhaint

Uaireanta ní leor breathnú ar na hathruithe. Táimid go léir daonna agus déanaimid go léir botúin. Go gairid i ndiaidh dúinn tosú ag baint úsáide as changesets, rinne mo chomhghleacaí imscaradh i ngan fhios dóibh agus rinneadh nuashonrú ar an mbunachar sonraí mar thoradh air. Níor tharla aon rud dona toisc gur timpeallacht tástála a bhí ann.

Cé gur thaispeáin ár gcuid scripteanna liosta athruithe agus gur iarr siad deimhniú, rinneadh an t-athrú Ionadaigh a scipeáil toisc go raibh liosta na n-athruithe chomh mór sin nach raibh sé oiriúnach don scáileán. Agus ós rud é gur gnáth-nuashonrú é seo i dtimpeallacht tástála, níor tugadh mórán airde ar na hathruithe.

Tá acmhainní ann nach dteastaíonn uait riamh iad a athsholáthar nó a bhaint. Is seirbhísí státseirbhíse iad seo, mar shampla bunachar sonraí RDS nó braisle cuardaigh leaisteacha, srl. Bheadh ​​sé go deas dá ndiúltódh AW an t-imscaradh go huathoibríoch dá mba ghá acmhainn dá leithéid a scriosadh as an oibríocht atá á déanamh. Ar ámharaí an tsaoil, tá bealach ionsuite ag foirmiú scamall chun é seo a dhéanamh. Beartas cruachta a thugtar air seo, agus is féidir leat tuilleadh a léamh faoi i doiciméadú:

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"

Ceacht 3: Úsáid UsePreviousValue agus stack le paraiméadair rúnda á nuashonrú agat

Nuair a chruthaíonn tú eintiteas mysql RDS, éilíonn AWS ort MasterUsername agus MasterUserPassword a sholáthar. Ós rud é go bhfuil sé níos fearr gan rúin a choinneáil sa chód foinse agus go raibh mé ag iarraidh gach rud a uathoibriú, chuir mé "meicníocht chliste" i bhfeidhm nuair a gheofar na dintiúir ó s3 roimh an imscaradh, agus mura bhfaightear na dintiúir, gintear dintiúir nua agus stóráilte i s3 .

Ansin cuirfear na dintiúir seo ar aghaidh mar pharaiméadair chuig an ordú cruthaigh-athrú-sraith cloudformation. Agus an script á thástáil, tharla sé gur cailleadh an nasc le s3, agus chaith mo “mheicníocht chliste” é mar chomhartha chun dintiúir nua a ghiniúint.

Má thosaigh mé ag baint úsáide as an script seo i dtáirgeadh agus gur tharla an fhadhb ceangail arís, dhéanfadh sé an stack a nuashonrú le dintiúir nua. Sa chás áirithe seo, ní tharlóidh aon rud dona. Mar sin féin, thréig mé an cur chuige seo agus thosaigh mé ag baint úsáide as ceann eile, ag soláthar dintiúir ach aon uair amháin - nuair a bhí an stack á chruthú. Agus níos déanaí, nuair is gá an stack a nuashonrú, in ionad luach rúnda an pharaiméadar a shonrú, d'úsáidfinn go simplí UsePreviousValue=fíor:

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"

Ceacht 4: Úsáid cumraíocht rolladh siar

Bhain foireann eile ar oibrigh mé leo úsáid as an bhfeidhm scamallfhoirmiú, ar a dtugtar cumraíocht ais-rolladh. Níor tháinig mé trasna air roimhe seo agus thuig mé go tapa go mbeadh imscaradh mo stoic níos fuaire fós. Anois úsáidim é gach uair a imscarann ​​mé mo chód chuig lambda nó ECS ag baint úsáide as scamallfhoirmiú.

Conas a oibríonn sé: sonraíonn tú ARN aláraim CloudWatch sa pharaiméadar --rollback-chumraíochtnuair a chruthaíonn tú tacar athruithe. Níos déanaí, nuair a dhéanann tú sraith athruithe, déanann aws monatóireacht ar an aláram ar feadh nóiméad amháin ar a laghad. Rollaíonn sé an t-imscaradh ar ais má luann athruithe aláraim go ALARM le linn an ama seo.

Seo thíos sampla de shliocht teimpléad scamallfhoirmiúina cruthaím aláram cloudwatch, a rianaíonn méadrach úsáideora scamall mar líon na n-earráidí sna logaí scamall (gintear an méadrach trí 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

Anois aláraim is féidir a úsáid mar athúsáid truicear agus bosca uirlisí á chur i gcrích:

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"

Ceacht 5: Déan cinnte go bhfuil an leagan is déanaí den teimpléad á úsáid agat

Tá sé éasca leagan níos lú ná an leagan is déanaí den teimpléad néalfhoirmithe a imscaradh, ach déanfaidh sé sin go leor damáiste. Tharla sé seo dúinn uair amháin: níor bhrúigh forbróir na hathruithe is déanaí ó Git agus d'imscaradh leagan roimhe seo den chruach i ngan fhios dó. Mar thoradh air seo bhí aga neamhfhónaimh don fheidhmchlár a d’úsáid an chruach seo.

Bheadh ​​​​rud éigin chomh simplí le seic a chur leis féachaint an bhfuil an brainse cothrom le dáta roimh duit gealltanas a thabhairt dó (ag glacadh leis gurb é git d'uirlis rialaithe leagain):

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

Ceacht 6: Ná déan an roth a athchruthú

Féadfaidh sé cosúil le imscaradh le scamallfhoirmiú - tá sé éasca. Níl uait ach braon scripteanna bash a fhorghníomhaíonn orduithe aws cli.

4 bliana ó shin thosaigh mé le scripteanna simplí ar a dtugtar an t-ordú cruthaigh-stack cruthaigh scamall aws. Go gairid ní raibh an script simplí a thuilleadh. Rinne gach ceacht a foghlaimíodh an script níos casta agus níos mó. Ní hamháin go raibh sé deacair, ach freisin lán le bugs.

Táim ag obair i roinn bheag TF faoi láthair. Léiríonn taithí go bhfuil a bealach féin ag gach foireann chun stoic scamallfhoirmithe a imscaradh. Agus is olc sin. Bheadh ​​sé níos fearr dá nglacfadh gach duine an cur chuige céanna. Ar ámharaí an tsaoil, tá go leor uirlisí ar fáil chun cabhrú leat stoic scamallfhoirmithe a imscaradh agus a chumrú.

Cabhróidh na ceachtanna seo leat botúin a sheachaint.

Foinse: will.com

Add a comment