Dh’ ionnsaich mi na 6 leasanan seo mu bhith ag obair le cruth neòil airson a’ chòrr de mo bheatha.

Thòisich mi ag obair le cruth sgòthan 4 bliadhna air ais. Bhon uairsin tha mi air mòran de bhun-structaran a bhriseadh, eadhon feadhainn a bha ann an cinneasachadh mu thràth. Ach a h-uile turas a rinn mi rudeigin suas, dh'ionnsaich mi rudeigin ùr. Tron eòlas seo, roinnidh mi cuid de na leasanan as cudromaiche a dh’ ionnsaich mi.

Dh’ ionnsaich mi na 6 leasanan seo mu bhith ag obair le cruth neòil airson a’ chòrr de mo bheatha.

Leasan 1: Dèan deuchainn air atharrachaidhean mus cleachd thu iad

Dh’ ionnsaich mi an leasan seo goirid às deidh dhomh tòiseachadh ag obair leis cruth sgòthan. Chan eil cuimhne agam dè dìreach a bhris mi an uairsin, ach tha cuimhne agam gu cinnteach gun do chleachd mi an àithne Ùrachadh luath air ìre AWS Cloudformation. Tha an àithne seo dìreach a’ sgaoileadh an teamplaid gun dearbhadh sam bith air na h-atharrachaidhean a thèid a chleachdadh. Chan eil mi a’ smaoineachadh gu bheil feum air mìneachadh sam bith carson a bu chòir dhut a h-uile atharrachadh a dhearbhadh mus cleachd thu iad.

Às deidh an fàilligeadh seo, dh'atharraich mi sa bhad loidhne-phìoban, cuir an àithne an àite an àithne ùrachaidh cruthaich-atharrachadh-seata

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

Cho luath ‘s a thèid changeet a chruthachadh, chan eil buaidh sam bith aige air a’ chruach a th ’ann. Eu-coltach ris an òrdugh ùrachaidh, chan eil an dòigh-obrach changeet a 'toirt air adhart an cleachdadh fhèin. An àite sin, cruthaichidh e liosta de dh’ atharrachaidhean as urrainn dhut ath-sgrùdadh mus cleachd thu iad. Chì thu na h-atharrachaidhean ann an eadar-aghaidh tòcan aws. Ach mas fheàrr leat a h-uile rud as urrainn dhut a dhèanamh fèin-ghluasadach, thoir sùil orra san 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

Bu chòir don àithne seo toradh coltach ris na leanas a thoirt gu buil:

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

Thoir aire shònraichte do atharrachaidhean far a bheil Gnìomh Replace, Sguab às no càite Ath-àiteachadh a dhìth - Fìor. Is iad seo na h-atharrachaidhean as cunnartaiche agus mar as trice bidh iad a’ leantainn gu call fiosrachaidh.

Aon uair ‘s gu bheil na h-atharrachaidhean air an ath-sgrùdadh, faodar an cleachdadh

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"

Leasan 2: Cleachd poileasaidh stac gus casg a chuir air goireasan stàiteil bho bhith air an cur nan àite no air an toirt air falbh

Uaireannan chan eil e gu leòr dìreach coimhead air na h-atharrachaidhean. Tha sinn uile daonna agus bidh sinn uile a’ dèanamh mhearachdan. Goirid às deidh dhuinn tòiseachadh air changeets a chleachdadh, rinn an sgioba agam gun fhiosta cleachdadh a lean gu ùrachadh stòr-dàta. Cha do thachair dad dona oir b’ e àrainneachd deuchainn a bh’ ann.

Eadhon ged a sheall na sgriobtaichean againn liosta de dh’ atharraichean agus dh’ iarr iad dearbhadh, chaidh an t-atharrachadh Replace a sheachnadh leis gu robh an liosta atharrachaidhean cho mòr is nach robh e a’ freagairt air an sgrion. Agus leis gur e ùrachadh àbhaisteach a bha seo ann an àrainneachd deuchainn, cha deach mòran aire a thoirt dha na h-atharrachaidhean.

Tha goireasan ann nach bi thu airson a chuir nan àite no a thoirt air falbh. Is e seirbheisean stàiteil a tha seo, leithid eisimpleir stòr-dàta RDS no cruinneachadh elasticsearch, msaa. Bhiodh e math nan deidheadh ​​​​aus a dhiùltadh gu fèin-ghluasadach nam biodh feum aig an obair a bhathas a’ dèanamh air a leithid de ghoireas a dhubhadh às. Gu fortanach, tha dòigh stèidhichte aig cruth sgòthan airson seo a dhèanamh. Canar poileasaidh stac ris an seo, agus faodaidh tu barrachd a leughadh mu dheidhinn ann an sgrìobhainnean:

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"

Leasan 3: Cleachd UsePreviousValue nuair a bhios tu ag ùrachadh stac le crìochan dìomhair

