Kuring diajar ieu 6 palajaran gawé bareng cloudformation pikeun sesa hirup abdi.

Kuring mimiti gawé bareng formasi awan 4 taun ka tukang. Ti saprak éta kuring parantos ngarobih seueur infrastruktur, bahkan anu parantos aya dina produksi. Tapi unggal waktos kuring ngaco, kuring diajar anu anyar. Ngaliwatan pangalaman ieu, abdi bakal babagi sababaraha palajaran pangpentingna kuring diajar.

Kuring diajar ieu 6 palajaran gawé bareng cloudformation pikeun sesa hirup abdi.

Pangajaran 1: Uji parobahan sateuacan nyebarkeunana

Kuring diajar palajaran ieu pas kuring ngamimitian gawé bareng formasi awan. Kuring teu apal naon kahayang kuring peupeus lajeng, tapi kuring pasti inget yen kuring dipaké paréntah apdet cloudformation aws. Paréntah ieu ngan saukur ngagulung témplat tanpa validasi parobihan anu bakal disebarkeun. Ku teu sangka katerangan naon anu diperlukeun pikeun naha anjeun kedah nguji sagala parobahan saméméh deploying aranjeunna.

Sanggeus gagal ieu, kuring langsung robah pipa deployment, ngaganti paréntah update ku paréntah nyieun-robah-set

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

Sakali changeset dijieun, teu boga pangaruh dina tumpukan aya. Teu kawas paréntah update, pendekatan changeset henteu memicu deployment sabenerna. Sabalikna, éta nyiptakeun daptar parobihan anu anjeun tiasa marios sateuacan panyebaran. Anjeun tiasa ningali parobihan dina antarmuka konsol aws. Tapi upami anjeun langkung milih ngajadikeun otomatis sadaya anu anjeun tiasa, teras parios aranjeunna dina 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

Paréntah ieu kedah ngahasilkeun kaluaran anu sami sareng ieu:

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

Nengetan husus ka parobahan mana Aksi ngagentos, pupus atanapi dimana Diperlukeun Ganti - Leres. Ieu mangrupikeun parobihan anu paling bahaya sareng biasana nyababkeun leungitna inpormasi.

Sakali parobihan parantos ditinjau, aranjeunna tiasa disebarkeun

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"

Pangajaran 2: Paké kawijakan tumpukan pikeun nyegah sumberdaya stateful diganti atawa dihapus

Kadang-kadang ngan ukur ningali parobihan henteu cekap. Urang sadaya manusa sareng urang sadaya ngalakukeun kasalahan. Teu lami saatos urang ngamimitian nganggo parobihan, batur sapagawean kuring teu sadar ngalaksanakeun panyebaran anu nyababkeun pembaruan database. Henteu aya anu goréng anu kajantenan sabab éta lingkungan tés.

Sanaos skrip kami nampilkeun daptar parobihan sareng naroskeun konpirmasi, perobahan Gantina dilewatan kusabab daptar parobihan ageung pisan sareng henteu pas dina layar. Sarta saprak ieu update normal dina lingkungan nguji, teu pira perhatian ieu dibayar ka parobahanana.

Aya sumber anu anjeun pernah hoyong ngagentos atanapi ngahapus. Ieu mangrupikeun jasa statefull, sapertos conto database RDS atanapi kluster elasticsearch, jsb. Éta langkung saé upami aws otomatis nolak panyebaran upami operasi anu dilaksanakeun peryogi ngahapus sumberdaya sapertos kitu. Kabeneran, cloudformation gaduh cara anu diwangun pikeun ngalakukeun ieu. Ieu disebut kawijakan tumpukan, jeung anjeun bisa maca leuwih lengkep tentang eta dina dokuméntasi:

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"

Pangajaran 3: Anggo UsePreviousValue nalika ngamutahirkeun tumpukan kalayan parameter rahasia

Nalika anjeun nyiptakeun éntitas mysql RDS, AWS ngabutuhkeun anjeun nyayogikeun MasterUsername sareng MasterUserPassword. Kusabab éta langkung saé henteu nyimpen rusiah dina kode sumber sareng kuring hoyong ngajadikeun otomatis sadayana, kuring ngalaksanakeun "mékanisme pinter" dimana sateuacan panyebaran kapercayaan bakal dicandak tina s3, sareng upami kredensial henteu kapendak, kredensial anyar dibangkitkeun sareng disimpen dina s3.

