1

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

%% -*- 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
4

2 回答 2

1

似乎如果在 ec2 集群之外运行动力学应用程序,您需要在配置中指定区域:

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

并使用不会试图发现区域的固定版本的动力学。

第二种解决方案是为您的 http 服务设置 metadata_base_url 选项,该选项在获取“/latest/meta-data/placement/availability-zone”请求时将响应您所在的地区。

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

于 2014-12-02T19:49:38.557 回答
0

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

于 2014-12-02T18:53:55.157 回答