使用 Apache Oozie 作为 AWS SCT 的源 - AWS Schema Conversion Tool

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Apache Oozie 作为 AWS SCT 的源

您可使用 AWS SCT 命令行界面(CLI)将 Apache Oozie 工作流程转换为 AWS Step Functions。将 Apache Hadoop 工作负载迁移到 Amazon EMR 后,您可以使用 AWS Cloud 中的本地服务编排任务。有关更多信息,请参阅使用 Apache Hadoop 作为源

AWS SCT 将 Oozie 工作流程转换为 AWS Step Functions,并使用 AWS Lambda 模拟 AWS Step Functions 不支持的功能。此外,AWS SCT 还可以将 Oozie 作业属性转换为 AWS Systems Manager。

要转换 Apache Oozie 工作流程,请确保使用 AWS SCT 版本 1.0.671 或更高版本。另外,请熟悉 AWS SCT 的命令行界面。有关更多信息,请参阅AWS SCT CLI 参考

使用 Apache Oozie 为源的先决条件

使用 CLI AWS SCT 连接到 Apache Oozie 需要满足以下先决条件。

  • 创建 Amazon S3 存储桶以存储状态机的定义。您可以使用这些定义配置状态机。有关更多信息,请参阅《Amazon S3 用户指南》中的创建存储桶

  • 使用 AmazonS3FullAccess 策略创建 AWS Identity and Access Management (IAM) 角色。AWS SCT 使用此 IAM 角色访问 Amazon S3 存储桶。

  • 记下您的 AWS 私有密钥和 AWS 秘密访问密钥。有关 AWS 访问密钥的更多信息,请参阅《IAM 用户指南》中的管理访问密钥

  • 在全局应用程序设置中将 AWS 凭证和有关 Amazon S3 存储桶的信息存储到 AWS 服务配置文件中。然后,AWS SCT 使用此 AWS 服务配置文件处理 AWS 资源。有关更多信息,请参阅将 AWS 服务配置文件存储在 AWS SCT 中

要使用源代码 Apache Oozie 工作流程,AWS SCT 需要源文件的特定结构。每个应用程序文件夹都必须包含 job.properties 文件。此文件包含任务属性的键值对。此外,每个应用程序文件夹都必须包含 workflow.xml 文件。此文件描述了工作流程的操作节点和控制流节点。

连接到作为源的 Apache Oozie

按照以下过程连接到 Apache Oozie 源文件。

在 AWS SCT CLI 中连接到 Apache Oozie
  1. 创建新的 AWS SCT CLI 脚本或编辑现有场景模板。例如,您可以下载和编辑 OozieConversionTemplate.scts 模板。有关更多信息,请参阅获取 CLI 场景

  2. 配置 AWS SCT 应用程序设置。

    以下代码示例保存了应用程序设置并允许在项目中存储密码。您可以在其他项目中使用这些保存的设置。

    SetGlobalSettings -save: 'true' -settings: '{ "store_password": "true" }' /
  3. 创建新 AWS SCT 项目

    以下代码示例在 c:\sct 文件夹中创建 oozie 项目。

    CreateProject -name: 'oozie' -directory: 'c:\sct' /
  4. 使用 AddSource 命令将包含源 Apache Oozie 文件的文件夹添加到项目中。确保使用 vendor 参数的 APACHE_OOZIE 值。此外,还要提供以下必需参数的值: namemappingsFolder

    以下代码示例将作为源的 Apache Oozie 添加到 AWS SCT 项目中。此示例创建了一个名为 OOZIE 的源对象。使用此对象名称添加映射规则。运行此代码示例后,AWS SCT 使用 c:\oozie 文件夹将源文件加载到项目中。

    AddSource -name: 'OOZIE' -vendor: 'APACHE_OOZIE' -mappingsFolder: 'c:\oozie' /

    你可以在 Windows 中使用此示例和以下示例。

  5. 使用 ConnectSource 命令连接到源 Apache Oozie 文件。使用在上一步骤中定义的源对象的名称。

    ConnectSource -name: 'OOZIE' -mappingsFolder: 'c:\oozie' /
  6. 保存 CLI 脚本。接下来,请为 AWS Step Functions 服务添加连接信息。

