I ako ahau i enei akoranga e 6 mo te mahi me te hanganga kapua mo te toenga o toku oranga.

I timata ahau ki te mahi tahi hanga kapua 4 tau ki muri. Mai i tera wa kua pakaruhia e au te maha o nga hanganga, tae noa ki nga mea kua mahia. Engari i nga wa katoa ka raru ahau i tetahi mea, ka ako au i tetahi mea hou. Na roto i tenei wheako, ka whakapuaki ahau i etahi o nga akoranga tino nui i akohia e au.

I ako ahau i enei akoranga e 6 mo te mahi me te hanganga kapua mo te toenga o toku oranga.

Akoranga 1: Whakamātauhia nga huringa i mua i te tohatoha

I ako ahau i tenei akoranga i muri tata mai i taku tiimata ki te mahi hanga kapua. Kaore au e mahara ki nga mea i pakaruhia e au i tera wa, engari ka tino mahara ahau i whakamahia e au te whakahau aws whakahōunga kapua. Ko tenei whakahau ka huri noa i te tauira kaore he whakamanatanga o nga huringa ka tukuna. Ki taku whakaaro kaore e hiahiatia he whakamaarama mo te aha me whakamatau koe i nga huringa katoa i mua i te tuku.

I muri i tenei korenga, ka huri tonu ahau te raina hiko, whakakapi i te whakahau whakahou ki te whakahau hanga-huri-huinga

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

Ina hangahia he huinga huringa, kare he paanga ki te puranga o naianei. Kaore i rite ki te whakahau whakahou, kaore te huarahi huringa e whakaohooho i te tukunga. Engari, ka hangaia he rarangi o nga huringa ka taea e koe te arotake i mua i te tuku. Ka taea e koe te tiro i nga huringa o te atanga papatohu aws. Engari ki te hiahia koe ki te whakaaunoa i nga mea katoa ka taea e koe, tirohia i roto i te 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

Ko tenei whakahau me whakaputa he putanga rite ki enei e whai ake nei:

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

Kia aro nui ki nga huringa kei hea te Mahi Whakakapi, Mukua kei hea ranei Me Whakakapi - Tika. Koinei nga huringa tino kino, ka ngaro nga korero.

Ina arotakehia nga huringa, ka taea te tuku

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"

Akoranga 2: Whakamahia te kaupapa here taapu hei aukati i te whakakapi, te tango ranei i nga rauemi mana

I etahi wa kaore e ranea te maataki noa i nga huringa. He tangata katoa tatou ka he katoa tatou. I muri tata mai i te wa i timata ai matou ki te whakamahi i nga huringa, kare i mohio taku hoa mahi i mahia he tukunga i puta he whakahounga raraunga. Kaore he mea kino i tupu na te mea he taiao whakamatautau.

Ahakoa i whakaatu a maatau tuhinga i te rarangi o nga huringa me te tono kia whakamanahia, i pekehia te huringa Whakakapi na te mea he nui rawa te rarangi o nga huringa kaore i uru ki te mata. Na i te mea he whakahou noa tenei i roto i te taiao whakamatautau, kaore i tino aro ki nga huringa.

He rauemi kaore koe e hiahia ki te whakakapi, ki te tango ranei. He ratonga mana tonu enei, penei i te tauira raraunga RDS, te roopu elasticsearch ranei, me etahi atu. He pai ki te kore a aws e whakaae ki te tuku mai mena ka hiahia te mahi ki te whakakore i taua rauemi. Waimarie, he huarahi hanga-i roto i te cloudformation hei mahi i tenei. Ka kiia tenei ko te kaupapa here taapu, a ka taea e koe te panui atu mo tera i roto tuhinga:

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"

Akoranga 3: Whakamahia te UsePreviousValue ina whakahōuhia he tāpae me nga tawhā ngaro

Ina waihangahia e koe he hinonga RDS mysql, ka hiahia a AWS ki a koe ki te whakarato i te Kaiwhakamahi Kaiwhakamahi me te MasterUserPassword. I te mea he pai ake kia kaua e pupuri i nga mea ngaro i roto i te waehere puna me taku hiahia ki te whakaaunoa i nga mea katoa, ka whakatinanahia e ahau he "whakaaro mohio" i mua i te tukunga ka whiwhihia nga tohu mai i te s3, a, ki te kore e kitea nga tohu, ka hangaia nga tohu tohu hou ka rongoa i roto i te s3.

