áá»áœááºáá±á¬áºáá²á· á¡áá¯ááºá áá¯ááºáááºá cloudformation ááœááºáá²á·áá±á¬ 4 ááŸá áºá á¡á²áá®ááááºážá áá»áœááºáá±á¬áºáᬠá¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶ááœá± á¡áá»á¬ážááŒá®ážááᯠááŒáá¯áá»ááºáá²á·ááŒá®áž áá¯ááºáá¯ááºááŒá®ážáá¬ážááœá±áá±á¬áẠááŸááá²á·áá«áááºá áá«áá±ááá·áº áá áºáá¯áᯠááŸá¯ááºááá¯ááºáž á¡áá áºááœá± áááºáá°áá²á·ááááºá áá®á¡ááœá±á·á¡ááŒá¯á¶ááá±áááá·áº áá»áœááºáá±á¬áºáá±á·áá¬áá²á·ááá²á· á¡áá±ážááŒá®ážáá¯á¶ážáááºáááºážá á¬á¡áá»áá¯á·ááᯠáá»áŸáá±áá±ážááœá¬ážááŸá¬áá«á
áááºáááºážá ᬠ1- áááºážááá¯á·ááᯠá¡áá¯á¶ážáááŒá¯áá® ááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážááᯠá ááºážáááºáá«á
á¡áá¯ááºá áá¯ááºááŒá®áž ááááºáááŒá¬áááºááŸá¬áá² áá®áááºáááºážá á¬ááᯠáááºáá°áá²á·áááºá cloudformation. á¡á²áá®áá¯ááºážá áá»ááºááœá¬ážáá¬ááᯠá¡ááá¡áá» áááŸááºáááá±á¬á·áá±ááá·áº á¡á²áá® command ááᯠáá¯á¶ážáá²á·áᬠáá±áá»á¬áá«áááºá aws cloudformation á¡ááºááááº. ဠcommand ááẠáááºááœá±á·á¡áá¯á¶ážáá»ááá·áº á¡ááŒá±á¬ááºážá¡áá²áá»á¬ážááᯠá¡áááºááŒá¯ááŒááºážáááŸááá² ááá°áá¬áá¯á¶á á¶ááᯠááá¯ážááá¯ážááŸááºážááŸááºáž áá¯ááºáá±ážáá«áááºá áááºážááá¯á·ááᯠá¡áá¯á¶ážáááŒá¯áá® á¡áááºááŒá±á¬áá·áº ááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážá¡á¬ážáá¯á¶ážááᯠá ááºážáááºááá·áºáááºá¡ááœáẠááŸááºážáááºážáá»ááºáá áºá á¯á¶áá áºáᬠááá¯á¡ááºááẠááááºáá«á
áá®áá»ááŸá¯á¶ážááŒá®ážáá±á¬ááºááŸá¬ áá»áœááºáá±á¬áº áá»ááºáá»ááºážááŒá±á¬ááºážáá²ááœá¬ážáááºá ááŒááºá·áá»ááºááá¯ááºááá¯ááºážupdate command ááᯠcommand ááŒáá·áº á¡á á¬ážááá¯ážááŒááºážá áááºáá®áž-ááŒá±á¬ááºážáá²ááŸá¯-á¡á á¯á¶
# 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"
ááŒá±á¬ááºážáá²ááŸá¯á¡á
á¯á¶ááᯠáááºáá®ážááŒá®ážáááºááŸáá·áºá áááºážááẠááŸáááŒá®ážáá¬áž stack á¡áá±á«áº áááºáá±á¬ááºááŸá¯áááŸááá«á á¡ááºááááºá¡áááá·áºááŸáá·áº ááá°áá²á ááŒá±á¬ááºážáá²ááŒááºážáááºážáááºážááẠá¡ááŸááºáááẠá¡áá¯á¶ážáá»ááŸá¯ááᯠáááŒá
áºáá±á«áºá
á±áá«á áááºážá¡á
á¬ážá áááºážááẠá¡áá¯á¶ážáááŒá¯áá® áááºááŒááºáááºáá¯á¶ážáááºááá¯ááºááá·áº á¡ááŒá±á¬ááºážá¡áá²áá»á¬ážá
á¬áááºážááᯠáááºáá®ážáá±ážáááºá aws console interface ááœáẠááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážááᯠáááºááŒáá·áºááŸá¯ááá¯ááºáá«áááºá ááá¯á·áá±á¬áº áááºáááºááá¯ááºááá»áŸ á¡ááá¯á¡áá»á±á¬ááºáá¯ááºááá¯áá«áá áááºážááá¯á·ááᯠ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
ဠcommand áááºá¡á±á¬ááºáá«ááŸáá·áºáááºáá°áá±á¬ output ááá¯áá¯ááºáá¯ááºááá·áºáááº-
--------------------------------------------------------------------
| DescribeChangeSet |
+---------+--------------------+----------------------+------------+
| Action | ReplacementNeeded | Resource | ResourceId |
+---------+--------------------+----------------------+------------+
| Modify | True | AWS::ECS::Cluster | MyCluster |
| Replace| True | AWS::RDS::DBInstance| MyDB |
| Add | None | AWS::SNS::Topic | MyTopic |
+---------+--------------------+----------------------+------------+
áá¯ááºáá±á¬ááºáá»ááºááŸááá±ááá·áº á¡ááŒá±á¬ááºážá¡áá²áá»á¬ážááᯠá¡áá°ážááá¯ááŒá¯áá«á á¡á á¬ážááá¯ážáááº, áá»ááºáá áºáá« áá«ááŸááá¯áẠáááºááŸá¬áá²á á¡á á¬ážááá¯ážááẠááá¯á¡ááºááẠ- ááŸááºáá«áááºá. á€á¡áá¬áá»á¬ážááẠá¡áá¹ááá¬ááºá¡ááŸááá¯á¶áž á¡ááŒá±á¬ááºážá¡áá²áá»á¬ážááŒá áºááŒá®áž á¡áá»á¬ážá¡á¬ážááŒáá·áº ááááºážá¡áá»ááºá¡ááẠáá¯á¶ážááŸá¯á¶ážááŒááºážáá®ááá¯á· áŠážáááºááœá¬ážááŒáááºá
á¡ááŒá±á¬ááºážá¡áá²áá»á¬ážááᯠááŒááºáááºáá¯á¶ážáááºááŒá®ážáááºááŸáá·áº áááºážááá¯á·ááᯠá¡áá¯á¶ážáá»ááá¯ááºáááºá
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"
áááºáááºážá ᬠ2- ááŒááºáááºá¡ááá¯áẠá¡áááºážá¡ááŒá áºáá»á¬ážááᯠá¡á á¬ážááá¯ážááŒááºáž ááá¯á·ááá¯áẠáááºááŸá¬ážááŒááºážá០áá¬ááœááºááẠstack policy ááᯠá¡áá¯á¶ážááŒá¯áá«á
áá áºáá«ááá¶ááŸá¬ á¡ááŒá±á¬ááºážá¡áá²ááœá±ááᯠááŒáá·áºáá¯á¶áá²á· ááá¯á¶áá±á¬ááºáá«áá°ážá áá«ááá¯á·á¡á¬ážáá¯á¶ážáᬠáá°áá¬ážááœá±ááŒá áºááŒá®áž áá«ááá¯á·á¡á¬ážáá¯á¶ážáᬠá¡ááŸá¬ážááœá±áá¯ááºááŒáááºá á¡ááŒá±á¬ááºážá¡áá²áá»á¬ážááᯠá áááºá¡áá¯á¶ážááŒá¯ááŒá®ážáá±á¬áẠáááŒá¬áá®ááœááºá áá»áœááºá¯ááºáá¡áááºážáá±á¬áºááẠáá±áá¬áá±á·á áºá¡ááºááááºááᯠááŒá áºáá±á«áºá á±ááá·áº ááŒáá·áºáá»ááºááŸá¯áá áºáá¯ááᯠáááááá¯ááºáá² áá¯ááºáá±á¬ááºáá²á·áááºá á ááºážáááºáá±áá²á· áááºáááºážáá»ááºááŒá±á¬áá·áº ááá¯ážááá¯ážááœá¬ážááœá¬áž áááŒá áºáá²á·áá«áá°ážá
áá»áœááºá¯ááºááá¯á·á script áá»á¬ážááẠá¡ááŒá±á¬ááºážá¡áá²áá»á¬ážá á¬áááºážááá¯ááŒáááŒá®áž á¡áááºááŒá¯áá»ááºáá±á¬ááºážáá±á¬áºáááºážá á¡ááŒá±á¬ááºážá¡áá²áá»á¬ážá á¬áááºážááẠáá»ááºááŸá¬ááŒááºáá±á«áºááœáẠá¡á¶ááááºááá¯ááºáá±á¬ááºá¡á±á¬ááºáá»á¬ážááŒá¬ážáá±á¬ááŒá±á¬áá·áº á¡á á¬ážááá¯ážááŒá±á¬ááºážáá²ááŸá¯ááᯠáá»á±á¬áºááœá¬ážáá«áááºá áááºážááẠá ááºážáááºááŸá¯áááºáááºážáá»ááºááœáẠáá¯á¶ááŸááºááœááºážáá¶ááŸá¯áá áºáá¯ááŒá áºáá±á¬ááŒá±á¬áá·áº á¡ááŒá±á¬ááºážá¡áá²áá»á¬ážááᯠá¡á¬áá¯á¶á áá¯ááºááŸá¯ááááºáááŸááá²á·áá«á
áááºáááºáá±á¬á·á០á¡á
á¬ážááá¯ážááŒááºáž ááá¯á·ááá¯áẠááááºááŸá¬ážááá¯áá±á¬ á¡áááºážá¡ááŒá
áºáá»á¬áž ááŸááá«áááºá áááºážááá¯á·ááẠRDS áá±áá¬áá±á·á
áºá¥ááá¬áá
áºáᯠááá¯á·ááá¯áẠelasticsearch á¡á
á¯á¡áá±ážáá
áºáá¯áá²á·ááá¯á·áá±á¬ ááá¯ááºáá¶ááá¯ááºáááºáá±á¬ááºááŸá¯áá»á¬ážááŒá
áºáááºá áá¯ááºáá±á¬ááºáá»ááºááá¯áá¯ááºáá±á¬ááºáá±áá«á ááá¯ááá¯á·áá±á¬á¡áááºážá¡ááŒá
áºááá¯áá»ááºáá
áºáááºááá¯á¡ááºáá«á aws ááẠá¡áá¯á¶ážáá»ááŸá¯ááᯠá¡ááá¯á¡áá»á±á¬ááºááŒááºážááá¯áá«á áá±á¬ááºážáá«áááºá áá¶áá±á¬ááºážá
áœá¬ááŒáá·áºá cloudformation ááœáẠáááºážááá¯áá¯ááºáá±á¬ááºááẠbuilt-in áááºážáááºážááŸááááºá áááºážááᯠstack policy áá¯áá±á«áºááŒá®áž áááºážá¡ááŒá±á¬ááºážááᯠááá¯ááá¯áááºááŸá¯ááá¯ááºáá«áááºá
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"
áááºáááºážá ᬠá
RDS mysql entity áá áºáá¯ááᯠáááºáá®ážáá±á¬á¡áá«á AWS ááẠááá·áºá¡á¬áž MasterUsername ááŸáá·áº MasterUserPassword ááᯠáá±ážáá±á¬ááºááẠááá¯á¡ááºáá«áááºá á¡áááºážá¡ááŒá áºáá¯ááºááœáẠáá»áŸáá¯á·ááŸááºáá»ááºáá»á¬ážááᯠááááºážáááºážááá¬ážááŒááºážá ááá¯áá±á¬ááºážááŒá®áž á¡áá¬áá¬ááá¯ááºážááᯠá¡ááá¯á¡áá»á±á¬ááºááŒááºáá¯ááºááá¯áá±á¬ááŒá±á¬áá·áºá á¡áá±á¬ááºá¡áá¬ážáá»á¬ážááᯠs3 áá¶á០ááá°á¡áá¯á¶ážááŒá¯ááá¯ááºááá·áº "á áááºááá¹ááá¬áž" ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáá²á·ááŒá®áž á¡áá±á¬ááºá¡áá¬ážáá»á¬ážááᯠáááœá±á·áá«á á¡áá±á¬ááºá¡áá¬ážá¡áá áºáá»á¬ážááᯠáá¯ááºáá±ážáááºááŒá áºááŒá®ážá s3 ááœááºááááºážáááºážáá¬ážáááºá
ááá¯á·áá±á¬áẠá€á¡áá±á¬ááºá¡áá¬ážáá»á¬ážááᯠcloudformation áááºáá®áž-ááŒá±á¬ááºážáá²-áááºááŸááºá¡áááá·áºááá¯á· ááá·áºáááºáá»ááºáá»á¬ážá¡ááŒá Ạáá±ážááá¯á·áá«áááºá áá¬ááºááœáŸááºážááᯠá ááºážáááºáá±á ááºá s3 ááá¯á· áá»áááºáááºááŸá¯ áá»á±á¬ááºáá¯á¶ážááœá¬ážáá²á·ááŒá®áž áá»áœááºá¯ááºá "á áááºááá¹ááá¬áž" ááẠá¡áá±á¬ááºá¡áá¬ážá¡áá áºáá»á¬ážáá¯ááºáá±ážááẠá¡áá»ááºááŒááŸá¯áá áºáá¯á¡ááŒá ẠááŸááºáá°áá¬ážáááºá
áá¯ááºáá¯ááºáá±ážááœáẠá€áá¬ááºááœáŸááºážááᯠá áááºá¡áá¯á¶ážááŒá¯ááŒá®áž áá»áááºáááºááŸá¯ááŒá¿áᬠáááºáá¶ááŒá áºááœá¬ážáá«áá áááºážááẠá¡áá±á¬ááºá¡áá¬ážá¡áá áºáá»á¬ážááŒáá·áº stack ááᯠá¡ááºááááºáá¯ááºáááºááŒá áºáááºá á€ááá á¹á ááœááºá áááºááá·áºá¡áá¬áá»áŸááá¯ážááœá¬ážáááºááá¯ááºáá«á ááá¯á·áá±á¬áºáááºážá á€áá»ááºážáááºááŸá¯ááᯠáá«á áœáá·áºááœáŸááºáá²á·ááŒá®áž stack ááá¯áááºáá®ážáá±á¬á¡áá«ááœáẠáá áºááŒáááºáá¬á¡áá±á¬ááºá¡áá¬ážáá»á¬ážáá±ážáᬠá¡ááŒá¬ážáá áºáá¯ááᯠá áááºá¡áá¯á¶ážááŒá¯áá²á·áááºá áá±á¬ááºááá¯ááºážááœááºá stack ááẠá¡ááºááááºáá¯ááºááẠááá¯á¡ááºáá±á¬á¡áá«á parameter á áá»áŸáá¯á·ááŸááºáááºááá¯ážááᯠáááºááŸááºááá·áºá¡á á¬ážá áá»áœááºáá±á¬áº ááá¯ážááá¯ážááŸááºážááŸááºážáá² áá¯á¶ážáá«áááºá á¡áá¯á¶ážááŒá¯ááŸá¯PreviousValue=true:
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"
áááºáááºážá ᬠ4- rollback configuration ááá¯áá¯á¶ážáá«á
áá»áœááºáá±á¬áºáá²á·ááœá²áá¯ááºáá²á·áá²á· á¡ááŒá¬ážá¡ááœá²á·áá áºááœá²á·á áá¯ááºáá±á¬ááºáá»ááºááᯠá¡áá¯á¶ážááŒá¯áá²á·áá«áááºá cloudformation, áá±á«áºááẠrollback ááœá²á·á ááºážááŸá¯. á¡áááºá á¡á²áá«ááᯠáááœá±á·áááá±ážáá²á á¡á²áá«á áá«á·áá²á· stacks ááœá±ááᯠááá¯á¡á±ážá á±áááºááá¯á· ááŒááºááŒááºááá±á¬áá±á«ááºáá²á·áááºá ááᯠáá»áœááºá¯ááºááẠáá»áœááºá¯ááºááá¯ááºááᯠlambda ááá¯á·ááá¯áẠECS ááá¯á· cloudformation ááᯠá¡áá¯á¶ážááŒá¯á á¡áá¯á¶ážááŒá¯ááá·áºá¡áá«ááá¯ááºáž áááºážááᯠá¡áá¯á¶ážááŒá¯áá«áááºá
áááºááá¯á¡áá¯ááºáá¯ááºááá²- áááºáááºááŸááºáá«á CloudWatch ááŸáá¯ážáá±á¬áºáᶠparameter ááœáẠ--rollback-configurationáááºááŒá±á¬ááºážáá²ááŸá¯á¡á á¯á¶ááá¯áááºáá®ážáá±á¬á¡áá«á áá±á¬ááºááá¯ááºážááœááºá áááºááẠá¡ááŒá±á¬ááºážá¡áá²á¡á á¯áá áºáá¯á¡á¬áž áá¯ááºáá±á¬ááºáá±á¬á¡áá«á aws ááẠááŸáá¯ážá ááºááᯠá¡áááºážáá¯á¶áž áá áºáááá áºááŒá¬ á á±á¬áá·áºááŒáá·áºáááºá á€á¡áá»áááºá¡áá±á¬á¡ááœááºáž ááŸáá¯ážá ááºá¡ááŒá±á¡áá±ááá¯á· ALARM ááá¯á· ááŒá±á¬ááºážáá²áá«á áááºážááẠááŒáá·áºáá»ááºááŸá¯ááᯠáá±á¬ááºááŒááºáá¯ááºá á±áááºá
á¡á±á¬ááºááœáẠááá°áá¬áá¯á¶á ᶠááá°áᬠáá±á¬ááºáá¯ááºáá»áẠááŒá áºáá«áááºá cloudformationáá«áááºáá®ážáá±á¬á¡áᬠcloudwatch ááŸáá¯ážá ááºcloud ááŸááºáááºážáá»á¬ážááœáẠá¡ááŸá¬ážá¡ááœááºážá¡áá±á¡ááœááºá¡ááŒá Ạcloud á¡áá¯á¶ážááŒá¯áá°áááºááá áºááᯠááŒá±áá¬áá¶ááẠ(áááºááá áºááᯠáá¯ááºáá±ážááẠ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
á¡áá¯á¡áá»áááºááŸá¬ ááŸáá¯ážáᶠá¡ááŒá áºá¡áá¯á¶ážááŒá¯ááá¯ááºáá«áááºá áá±á¬ááºááŒááºááááºá·ááẠ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"
áááºáááºážá ᬠ5- ááá°áá¬áá¯á¶á á¶á áá±á¬ááºáá¯á¶ážáá¬ážááŸááºážááᯠáááºá¡áá¯á¶ážááŒá¯ááŒá±á¬ááºáž áá±áá»á¬áá«á á±á
cloudformation template á áá±á¬ááºáá¯á¶ážááœááºáá¬ážááŸááºážááᯠá¡áá¯á¶ážááŒá¯ááẠááœááºáá°áá±á¬áºáááºáž ááá¯ááá¯á·ááŒá¯áá¯ááºáá«á áá»ááºá á®ážáá¯á¶ážááŸá¯á¶ážááŸá¯áá»á¬ážá áœá¬ ááŒá áºá á±áá«áááºá á€á¡áá¬ááẠáá»áœááºá¯ááºááá¯á·á¡ááœáẠáá áºááŒáááºááŒá áºáá²á·áááº- áá±á¬á·ááºáá²á¡ááºáá»ááºáá®áá¬áá áºáŠážááẠGit á០áá±á¬ááºáá¯á¶ážááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážááᯠáááœááºážááŸááºáá² stack á ááááºáá¬ážááŸááºážááᯠáááááá¯ááºáá² á¡áá¯á¶ážááŒá¯áá²á·áááºá áááºážááŒá±á¬áá·áº ဠstack ááá¯á¡áá¯á¶ážááŒá¯ááá·áº á¡ááá®áá±ážááŸááºážá¡ááœáẠáááºááá·áºááœá¬ážá á±áááºá
áá¬áááœá²ááẠá¡ááºááááºááŒá áºááŒááºáž ááŸáá áááŸá á á áºáá±ážááẠáá»ááºáááºááŸááºááᯠáá±á«ááºážááá·áºááŒááºážáá²á·ááá¯á· ááá¯ážááŸááºážááẠ(git ááẠáááºá áá¬ážááŸááºáž ááááºážáá»á¯ááºááŸá¯ áááááá¬áᯠáá°ááááº)á
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
áááºáááºážá ᬠ6- áá®ážááᯠááŒááºáááºááá®ááœááºáá«ááŸáá·áº
ááŒáá·áº áááºááŒáá·áºáá¬ážáá¯á¶ááááºá cloudformation - ááœááºáá«áááºá Aws cli commands ááœá±ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáá²á· bash script ááœá± á¡áá»á¬ážááŒá®ážááá¯áá«áááºá
ááœááºáá²á·áá±á¬ 4 ááŸá áºá áá»áœááºá¯ááºááẠaws cloudformation create-stack command áá¯áá±á«áºáá±á¬ ááá¯ážááŸááºážáá±á¬ script áá»á¬ážááŒáá·áº á áááºáá²á·áááºá áááŒá¬áááºááŸá¬ áá¬ááºááœáŸááºážá áááá¯ážááŸááºážáá±á¬á·áá°ážá áááºáááºážá á¬áá áºáá¯á á®ááẠáá¬ááºááœáŸááºážááᯠááá¯ááá¯ááŸá¯ááºááœá±ážá á±áááºá áá«áᬠáááºáá²áá¯á¶áá¬áá ááá¯ážáá±á¬ááºááœá±áá²á· ááŒáá·áºááŸááºáá±áá²á·áá«áááºá
áá»áœááºáá±á¬áº á¡áᯠIT áá¬ááá±ážáá áºáá¯ááŸá¬ áá¯ááºáá±áá«áááºá á¡ááœá²á·áá áºááœá²á·á á®ááœáẠcloudformation stacks áá»á¬ážááᯠá¡áá¯á¶ážáá»ááẠááá¯ááºááá¯ááºáááºážáááºážááŸáááŒá±á¬ááºáž á¡ááœá±á·á¡ááŒá¯á¶á ááŒááá²á·áááºá ááá¯ážáááºá áá°ááá¯ááºážá áá°áá®áá²á· áá»ááºážáááºááŸá¯áá»áá¯ážááᯠáá¶áá°ááẠááá¯áá±á¬ááºážáá«áááºá áá¶áá±á¬ááºážá áœá¬ááŒáá·áºá ááá·áºá¡á¬áž cloudformation stacks áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯áááºááŸáá·áº á á®á ááºáááºááŸááºáá¬ááœáẠáá°áá®ááẠáááááá¬áá»á¬ážá áœá¬ááŸááááºá
áá®áááºáááºážá
á¬ááœá±á á¡ááŸá¬ážááœá±ááᯠááŸá±á¬ááºááá¯á· áá°áá®áá±ážáá«áááá·áºáááºá
source: www.habr.com