Я создал скрипт Python, который перемещает последний снимок из одного региона в другой.Сценарий использует учетные данные локально на моей машине, чтобы заставить перемещаться идентификаторы экземпляра EC2, но не уверен, что это сработает для приведенного ниже.
code:
import boto3
SOURCE_REGION = 'us-east-2'
DESTINATION_REGION = 'us-east-1'
# Connect to EC2 in Source region
source_client = boto3.client('ec2', region_name=SOURCE_REGION)
# Get a list of all snapshots, then sort them
snapshots = source_client.describe_snapshots(OwnerIds=['self'])
snapshots_sorted = sorted([(s['SnapshotId'], s['StartTime']) for s in snapshots['Snapshots']], key=lambda k: k[1])
latest_snapshot = snapshots_sorted[-1][0]
print ('Latest Snapshot ID is ' + latest_snapshot)
# Connect to EC2 in Destination region
destination_client = boto3.client('ec2', region_name=DESTINATION_REGION)
# Copy the snapshot
response = destination_client.copy_snapshot(
SourceSnapshotId=latest_snapshot,
SourceRegion=SOURCE_REGION,
Description='This is my copied snapshot'
)
print ('Copied Snapshot ID is ' + response['SnapshotId'])
Я нашел эту ссылку, которая говорит, что я могу запускать код python в github из AWS с помощью системного менеджера (https://docs.aws.amazon.com/systems-manager/latest/userguide/integration-remote-scripts.html#integration-github-python). Ищите заголовок «Выполнить скрипты Python»из GitHub '.
В руководстве есть следующая команда для выполнения кода в github:
{"owner":"owner_name", "repository": "repository_name", "path": "path_to_scripts_or_directory", "tokenInfo":"{{ssm-secure:SecureString_parameter_name}}" }
В любом случае я могу добавить таймер в приведенный выше код, чтобы мой скрипт на pythonработает по таймеру?
Открыто для всех предложений по удаленному запуску скрипта Python.
Заранее спасибо.
edit:
Могу ли я кормитьв ключах API через мой код, чтобы избежать настройки учетных данных в другом месте?
Edit2:
Попытка поместить код в лямбда-функцию. Сжатый AWS_Backup.py
в AWS_Backup.py.zip
.Информация об обработчике тоже изменена AWS_Backup.handler
в AWS.
Обновление кода:
from __future__ import print_function
def lambda_handler(event, context):
SOURCE_REGION = 'us-east-2'
DESTINATION_REGION = 'us-east-1'
# Connect to EC2 in Source region
source_client = boto3.client('ec2', region_name=SOURCE_REGION)
# Get a list of all snapshots, then sort them
snapshots = source_client.describe_snapshots(OwnerIds=['self'])
snapshots_sorted = sorted([(s['SnapshotId'], s['StartTime']) for s in snapshots['Snapshots']], key=lambda k: k[1])
latest_snapshot = snapshots_sorted[-1][0]
print ('Latest Snapshot ID is ' + latest_snapshot)
# Connect to EC2 in Destination region
destination_client = boto3.client('ec2', region_name=DESTINATION_REGION)
# Copy the snapshot
response = destination_client.copy_snapshot(
SourceSnapshotId=latest_snapshot,
SourceRegion=SOURCE_REGION,
Description='This is my copied snapshot'
)
print ('Copied Snapshot ID is ' + response['SnapshotId'])
Ошибка: "errorMessage": "Handler 'handler' missing on module 'AWS_Backup'"
Решение:
change the lambda handler in AWS console from 'AWS_Backup.handler' to AWS_Backup.lambda_handler. Plus some role permissions were added to give me more access to IAM role.