Nuair a chruthaicheas tu eintiteas mysql RDS, tha AWS ag iarraidh ort MasterUsername agus MasterUserPassword a thoirt seachad. Leis gu bheil e nas fheàrr gun a bhith a’ cumail dìomhaireachdan anns a’ chòd stòr agus bha mi airson a h-uile càil a dhèanamh fèin-ghluasadach, chuir mi an gnìomh “inneal snasail” far am faighear na teisteanasan bho s3 mus tèid an cleachdadh, agus mura lorgar na teisteanasan, thèid teisteanasan ùra a chruthachadh agus air a stòradh ann an s3.

Thèid na teisteanasan sin an uairsin a thoirt seachad mar pharamadairean don àithne cruth-atharrachadh cruth-atharrachadh-set. Fhad ‘s a bha mi a’ feuchainn ris an sgriobt, thachair e gun deach an ceangal ri s3 a chall, agus bha an “inneal snasail” agam ga làimhseachadh mar chomharradh gus teisteanasan ùra a ghineadh.

Ma thòisich mi a’ cleachdadh an sgriobt seo ann an cinneasachadh agus gun do thachair an duilgheadas ceangail a-rithist, bheireadh e ùrachadh air a’ chruach le teisteanasan ùra. Anns a 'chùis shònraichte seo, cha tachair dad dona. Ach, thrèig mi an dòigh-obrach seo agus thòisich mi a’ cleachdadh fear eile, a’ toirt seachad teisteanasan dìreach aon turas - nuair a bha mi a’ cruthachadh a’ chruach. Agus nas fhaide air adhart, nuair a dh'fheumas an stac ùrachadh, an àite a bhith a 'sònrachadh luach dìomhair a' pharamadair, bhithinn dìreach a 'cleachdadh 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"

Leasan 4: Cleachd rèiteachadh roiligeadh air ais

Chleachd sgioba eile leis an robh mi ag obair an gnìomh cruth sgòthanghairm rèiteachadh air ais. Cha robh mi air a thighinn tarsainn air roimhe seo agus thuig mi gu sgiobalta gun dèanadh e cleachdadh mo chruachan eadhon nas fhuaire. A-nis bidh mi ga chleachdadh a h-uile uair a chuireas mi mo chòd gu lambda no ECS a’ cleachdadh cruth sgòthan.

Mar a tha e ag obair: sònraich thu Inneal-rabhaidh CloudWatch ann am paramadair --rollback-configurationnuair a chruthaicheas tu atharraichean. Nas fhaide air adhart, nuair a nì thu seata de dh’ atharrachaidhean, bidh aws a’ cumail sùil air an inneal-rabhaidh airson co-dhiù aon mhionaid. Bidh e a’ cuir air ais an cleachdadh ma dh’ atharraicheas an inneal-rabhaidh gu ALARM rè na h-ùine seo.

Gu h-ìosal tha eisimpleir de earrann teamplaid cruth sgòthananns a bheil mi a' cruthachadh inneal-rabhaidh sgòthan, a bhios a’ cumail sùil air meatrach cleachdaiche sgòthan mar an àireamh de mhearachdan anns na logaichean sgòthan (tha an meatrach air a chruthachadh tro 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

anns a 'bhad eagal faodar a chleachdadh mar cur air ais brosnachaidh nuair a bhios tu a’ cur an gnìomh bogsa inneal:

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"

Leasan 5: Dèan cinnteach gun cleachd thu an tionndadh as ùire den teamplaid

Tha e furasta dreach nas lugha na an tionndadh as ùire den teamplaid cruth sgòthan a chleachdadh, ach le bhith a’ dèanamh sin nì sin tòrr milleadh. Thachair seo dhuinn aon uair: cha do phut leasaiche na h-atharrachaidhean as ùire bho Git agus chuir e a-steach dreach roimhe den chruach gun fhios dha. Mar thoradh air seo bha ùine downt airson an aplacaid a chleachd a’ chruach seo.

Bhiodh rudeigin cho sìmplidh ri seic a chuir a-steach gus faicinn a bheil am meur ùraichte mus dèan thu gealltanas ceart (a’ gabhail ris gur e git an inneal smachd dreach agad):

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

Leasan 6: Na ath-chruthaich a’ chuibhle

Is dòcha gu bheil e coltach ri cleachdadh le cruth sgòthan - tha e furasta. Feumaidh tu dìreach dòrlach de sgriobtaichean bash a’ cur an gnìomh òrdughan aws cli.

4 bliadhna air ais thòisich mi le sgriobtaichean sìmplidh ris an canar aws cloudformation create-stack command. Goirid cha robh an sgriobt nas sìmplidh. Rinn gach leasan a chaidh ionnsachadh an sgriobt nas iom-fhillte. Cha robh e a-mhàin duilich, ach cuideachd làn de bhiteagan.

Tha mi an-dràsta ag obair ann an roinn IT bheag. Tha eòlas air sealltainn gu bheil a dhòigh fhèin aig gach sgioba air cruachan cruth neòil a chleachdadh. Agus tha sin dona. Bhiodh e na b’ fheàrr nan gabhadh a h-uile duine an aon dòigh-obrach. Gu fortanach, tha mòran innealan rim faighinn gus do chuideachadh le bhith a’ cleachdadh agus a’ rèiteachadh cruachan cruth sgòthan.

Cuidichidh na leasanan sin thu gus mearachdan a sheachnadh.

Source: www.habr.com

Cuir beachd ann