Основываясь на ответе Сергея, я реализовал пошаговую функцию, и она прекрасно работает.
Я публикую это как продолжение, чтобы предоставить более подробную информацию о том, как я это реализовал.
1) Создал конечный автомат AWS с последовательностью действий из консоли AWS с использованием JSON DSL.
(Есть несколько постов, которые объясняют, как создавать конечные автоматы)
2) Мой конечный автомат должен запустить рабочий процесс на основе загрузки файла в определенный каталог.
3) Итак, я написал Java-приложение (может быть C # или что-нибудь), которое будет
используйте средство просмотра файлов для запуска рабочего процесса AWS.
import com.amazonaws.services.stepfunctions.AWSStepFunctions;
import com.amazonaws.services.stepfunctions.AWSStepFunctionsClientBuilder;
import com.amazonaws.services.stepfunctions.model.StartExecutionRequest;
class StepFunctionExecution {
private StartExecutionRequest startExecutionRequest = new StartExecutionRequest();
public void Start(String filePath){
final AWSStepFunctions client = AWSStepFunctionsClientBuilder
.standard()
.build();
/** Start execution */
startExecutionRequest.setStateMachineArn("MyARN");
startExecutionRequest.setName(java.util.UUID.randomUUID().toString());
String inputJson = "{\r\n \"FilePath\": \"" + filePath + "\"\r\n}";
startExecutionRequest.setInput(inputJson);
client.startExecution(startExecutionRequest);
}
}
4) Я запустил другой поток в том же Java-приложении (я также мог бы использовать отдельное Java-приложение)
, который непрерывно контролирует первое действие в функции шага AWS.
final ClientConfiguration clientConfiguration = new ClientConfiguration();
clientConfiguration.setSocketTimeout((int) TimeUnit.SECONDS.toMillis(65));
final AWSStepFunctions client = AWSStepFunctionsClientBuilder
.standard()
.withClientConfiguration(clientConfiguration)
.build();
while (true) {
GetActivityTaskResult getActivityTaskResult =
client.getActivityTask(
new GetActivityTaskRequest().withActivityArn("myArn"));
if (getActivityTaskResult.getTaskToken() != null) {
try {
// Do actual processing
client.sendTaskSuccess(
new SendTaskSuccessRequest()
.withOutput("{}")
.withTaskToken(getActivityTaskResult.getTaskToken()));
} catch (final Exception e) {
client.sendTaskFailure(
new SendTaskFailureRequest()
.withCause(e.getMessage())
.withTaskToken(getActivityTaskResult.getTaskToken()));
}
} else {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
5) Я запустил эти исполняемые файлы Java прямо внутри экземпляра AWS EC2.
Экземплярам EC2 была назначена роль IAM для доступа к ресурсам функции Step и т. Д.
Таким образом, для доступа к функциям и действиям Step не требовалось отдельных учетных данных.