рд╣рдорд╛рд░реЗ рдкрд╛рд╕ AWS рдореЗрдВ рд╡рд┐рдВрдбреЛрдЬрд╝ рд╕рд░реНрд╡рд░ рд╣реИ рдФрд░ рдмреИрдХрдЕрдк рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдХрд╛рд░реНрдп рд╣реИред рдЖрдк рд╕реНрдиреИрдкрд╢реЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдбреЗрдЯрд╛ рдЕрдЦрдВрдбрддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реЛрдЧреАред рдореИрдВ рд╕рд╛рдкреНрддрд╛рд╣рд┐рдХ рдФрд░ рдорд╛рд╕рд┐рдХ рд╕реНрдиреИрдкрд╢реЙрдЯ рднреА рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╕реНрдиреИрдкрд╢реЙрдЯ рдореЗрдВ рдЬреАрд╡рдирдЪрдХреНрд░ рдЗрд╕рдХреА рдкреЗрд╢рдХрд╢ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдирдИ AWS рдмреИрдХрдЕрдк рд╕реЗрд╡рд╛ рдХреЛ рдпрд╣ рднреА рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрднреА рддрдХ рдкреВрд░рд╛ рд╕реНрдиреИрдкрд╢реЙрдЯ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ, рдпрд╛ рдореБрдЭреЗ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИред рдЦреИрд░, рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╕рдм рдореЗрд░реА рднрд╛рдЧреАрджрд╛рд░реА рдХреЗ рдмрд┐рдирд╛ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХреЗ, рдХрд╛рдо рдХрд░реЗред
рд╣рдореЗрдВ рдЬрд┐рд╕ рдХрд╛рд░реНрдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЙрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
- Windows Server 2008 R2 рдпрд╛ рдмрд╛рдж рдореЗрдВ AWS рдЪрд▓ рд░рд╣рд╛ рд╣реИ
- рдПрд╕рдПрд╕рдПрдо рдПрдЬреЗрдВрдЯ рд╕рдВрд╕реНрдХрд░рдг 2.2.58.0 рдпрд╛ рдмрд╛рдж рдореЗрдВ
- Windows PowerShell 3.3.48.0 рдпрд╛ рдмрд╛рдж рдХреЗ рд▓рд┐рдП AWS рдЯреВрд▓
- AWS рд╕рд┐рд╕реНрдЯрдо рдореИрдиреЗрдЬрд░
- IAM
- рдПрд╕рдПрдирдПрд╕
- рд▓реИрдореНрдмреНрдбрд╛
рдкрд╣рд▓реЗ рд╣рдореЗрдВ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рднреВрдорд┐рдХрд╛ рдЪрд╛рд╣рд┐рдПред рднреВрдорд┐рдХрд╛ рдХреЛ рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдПрд╕рдПрд╕рдПрдо рдФрд░ рдИрдмреАрдПрд╕ рд╕реНрдиреИрдкрд╢реЙрдЯ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
IAM тЖТ рдиреАрддрд┐рдпрд╛рдБ тЖТ рдиреАрддрд┐ рдмрдирд╛рдПрдБ рдкрд░ рдЬрд╛рдПрдБред
JSON рдЯреИрдм рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдбрд╛рд▓реЗрдВ
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:CreateTags", "Resource": "arn:aws:ec2:*::snapshot/*" }, { "Effect": "Allow", "Action": [ "ec2:DescribeInstances", "ec2:CreateSnapshot" ], "Resource": "*" } ] }
рд╣рдо рдирд╛рдо рдореЗрдВ рд╕рдореАрдХреНрд╖рд╛ рдиреАрддрд┐ рджрдмрд╛рддреЗ рд╣реИрдВ рд╣рдо VssSnapshotPolicy рдХреА рддрд░рд╣ рдХреБрдЫ рд▓рд┐рдЦрддреЗ рд╣реИрдВред рд╕рд╣реЗрдЬреЗрдВ
рдЕрдм рдПрдХ рднреВрдорд┐рдХрд╛ рдмрдирд╛рдПрдВред
IAM тЖТ рднреВрдорд┐рдХрд╛рдПрдБ тЖТ рднреВрдорд┐рдХрд╛ рдмрдирд╛рдПрдБ
AWS рд╕реЗрд╡рд╛ тЖТ EC2 рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рдЕрдиреБрдорддрд┐рдпрд╛рдВ рдкрд░ рдЬрд╛рдПрдВред
рдпрд╣рд╛рдВ рд╣рдо SMSS рдФрд░ рд╣рдорд╛рд░реА рдиреАрддрд┐ рдХреЗ рд▓рд┐рдП AmazonSSMManagedInstanceCore рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдкрд╣рд▓реЗ VssSnapshotPolicy рдмрдирд╛рдпрд╛ рдерд╛ред рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реЛ, рддреЛ рд╣рдорд╛рд░реА рднреВрдорд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреИрдЧ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдПрдХ рдирд╛рдо рджреЗрдВ, VssSnapshotRoleред
рддрдм рд╣рдо рдЗрд╕ рднреВрдорд┐рдХрд╛ рдХреЛ рд╡рд╛рдВрдЫрд┐рдд рд╕рд░реНрд╡рд░реЛрдВ рдХреЛ рд╕реМрдВрдкрддреЗ рд╣реИрдВред
рд╕рдм рдХреБрдЫ ssm рдЕрдм рдЗрди рд╕рд░реНрд╡рд░реЛрдВ рдХреЛ "рдкреНрд░рдмрдВрдзрд┐рдд" рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдЕрдм рд╣рдореЗрдВ рд╕рд░реНрд╡рд░ рдкрд░ AWSVssCompords рдбрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд░рди рдХрдорд╛рдВрдб рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рд░рди рдХрдорд╛рдВрдб рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, AWS-ConfigureAWSPackage рджреЗрдЦреЗрдВред
рдХрдорд╛рдВрдб рдкреИрд░рд╛рдореАрдЯрд░реНрд╕ рдореЗрдВ, рдЗрдВрд╕реНрдЯрд╛рд▓, рдирд╛рдо - AwsVssCompords, рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред
рд▓рдХреНрд╖реНрдп рдореЗрдВ, рд╣рдо рдЙрди рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдмреИрдХрдЕрдк рдХрд░реЗрдВрдЧреЗред
RUN рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред
рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо SSM рдХрдВрд╕реЛрд▓ рд╕реЗ рдмреИрдХрдЕрдк рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
рд░рди рдХрдорд╛рдВрдб рдЪреБрдиреЗрдВ, AWSEC2-CreateVssSnapshot рджреЗрдЦреЗрдВред рд╣рдо рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдХреЛ рдЯрд╛рд░рдЧреЗрдЯ рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдмрд╣рд┐рд╖реНрдХреГрдд рдмреВрдЯ рд╡реЙрд▓реНрдпреВрдо, рдХреЙрдкреА рдУрдирд▓реА рдФрд░ рдиреЛ рд░рд╛рдЗрдЯрд░реНрд╕ рдЬреИрд╕реЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред
RUN рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рд╣рдореЗрдВ рд╕реНрдиреИрдкрд╢реЙрдЯ рдмрдирд╛рдирд╛ рд╣реИред
рдмреИрдХрдЕрдк рд╕реВрдЪрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдПрдХ рдПрд╕рдПрдирдПрд╕ рд╡рд┐рд╖рдп рдмрдирд╛рдПрдВред рдФрд░ рдЗрд╕реЗ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд░реЗрдВред рдореИрдВ рдИрдореЗрд▓ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рд╣рдо рдПрдХ рдиреАрддрд┐ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реА рдмрд╛рд░реА рдореЗрдВ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "sns:Publish", "Resource": "arn:aws:sns:ap-northeast-1:Account ID:Topic Name" } ] }
рдФрд░ рдЗрд╕ рдиреАрддрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рднреВрдорд┐рдХрд╛ рдмрдирд╛рдПрдБред
рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо SSM рд░рдЦрд░рдЦрд╛рд╡ рд╡рд┐рдВрдбреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рд░рдЦрд░рдЦрд╛рд╡ рд╡рд┐рдВрдбреЛ рдмрдирд╛рдПрдБ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдирд╛рдо рднрд░реЗрдВ, рдЬреЛ рднреА рдкрд╕рдВрдж рд╣реЛ рдЙрд╕реЗ рдЕрдиреБрд╕реВрдЪреА рдореЗрдВ рднрд░реЗрдВред
рд╣рдо рдмрдирд╛рдП рдЧрдП рд░рдЦрд░рдЦрд╛рд╡ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд░рдЬрд┐рд╕реНрдЯрд░ рд░рди рдХрдорд╛рдВрдб рдХрд╛рд░реНрдп рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рднрд░реЗрдВред рдЯреИрдЧ рдореЗрдВ рдореИрдВ рдмреИрдХрдЕрдк рдХрд╛ рдкреНрд░рдХрд╛рд░ (TAG Key = SnapshotType, Value =) рд▓рд┐рдЦрддрд╛ рд╣реВрдВред рдореЗрд░реЗ рдкрд╛рд╕ рддреАрди рд╕рдВрднрд╛рд╡рд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ: рджрд┐рди, рд╕рдкреНрддрд╛рд╣, рдорд╣реАрдирд╛ рдФрд░ рддрджрдиреБрд╕рд╛рд░ рддреАрди рд░рдЦрд░рдЦрд╛рд╡ рд╡рд┐рдВрдбреЛред рд╕реЗрдЯ рдХрд░реЗрдВ рдПрд╕рдПрдирдПрд╕ рд╕реВрдЪрдирд╛рдУрдВ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ рдФрд░ рдПрд╕рдПрдирдПрд╕ рдФрд░ рд╡рд┐рд╖рдп рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реА рднреВрдорд┐рдХрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВред
рд╕рднреА рд╕реНрдиреИрдкрд╢реЙрдЯ рдЕрдм рдПрдХ рд╢реЗрдбреНрдпреВрд▓ рдкрд░ рдмрдирд╛рдП рдЬрд╛рдПрдВрдЧреЗред
рдФрд░ рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рдмрд╛рдж рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕реНрдиреИрдкрд╢реЙрдЯ рд╣реЛрдВрдЧреЗ - рдЙрдиреНрд╣реЗрдВ рд╕рд╛рдл рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдФрд░ рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ - рд▓реИрдореНрдмреНрдбрд╛ред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рднреВрдорд┐рдХрд╛ рдмрдирд╛рдПрдВ рдЬреЛ рд╕реНрдиреИрдкрд╢реЙрдЯ рдХреЛ рдкрдврд╝ рдФрд░ рд╣рдЯрд╛ рд╕рдХрддрд╛ рд╣реИред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо IAM рдореЗрдВ рдПрдХ рдиреАрддрд┐ рдмрдирд╛рддреЗ рд╣реИрдВ
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "logs:DeleteSubscriptionFilter", "ec2:DeleteSnapshot", "ec2:DescribeSnapshots", "logs:DeleteLogStream", "logs:CreateExportTask", "logs:DeleteResourcePolicy", "logs:CreateLogStream", "logs:DeleteMetricFilter", "logs:TagLogGroup", "logs:CancelExportTask", "ec2:DescribeVolumes", "logs:DeleteRetentionPolicy", "logs:DeleteLogDelivery", "logs:AssociateKmsKey", "logs:PutDestination", "logs:DisassociateKmsKey", "logs:UntagLogGroup", "logs:DeleteLogGroup", "logs:PutDestinationPolicy", "ec2:DescribeSnapshotAttribute", "logs:DeleteDestination", "logs:PutLogEvents", "logs:CreateLogGroup", "logs:PutMetricFilter", "logs:CreateLogDelivery", "logs:PutResourcePolicy", "logs:UpdateLogDelivery", "logs:PutSubscriptionFilter", "logs:PutRetentionPolicy" ], "Resource": "*" } ] }
рдФрд░ рд╣рдо рдЗрд╕ рдиреАрддрд┐ рдХреЛ рдПрдХ рдирдИ рднреВрдорд┐рдХрд╛ рдкрд░ рд▓рдЯрдХрд╛рддреЗ рд╣реИрдВред
рд▓реИрдореНрдмреНрдбрд╛ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдПрдХ рдирдпрд╛ рдЕрдЬрдЧрд░ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПрдВред
import datetime import sys import boto3 def get_volume_snapshots(client, volume_id, SnapshotType): args = { "Filters": [ { "Name": "volume-id", "Values": [volume_id] }, { "Name": "status", "Values": ["completed"] }, { "Name": "tag-key", "Values": ["SnapshotType"]}, { "Name": "tag-value", "Values": [SnapshotType]}, ], "OwnerIds": ["self"] } snapshots = [] while True: resp = client.describe_snapshots(**args) snapshots += resp.get("Snapshots", []) if "NextToken" in resp: args["NextToken"] = resp["NextToken"] else: break return snapshots def delete_snapshot(client, snapshot_id): wait_period = 5 retries = 5 while True: try: client.delete_snapshot(SnapshotId=snapshot_id) return True except Exception as ex:
рд╣рдо рдКрдкрд░ рдмрдирд╛рдИ рдЧрдИ рднреВрдорд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЯреНрд░рд┐рдЧрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдо CloudWatch рдЗрд╡реЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рд╕рднреА рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИ, рд╕реНрдиреИрдкрд╢реЙрдЯ рдХреЗ рд╕рднреА рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕реНрдиреИрдкрд╢реЙрдЯ рдЯрд╛рдЗрдк рдЯреИрдЧ рдХреЗ рд╕рд╛рде рдкреВрд░реНрдг рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЙрди рд╕рднреА рд╕реНрдиреИрдкрд╢реЙрдЯ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЕрдзрд┐рдХ рд╕реНрдиреИрдкрд╢реЙрдЯ рдЕрд╡рдзрд╛рд░рдг рд╣реИрдВред рдореЗрд░реЗ рдкрд╛рд╕ рдЕрдВрддрд┐рдо 5 рджреИрдирд┐рдХ, 3 рд╕рд╛рдкреНрддрд╛рд╣рд┐рдХ рдФрд░ 2 рдорд╛рд╕рд┐рдХ рд╕реНрдиреИрдкрд╢реЙрдЯ рд╣реИрдВред