2015-06-05 65 views
2

tl; dr實例獲取了假設角色,而不是我在配置中設置的角色。爲.ebextensions中的實例分配角色

我在docker中將java應用程序部署到elastic-beanstalk中;其實,我設定我的自定義策略的特定角色在.ebextensions/instance.config

- namespace: aws:autoscaling:launchconfiguration 
    option_name: IamInstanceProfile 
    value: custom-profile 

當我部署與eb init && eb create --tier worker一切正常。然後應用程序試圖訪問的東西,這是允許在自定義配置文件,但它失敗:

Exception in thread "main" com.amazonaws.AmazonServiceException: User: arn:aws:sts::***:assumed-role/aws-elasticbeanstalk-ec2-role/*** is not authorized to perform: ... 

它甚至沒有提到爲什麼它使用的是「假設的作用」的原因。有趣的是,當我在Web控制檯中手動設置角色並上傳壓縮文件時,它起作用。

我試過使用SingleInstance和LoadBalanced,兩者都是相同的結果。我已閱讀docs和谷歌搜索,但沒有發現任何可行的。我已將PassRole權限添加到我的控制檯用戶,但我甚至不知道它是否有用。配置被認爲是有效的,但是當EC2實例被創建時,我沒有任何關於爲什麼沒有分配正確角色的信息。

我會感謝您的建議。

備註:new InstanceProfileCredentialsProvider()用於Java。

回答

2

EB CLI告知Elastic Beanstalk使用「aws-elasticbeanbean-ec2-role」實例配置文件。這將覆蓋您的ebextensions。 爲了使用您自己的配置文件,您可以使用「-ip」選項,也可以使用默認保存的配置。

eb create --tier worker -ip custom-profile 

如果您想用保存的配置替代,請參閱this blog post

+0

博客文章幫了很多!我保存了配置,現在我可以運行'eb init && eb create --cfg config',它的工作原理:)如果在全局部分和這些文件中有任何文檔,我會很高興,但我沒有找到任何東西。例如,將「config」保存的配置設置爲.elasticbeanstalk/config.yml中的默認配置將很方便。 我得到了它的工作,所以非常感謝! – pkopac

+0

您可以通過在創建時將配置命名爲「default」來設置默認配置,或將該文件重命名爲default.cfg.yml。在config.yml中沒有任何你沒有看到的「全局」設置 –

1

兩種可能性

你提交你.ebextension文件git的回購?很可能你做了,但只是雙重檢查。

另一種可能性是,當您運行eb init和eb創建時,它會在不同的conf文件中爲您設置默認值。這些默認值包括IamInstanceProfile。在交互模式下,您可以選擇角色名稱,否則會選擇默認名稱。 eb通過api傳遞默認選項設置。您的ebextensions還指定具有不同值的相同選項設置。如果發生衝突,api將勝出並覆蓋ebextension中的歌曲。我認爲這是可能發生的事情。在交互模式下調用eb init/create時,您可以嘗試指定您的角色名稱嗎?這樣你的角色將被用來代替默認的角色。

+0

感謝您的建議,結果使用保存的配置解決了問題。 – pkopac