使用erlang库动态连接到AWS Kinesis

时间:2014-12-02 16:54:06

标签: amazon-web-services erlang erlang-shell amazon-kinesis

我正在尝试使用erlang库动能连接到kinesis。 https://github.com/AdRoll/kinetic ...我的development.config中包含我的密钥和秘密,但是我不确定metadata_base_url应该是什么,或者我需要什么才能使其工作...目前我有:< / p>

%% -*- erlang -*-
[{kinetic,
    [{args, [
        % All of these values are optional
        % kinetic will get all of the context from the instance
        {metadata_base_url, "https://kinesis.us-east-1.amazonaws.com"},
        {aws_access_key_id, "mykey"},
        {aws_secret_access_key, "mysecret"},
        {iam_role, "kinetic"},

        {lhttpc_opts, [{max_connections, 5000}]}
    ]}]
}].

以下是我尝试启动时的结果...

kinetic (master) $ make
==> lhttpc (get-deps)
==> jiffy (get-deps)
==> meck (get-deps)
==> kinetic (get-deps)
==> lhttpc (compile)
==> jiffy (compile)
==> meck (compile)
==> kinetic (compile)
Compiled src/kinetic.erl
kinetic (master) $ erl -pa ebin -pa deps/*/ebin -s inets -s crypto -s ssl -s lhttpc -config development -s kinetic
Erlang R16B03-1 (erts-5.10.4) [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

Eshell V5.10.4  (abort with ^G)
1> 
=INFO REPORT==== 2-Dec-2014::11:51:31 ===
    application: kinetic
    exited: {{shutdown,
                 {failed_to_start_child,kinetic_config,
                     {{badmatch,{error,403}},
                      [{kinetic_config,new_args,1,
                           [{file,"src/kinetic_config.erl"},{line,127}]},
                       {kinetic_config,update_data,1,
                           [{file,"src/kinetic_config.erl"},{line,42}]},
                       {kinetic_config,init,1,
                           [{file,"src/kinetic_config.erl"},{line,55}]},
                       {gen_server,init_it,6,
                           [{file,"gen_server.erl"},{line,304}]},
                       {proc_lib,init_p_do_apply,3,
                           [{file,"proc_lib.erl"},{line,239}]}]}}},
             {kinetic,start,[normal,[]]}}
    type: temporary

删除base_url配置...

=ERROR REPORT==== 2-Dec-2014::12:41:30 ===
{failed_connect,[{to_address,{"169.254.169.254",80}},{inet,[inet],etimedout}]}

=INFO REPORT==== 2-Dec-2014::12:41:30 ===
    application: kinetic
    exited: {{shutdown,
                 {failed_to_start_child,kinetic_config,
                     {{badmatch,
                          {error,
                              {failed_connect,
                                  [{to_address,{"169.254.169.254",80}},
                                   {inet,[inet],etimedout}]}}},
                      [{kinetic_config,new_args,1,
                           [{file,"src/kinetic_config.erl"},{line,127}]},
                       {kinetic_config,update_data,1,
                           [{file,"src/kinetic_config.erl"},{line,42}]},
                       {kinetic_config,init,1,
                           [{file,"src/kinetic_config.erl"},{line,55}]},
                       {gen_server,init_it,6,
                           [{file,"gen_server.erl"},{line,304}]},
                       {proc_lib,init_p_do_apply,3,
                           [{file,"proc_lib.erl"},{line,239}]}]}}},
             {kinetic,start,[normal,[]]}}
    type: temporary

2 个答案:

答案 0 :(得分:1)

如果在ec2集群之外运行动能应用程序,您需要在config中指定区域:

[{kinetic,
    [{args, [
         {region, "us-east-1"}, %% just an example
         ...
    ]}]
}].

并使用kinetic的固定版本,它不会尝试发现区域。

第二个解决方案是将metadata_base_url选项设置为您的http服务,该服务可以获取&#34; / latest / meta-data / placement / availability-zone&#34;将回复您所在的地区。

我从未使用过aws,有些陈述可能不合适。

答案 1 :(得分:0)

错误消息表明访问https://kinesis.us-east-1.amazonaws.com/latest/meta-data/placement/availability-zone会返回错误403:禁止访问。阅读http文档意味着身份验证是正确的,但您无法正确访问此资源。