Nianatra ireto lesona 6 momba ny fiasana amin'ny cloudformation ireto aho nandritra ny androm-piainako.

Nanomboka niasa tamin'ny fananganana rahona 4 taona lasa izay. Nanomboka teo dia maro ireo fotodrafitrasa nopotehiko, eny fa na dia ireo efa vita aza. Saingy isaky ny manakorontana zavatra aho dia nianatra zava-baovao. Amin'ny alalan'ity traikefa ity dia hizara ny sasany amin'ireo lesona manan-danja indrindra nianarako aho.

Nianatra ireto lesona 6 momba ny fiasana amin'ny cloudformation ireto aho nandritra ny androm-piainako.

Lesona 1: Andramo ny fanovana alohan'ny hametrahana azy ireo

Nianatra ity lesona ity aho taoriana kelin'ny nanombohako niasa fananganana rahona. Tsy tadidiko hoe inona marina no tapaka tamin'izany, fa tena tadidiko fa nampiasa ilay baiko aho aws cloudformation fanavaozana. Ity baiko ity dia mamoaka fotsiny ny mΓ΄dely tsy misy fanamarinana ny fanovana izay hapetraka. Heveriko fa tsy ilaina ny fanazavana momba ny antony tokony hizahanao ny fanovana rehetra alohan'ny hametrahana azy ireo.

Taorian'io tsy fahombiazana io dia niova avy hatrany aho pifamoivoizana, manolo ny baiko fanavaozana amin'ny baiko mamorona-miova-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"

Rehefa vita ny fanovana dia tsy misy fiantraikany amin'ny stack efa misy izany. Tsy toy ny baiko fanavaozana, ny fomba fanovana dia tsy manetsika ny tena fametrahana. Fa kosa, mamorona lisitr'ireo fanovana azonao jerena alohan'ny fametrahana azy. Azonao jerena ny fiovana ao amin'ny interface console aws. Fa raha tianao ny manao automatique izay rehetra azonao atao dia jereo ao amin'ny CLI izy ireo:

# 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

Ity baiko ity dia tokony hamoaka vokatra mitovy amin'ireto manaraka ireto:

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

Tandremo manokana ny fiovana misy ny Action Soloy, Fafao na aiza Ilaina ny fanoloana - Marina. Ireo no fiovana mampidi-doza indrindra ary matetika mitarika fahaverezan'ny vaovao.

Rehefa nojerena ireo fanovana dia azo apetraka izy ireo

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"

Lesona 2: Ampiasao ny politikan'ny stack mba hisorohana ny fanoloana na hanesorana ny loharanon'ny fanjakana

Indraindray dia tsy ampy ny mijery fotsiny ireo fiovana. Olombelona daholo isika ary samy manao fahadisoana. Fotoana fohy taorian'ny nanombohanay nampiasa changesets, tsy nahafantatra ny mpiara-miasa tamiko dia nanao fanapariahana izay niteraka fanavaozana ny angona. Tsy nisy zava-dratsy nitranga satria tontolo fitsapana.

Na dia nampiseho lisitr'ireo fanovana aza ny sora-tananay ary nangataka fanamafisana, dia natsipin'ny fanovana ny Solosaina satria lehibe loatra ny lisitry ny fanovana ka tsy mifanaraka amin'ny efijery. Ary satria fanavaozam-baovao mahazatra amin'ny tontolon'ny fitsapana izany, dia tsy dia niraharaha loatra ny fanovana.

Misy loharano izay tsy tianao hosoloina na esorina mihitsy. Serivisy feno fanjakana ireto, toy ny ohatra angon-drakitra RDS na cluster elasticsearch, sns. Tsara raha mandΓ  ny fametrahana ho azy ny aws raha toa ka mitaky famafana loharano toy izany ny asa atao. Soa ihany fa manana fomba namboarina hanaovana izany ny cloudformation. Ity dia antsoina hoe politikan'ny stack, ary afaka mamaky bebe kokoa momba izany ianao tahirin-kevitra:

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"

Lesona 3: Ampiasao ny UsePreviousValue rehefa manavao ny stack misy masontsivana miafina

Rehefa mamorona RDS mysql entity ianao, AWS dia mitaky anao hanome MasterUsername sy MasterUserPassword. Koa satria tsara kokoa ny tsy mitahiry tsiambaratelo ao amin'ny kaody loharano ary te-hanao automatique tanteraka ny zava-drehetra aho, dia nametraka "mekanisma marani-tsaina" aho izay alohan'ny fametrahana ny fahazoan-dΓ lana dia azo avy amin'ny s3, ary raha tsy hita ny fahazoan-dΓ lana dia misy ny fahazoan-dΓ lana vaovao ary voatahiry ao amin'ny s3.