使用扩展包中 AWS Lambda 函数的权限

对于 AWS Step Functions 不支持的源函数,AWS SCT 创建一个扩展包。此扩展包包含模拟源函数的 AWS Lambda 函数。

要使用此扩展包,请创建具有以下权限的 AWS Identity and Access Management(IAM)角色。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "lambda", "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": [ "arn:aws:lambda:*:498160209112:function:LoadParameterInitialState:*", "arn:aws:lambda:*:498160209112:function:EvaluateJSPELExpressions:*" ] }, { "Sid": "emr", "Effect": "Allow", "Action": [ "elasticmapreduce:DescribeStep", "elasticmapreduce:AddJobFlowSteps" ], "Resource": [ "arn:aws:elasticmapreduce:*:498160209112:cluster/*" ] }, { "Sid": "s3", "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::*/*" ] } ] }

要应用扩展包,AWS SCT需要具有以下权限的 IAM 角色。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:GetRole", "iam:ListRolePolicies", "iam:CreateRole", "iam:TagRole", "iam:PutRolePolicy", "iam:DeleteRolePolicy", "iam:DeleteRole", "iam:PassRole" ], "Resource": [ "arn:aws:iam::ACCOUNT_NUMBER:role/sct/*" ] }, { "Effect": "Allow", "Action": [ "iam:GetRole", "iam:ListRolePolicies" ], "Resource": [ "arn:aws:iam::ACCOUNT_NUMBER:role/lambda_LoadParameterInitialStateRole", "arn:aws:iam::ACCOUNT_NUMBER:role/lambda_EvaluateJSPELExpressionsRole", "arn:aws:iam::ACCOUNT_NUMBER:role/stepFunctions_MigratedOozieWorkflowRole" ] }, { "Effect": "Allow", "Action": [ "lambda:GetFunction", "lambda:CreateFunction", "lambda:UpdateFunctionCode", "lambda:DeleteFunction" ], "Resource": [ "arn:aws:lambda:*:ACCOUNT_NUMBER:function:LoadParameterInitialState", "arn:aws:lambda:*:ACCOUNT_NUMBER:function:EvaluateJSPELExpressions" ] } ] }

连接到作为目标的 AWS Step Functions

使用以下过程连接到作为目标的 AWS Step Functions。

在 AWS SCT CLI 中连接到 AWS Step Functions
  1. 打开包含 Apache Oozie 源文件的连接信息的 CLI 脚本。

  2. 使用 AddTarget 命令在 AWS SCT 项目中添加有关迁移目标的信息。确保使用 vendor 参数的 STEP_FUNCTIONS 值。此外,还要提供以下必需参数的值: nameprofile

    以下代码示例将作为源的 AWS Step Functions 添加到 AWS SCT 项目中。此示例创建了一个名为 AWS_STEP_FUNCTIONS 的目标对象。创建映射规则时使用此对象名称。此外,此示例还使用您在先决条件步骤中创建的 AWS SCT 服务配置文件。请务必使用配置名称替换 profile_name

    AddTarget -name: 'AWS_STEP_FUNCTIONS' -vendor: 'STEP_FUNCTIONS' -profile: 'profile_name' /

    如果不使用 AWS 服务配置文件,请确保为以下必需参数提供值:accessKeysecretKeyawsRegions3Path。使用这些参数指定 AWS 秘密访问密钥、AWS 私有密钥、AWS 区域 和 Amazon S3 存储桶的路径。

  3. 使用 ConnectTarget 命令,连接到 AWS Step Functions。使用在上一步骤中定义的目标对象的名称。

    以下代码示例使用 AWS 服务配置文件连接到 AWS_STEP_FUNCTIONS 目标对象。请务必使用配置名称替换 profile_name

    ConnectTarget -name: 'AWS_STEP_FUNCTIONS' -profile: 'profile_name' /
  4. 保存 CLI 脚本。接下来,添加映射规则和迁移命令。有关更多信息,请参阅将 Apache Oozie 转换为 AWS Step Functions