Package: otf-addons-aws
This repository contains addons to allow integration with AWS components viaOpen Task Framework (OTF)Open Task Framework (OTF) is a Python based framework to make it easy to run predefined file transfers and scripts/commands on remote machines.These addons include several additional features:A new plugin for SSM Param Store to pull dynamic variablesA new remotehandler to push/pull files via AWS S3A new remote handler to trigger AWS Lambda functionsAWS CredentialsThis package uses boto3 to communicate with AWS.Credentials can be set via config using equivalently named variables alongside the protocol definition e.g;"protocol":{"name":"opentaskpy.addons.aws.remotehandlers.s3.S3Transfer","access_key_id":"some_key","secret_access_key":"some_secret_key","assume_role_arn":"arn:aws:iam::000000000000:role/some_role","region_name":"eu-west-1"}If the standard AWS environment variables are set, then these will be used if not set elsewhere. Otherwise, if running from AWS, then the IAM role of the machine running OTF will be used.TransfersTransfers are defined the same as a normal SSH based transfer.As part of the upload, thebucket-owner-full-controlACL flag is applied to all files. This can be disabled by settingdisableBucketOwnerControlACLtotruein theprotocoldefinitionSupported featuresPlain file watchFile watch/transfer with file size and age constraintsmove&deletepost copy actionsTouching empty files after transfer. e.g..finfiles used as completion flagsTouching empty files as an executionLimitationsNo support for log watchConfigurationJSON configs for transfers can be defined as follows:Example File Watch Only"source":{"bucket":"test-bucket","fileWatch":{"timeout":15,"directory":"src","fileRegex":".*\\.txt"},"protocol":{"name":"opentaskpy.addons.aws.remotehandlers.s3.S3Transfer"}}Example S3 Download"source":{"bucket":"some-bucket","directory":"src","fileRegex":".*\\.txt","protocol":{"name":"opentaskpy.addons.aws.remotehandlers.s3.S3Transfer"}}Example S3 Upload"destination":[{"bucket":"some-bucket","directory":"dest","protocol":{"name":"opentaskpy.addons.aws.remotehandlers.s3.S3Transfer"}}]Example S3 upload with flag files"destination":[{"bucket":"some-bucket","directory":"dest","flag":{"fullPath":"dest/some_fin.flg"}"protocol":{"name":"opentaskpy.addons.aws.remotehandlers.s3.S3Transfer"}}]ExecutionsThe Lambda remote handler allows AWS Lambda functions to be called. When provided with afunctionArnthe function will be called with no parameters. If there's a payload to pass in, use thepayloadattribute in the execution definition to specify a JSON object to pass into the function.Asynchronous vs Synchronous ExecutionLambda functions can be called with either aninvocationTypeofEvent(default if not specified) orRequestResponse.Eventis asynchronous, and tells the Lambda function to trigger, but does not check that it ran successfully. This means it's up to you to make sure that you have appropriate monitoring of your Lambda functions.RequestResponsewill block until the Lambda function either completes, or times out. Boto3 has a timeout of 60 seconds, so this cannot be used for long running functions (over 1 minute). This also causes issues when used in conjunction with batches and timeouts. Since the request blocks, the thread cannot be killed by the batch thread, meaning that it will block any further execution until 60 seconds after triggering the lambda function.Example S3 Execution touch flag file{"type":"execution","bucket":"test-bucket","key":"test_key.flg","protocol":{"name":"opentaskpy.addons.aws.remotehandlers.s3.S3Transfer"}}Example Lambda function call{"type":"execution","functionArn":"arn:aws:lambda:eu-west-1:000000000000:function:my-function","invocationType":"Event","payload":{"file-name":"some_file.txt"},"protocol":{"name":"opentaskpy.addons.aws.remotehandlers.lambda.LambdaExecution"}}