Ireo mari-pamantarana ireo dia halefa ho toy ny masontsivana amin'ny baiko cloudformation create-change-set. Teo am-panandramana ilay script dia nitranga fa very ny fifandraisana amin'ny s3, ary ny "mekanisma marani-tsaina" ahy dia nandray izany ho toy ny famantarana hamokatra fahazoan-dΓ lana vaovao.

Raha nanomboka nampiasa an'io script io aho tamin'ny famokarana ary nitranga indray ny olana momba ny fifandraisana, dia hanavao ny stack miaraka amin'ny fahazoan-dΓ lana vaovao. Amin'ity tranga manokana ity dia tsy hisy zavatra ratsy hitranga. Na izany aza, nandao ity fomba ity aho ary nanomboka nampiasa iray hafa, nanome fahazoan-dΓ lana indray mandeha monja - rehefa mamorona ny stack. Ary taty aoriana, rehefa mila fanavaozana ny stack, fa tsy mamaritra ny sanda miafina amin'ny parameter, dia hampiasa fotsiny aho UsePreviousValue=marina:

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"

Lesona 4: MampiasΓ  fikandrana miverina

Ekipa iray hafa niara-niasa tamiko no nampiasa ilay asa fananganana rahona, antsoina fanamboarana famerenana. Mbola tsy nahita an'io aho taloha ary tsapako haingana fa vao mainka hampangatsiaka kokoa ny fametrahana ny stacks. Ankehitriny dia mampiasa azy io aho isaky ny mametraka ny code-ko amin'ny lambda na ECS mampiasa cloudformation.

Ny fomba fiasan'izy io: ianao no mamaritra CloudWatch fanairana arn v parameter --rollback-configurationrehefa mamorona changeset ianao. Aorian'izay, rehefa manatanteraka andiana fanovana ianao, aws dia manara-maso ny fanairana mandritra ny iray minitra farafahakeliny. Mamerina ny fandefasana izany raha miova ny toetran'ny fanairana ho ALARM mandritra io fotoana io.

Ity ambany ity ny ohatra iray amin'ny ampahany amin'ny mΓ΄dely fananganana rahonaizay nohariako fanairana cloudwatch, izay manara-maso metrikan'ny mpampiasa rahona ho isan'ny lesoka ao amin'ny diarin'ny rahona (ny metrika dia avoaka amin'ny 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

amin'izao fotoana izao fanairana azo ampiasaina ho rollback trigger rehefa manatanteraka boaty fitaovana:

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"

Lesona 5: Ataovy azo antoka fa mametraka ny kinova farany amin'ny mΓ΄dely ianao

Mora ny mametraka dikan-teny kely kokoa amin'ny maodely cloudformation, saingy hiteraka fahasimbana be ny fanaovana izany. Nitranga taminay indray mandeha izany: tsy nanosika ny fanovana farany avy amin'ny Git ny mpamorona iray ary tsy nahafantatra ny dikan-teny teo aloha. Niteraka fiatoana ho an'ny fampiharana nampiasa an'io stack io izany.

Zavatra tsotra toy ny manampy taratasim-panamarinana hijerena raha misy ny sampana alohan'ny hanolorany azy dia mety (mihevitra fa ny git no fitaovana fanaraha-maso ny dikan-nao):

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

Lesona 6: Aza amboary ny kodiarana

Mety ho toa miparitaka amin'ny fananganana rahona - mora izany. Mila andian-tsoratra bash fotsiny ianao manatanteraka baiko aws cli.

4 taona lasa izay dia nanomboka tamin'ny script tsotra antsoina hoe aws cloudformation create-stack command. Vetivety dia tsy tsotra intsony ilay script. Ny lesona tsirairay nianarana dia nahatonga ny script ho sarotra kokoa. Tsy sarotra ihany izany, fa feno bibikely koa.

Miasa ao amin'ny departemanta IT kely aho amin'izao fotoana izao. Nasehon'ny traikefa fa ny ekipa tsirairay dia samy manana ny fombany amin'ny fametrahana ireo stacks cloudformation. Ary ratsy izany. Tsara kokoa raha mitovy fomba fijery ny rehetra. Soa ihany fa misy fitaovana maro azo alaina hanampy anao amin'ny fametrahana sy hanitsiana ireo stacks cloudformation.

Ireo lesona ireo dia hanampy anao hisoroka ny fahadisoana.

Source: www.habr.com

Add a comment