Как добавить параметр таймера для выполнения кода на github из AWS? - PullRequest
0 голосов
/ 21 мая 2018

Я создал скрипт 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.

1 Ответ

0 голосов
/ 21 мая 2018

Это круто, я не знал, что вы можете использовать SSM для непосредственного выполнения кода из github.

Если вы не были женаты на чистом SSM-решении, вы можете включить лямбду

Два варианта.

  • Использовать события Lambda и CloudWatch,Поместите свой код в Lambda и используйте Cloud Watch Events для запуска функции Lambda.
  • Используйте события Lambda и CloudWatch для вызова SSM с заданным интервалом.По сути это прокладка, которая делает удаленный вызов.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...