Ko enei tohu ka tukuna hei tawhā ki te whakahau hanga-huri-whakaritenga kapua. I a koe e whakamatautau ana i te tuhinga, kua ngaro te hononga ki te s3, a ko taku "whakaaro mohio" he tohu hei whakaputa i nga tohu hou.

Mena ka timata ahau ki te whakamahi i tenei tuhinga ki te whakaputa ka pa ano te raru hononga, ka whakahouhia te puranga me nga tohu hou. I tenei keehi, kaore he mea kino e pa. Heoi, i whakarerea e ahau tenei huarahi, ka tiimata ki te whakamahi i tetahi atu, me te tuku tohu tohu kotahi anake - i te wa e hanga ana te puranga. A, i muri mai, ka hiahia te puranga ki te whakahou, hei utu mo te tohu i te uara ngaro o te tawhā, ka whakamahi noa ahau UsePreviousValue=pono:

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"

Akoranga 4: Whakamahia te whirihoranga whakamuri

Ko tetahi atu roopu i mahi tahi ahau i whakamahi i te mahi hanga kapua, ka karanga whirihoranga whakamuri. Kare ano au i kite i mua, ka mohio wawe au ka pai ake te whakamaarama i aku taapu. Inaianei ka whakamahia e au i nga wa katoa ka tukuna e au taku waehere ki te lambda, ki te ECS ranei ma te whakamahi kapua.

Me pehea te mahi: ka tohua e koe Pūoho CloudWatch i roto i te tawhā --rollback-configurationina hanga e koe he huinga huringa. I muri mai, ka mahia e koe he huinga huringa, ka aro turukihia e aws te whakaoho mo te kotahi meneti neke atu. Ka huri whakamuri te tukunga mena ka huri te whakaoho ki te ALARM i tenei wa.

Kei raro nei he tauira o te waahanga tauira hanga kapuai roto i ahau te hanga whakaoho kapua, e whai ana i te inenga kaiwhakamahi kapua ko te maha o nga hapa i roto i nga raarangi kapua (he mea hanga te ine ma te 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

I teie nei whakaoho ka taea te whakamahi hei Tuhinga o mua keu ina mahi pouaka taputapu:

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"

Akoranga 5: Me whakarite kia horahia e koe te putanga hou o te tauira

He mea ngawari ki te whakatakoto i tetahi putanga iti ake i te hou o te tauira cloudformation, engari ma te pera ka nui te kino. I pa mai tenei ki a matou i tetahi wa: kaore tetahi kaiwhakawhanake i pana i nga huringa hou mai i a Git me te kore mohio i tukuna he putanga o mua o te puranga. Na tenei ka puta te wa mo te tono i whakamahi i tenei puranga.

He mea ngawari ki te taapiri i te haki ki te kite mena kei te noho hou te peka i mua i te whakauru ki tera ka pai (mehemea ko te git to taputapu mana putanga):

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

Akoranga 6: Kaua e hanga ano te wira

Ka rite pea ki te tohatoha me hanga kapua - he ngawari. Kei te hiahia koe ki te paihere o nga tuhinga bash e whakahaere ana i nga whakahau aws cli.

4 tau ki muri ka tiimata ahau me nga tuhinga ngawari e kiia nei ko te aws cloudformation hanga-tapae whakahau. Kaore i roa kua kore e ngawari te tuhinga. Ko ia akoranga i akohia ka nui ake te uaua o te tuhinga. Ehara i te mea uaua anake, engari ki tonu i nga pepeke.

I tenei wa kei te mahi ahau i tetahi tari IT iti. Kua whakaatuhia e nga wheako kei ia roopu tana ake huarahi ki te tuku i nga puranga cloudformation. A he kino tena. He pai ake mena ka rite te huarahi o te katoa. Waimarie, he maha nga taputapu e waatea ana hei awhina i a koe ki te whakatakoto me te whirihora i nga puranga cloudformation.

Ko enei akoranga ka awhina koe ki te karo i nga hapa.

Source: will.com

Tāpiri i te kōrero