Kapercayaan ieu teras bakal disalurkeun salaku parameter kana paréntah nyiptakeun-robah-set cloudformation. Bari ékspérimén kalawan naskah, éta kajadian yén sambungan kana s3 ieu leungit, sarta "mékanisme pinter" kuring diperlakukeun salaku sinyal pikeun ngahasilkeun Kapercayaan anyar.

Mun kuring mimiti ngagunakeun Aksara ieu dina produksi jeung masalah sambungan lumangsung deui, eta bakal ngamutahirkeun tumpukan kalawan Kapercayaan anyar. Dina hal husus ieu, nanaon goréng bakal kajadian. Nanging, kuring ngantunkeun pendekatan ieu sareng mimitian nganggo anu sanés, nyayogikeun kapercayaan ngan sakali - nalika nyiptakeun tumpukan. Sarta engké, nalika tumpukan perlu ngamutahirkeun, tinimbang nangtukeun nilai rusiah tina parameter, Kuring ngan bakal make UsePreviousValue=leres:

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"

Pangajaran 4: Paké konfigurasi rollback

Tim séjén anu kuring damel sareng dianggo fungsina formasi awandisebut konfigurasi rollback. Kuring henteu acan mendakan éta sateuacanna sareng gancang sadar yén éta bakal ngajantenkeun tumpukan tumpukan kuring langkung tiis. Ayeuna kuring nganggo éta unggal waktos kuring nyebarkeun kodeu ka lambda atanapi ECS nganggo cloudformation.

Kumaha gawéna: Anjeun tangtukeun Alarm CloudWatch dina parameter --rollback-konfigurasimun anjeun nyieun changeset. Engké, sawaktos Anjeun ngaéksekusi sakumpulan parobihan, aws ngawas alarm sahenteuna sahenteuna hiji menit. Éta ngagulung deui panyebaran upami alarem robih kaayaan janten ALARM salami waktos ieu.

Di handap ieu conto excerpt template formasi awandi mana kuring nyiptakeun alarem cloudwatch, nu ngalacak métrik pamaké awan salaku jumlah kasalahan dina log awan (métrik dihasilkeun ngaliwatan MétricFilter):

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

ayeuna alarem bisa dipaké salaku rollback pemicu nalika ngajalankeun 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"

Pangajaran 5: Pastikeun Anjeun nyebarkeun versi panganyarna tina citakan

Ieu gampang pikeun nyebarkeun versi kirang-ti-panganyarna template cloudformation, tapi ngalakukeun kitu bakal ngabalukarkeun loba karuksakan. Ieu kajadian ka urang sakali: pamekar teu nyorong parobahan panganyarna tina Git sarta unknowingly deployed versi saméméhna tina tumpukan. Ieu nyababkeun downtime pikeun aplikasi anu ngagunakeun tumpukan ieu.

Hal anu saderhana sapertos nambihan cek pikeun ningali naha cabangna tos énggal sateuacan ngalakukeun éta bakal saé (asumsina git mangrupikeun alat kontrol versi anjeun):

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

Pangajaran 6: Ulah reinvent kabayang

Ieu mungkin sigana kawas deploying kalawan formasi awan - éta gampang. Anjeun ngan peryogi sakumpulan skrip bash ngalaksanakeun paréntah aws cli.

4 sababaraha taun ka pengker kuring ngamimitian nganggo skrip saderhana anu disebut paréntah aws cloudformation create-stack. Moal lami deui naskah éta euweuh basajan. Unggal palajaran diajar ngajadikeun naskah beuki loba kompleks. Ieu mah sakadar hésé, tapi ogé pinuh ku bug.

Abdi ayeuna damel di jurusan IT leutik. Pangalaman nunjukkeun yén unggal tim gaduh cara sorangan pikeun nyebarkeun tumpukan cloudformation. Tur éta goréng. Éta langkung saé upami sadayana nyandak pendekatan anu sami. Kabeneran, aya seueur alat anu sayogi pikeun ngabantosan anjeun nyebarkeun sareng ngonpigurasikeun tumpukan cloudformation.

Palajaran ieu bakal ngabantosan anjeun nyingkahan kasalahan.

sumber: www.habr.com

Tambahkeun komentar