我花了一段时间才找到正确的信息。老实说,明确指定 IP 地址也同样有效,除非您的集群包含数百个节点来手动键入所有节点。
指定 AWS 标签名称/值对是可选的。我有点偏执,我可能会错误地加入另一个集群,最好明确地创建一个这样的资源(服务器)组。
首先,您需要创建一个具有 Hazelcast 所需权限的 IAM 用户。显然,您不想为此使用您的根用户凭据。
使用 AWS 控制台。它位于右上角的用户名下拉列表(帐户设置所在的位置)中。单击安全凭据,然后单击组。使用以下策略创建一个组:
{
"Version": "xxxxxxx",
"Statement": [
{
"Sid": "xxxxxx",
"Effect": "Allow",
"Action": [
"ec2:DescribeInstances"
],
"Resource": [
"*"
]
}
]
}
如您所见,Hazelcast 需要的唯一权限是“DescribeInstances”。我偶然发现了它 - 在 Fuad Malikov 的问答线程之一深处。
其余的都是微不足道的。创建一个 IAM 用户,例如使用该安全组“hazelcast”,并下载(导出)其凭据,您应该将其放入 Hazelcast 配置中,如下所示。我正在使用 Spring,但是与经典的 Hazelcast 配置文件存在一对一的映射关系。或者您可以通过编程方式设置这些属性——Spring 本质上是为我做的。
<property name="properties">
<props>
<prop key="hazelcast.icmp.enabled">true</prop>
</props>
</property>
<property name="join">
<bean class="com.hazelcast.config.JoinConfig">
<property name="multicastConfig">
<bean class="com.hazelcast.config.MulticastConfig">
<property name="enabled" value="false"/>
</bean>
</property>
<property name="tcpIpConfig">
<bean class="com.hazelcast.config.TcpIpConfig">
<property name="enabled" value="false"/>
</bean>
</property>
<property name="awsConfig">
<bean class="com.hazelcast.config.AwsConfig">
<property name="enabled" value="true"/>
<property name="region" value="us-west-2"/>
<property name="accessKey" value="zzzzzzz"/>
<property name="secretKey" value="yyyyyyy"/>
<property name="tagKey" value="your-instance-tag-key"/>
<property name="tagValue" value="your-instance-tag-value"/>
</bean>
</property>
</property>