本教程为将数据从 阿里云 OSS 中的数据传输到的 Amazon S3 指南。
我们假设您已经完成了Data Transfer Hub解决方案的部署。 并将解决方案部署在 俄勒冈州(us-west-2) 区域。
您可以预先参考部署指南部署该解决方案.
成功创建cloudformation堆栈后,您将收到一封电子邮件通知,其中包含用于登录的临时密码,用户名是您启动cloudformation时设置的AdminEmail。
界面的网址可在cloudformation堆栈的输出选项中找到,请参见以下屏幕截图:
- 打开 Secrets Manager 控制台
- 点击左侧边栏的 Secrets
- 点击 Store a new secret 按钮
- 在密钥类型中,选择 Other type of secrets
- 在 Plaintext 选项卡中输入您的阿里云的AKSK, 该凭证需要按以下的格式
{ "access_key_id": "<Your Access Key ID>", "secret_access_key": "<Your Access Key Secret>" }
- 点击 Next
- 输入密钥名称 Secret name, 例如:
drh-credentials
- 点击 Next
- 选择 Disable automatic rotation
- 点击 Store 完成创建
点击任务下对应的CloudWatch链接,打开CloudWatch 面板对任务的相关数据进行监控。
注意,任务第一次启动时,面板的监控指标数据可能会有5分钟左右的延迟。
如果您想将数据实时地从阿里云OSS迁移到Amazon S3。 下面是如何启用OSS事件触发迁移的指南。
Data Transfer Hub 必须部署在AWS的账户中,本教程假设您部署在 us-west-2 区域.
在您创建了task之后,前往 SQS 控制台 并记下 Queue URL
和 Queue arn
, 我们将在后续步骤中用到他们.
前往 IAM 控制台, 点击 创建一个新的策略(Create Policy).
点击 JSON,并将下面的权限Json文件输入到策略中。
注意替换JSON中的Queue arn 为您前述步骤中的arn
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sqs:SendMessageBatch",
"sqs:SendMessage"
],
"Resource": "arn:aws:sqs:us-west-2:xxxxxxxxxxx:DTHS3Stack-S3TransferQueue-1TSF4ESFQEFKJ"
}
]
}
随后创建一个User. 前往 User 控制台 然后点击 添加用户(Add User).
然后将您先前创建的策略附加到该用户上。
保存 AK/SK,您将在下一步中使用它们。
打开终端并输入以下命令,建议使用docker或linux机器。
mkdir tmp
cd tmp
pip3 install -t . boto3
随后在同一文件夹中创建 index.py
,然后输入代码
import json
import logging
import os
import boto3
def handler(event, context):
logger = logging.getLogger()
logger.setLevel('INFO')
evt = json.loads(event)
if 'events' in evt and len(evt['events']) == 1:
evt = evt['events'][0]
logger.info('Got event {}'.format(evt['eventName']))
obj = evt['oss']['object']
# logger.info(obj)
ak = os.environ['ACCESS_KEY']
sk = os.environ['SECRET_KEY']
queue_url = os.environ['QUEUE_URL']
region_name = os.environ['REGION_NAME']
# minimum info of a message
obj_msg = {
'key': obj['key'],
'size': obj['size']
}
# start sending the msg
sqs = boto3.client('sqs', region_name=region_name,
aws_access_key_id=ak, aws_secret_access_key=sk)
try:
sqs.send_message(
QueueUrl=queue_url,
MessageBody=json.dumps(obj_msg)
)
except Exception as e:
logger.error(
'Unable to send the message to Amazon SQS, Exception:', e)
else:
logger.warning('Unknown Message '+evt)
return 'Done'
打包代码(包括boto3)
zip -r code.zip *
打开阿里云 函数计算/Function Compute的服务及函数, 点击 新建函数/create function
运用刚刚打包的zip文件创建函数
然后点击 新建/create
点击 修改配置/Edit Config
然后在“环境变量”中输入json配置文件,请记住使用自己的ACCESS_KEY
,SECRET_KEY
和QUEUE_URL
{
"ACCESS_KEY": "XXX",
"QUEUE_URL": "https://sqs.us-west-2.amazonaws.com/xxxx/DTHS3Stack-S3TransferQueue-xxxx",
"REGION_NAME": "us-west-2",
"SECRET_KEY": "XXXXX"
}
点击创建触发器以创建函数的触发器。
然后配置触发器,如下图所示。 触发事件, 请选择:
oss:ObjectCreated:PutObject
oss:ObjectCreated:PostObject
oss:ObjectCreated:CopyObject
oss:ObjectCreated:CompleteMultipartUpload
oss:ObjectCreated:AppendObject