AWS Elastic BeanstalkがIAMRoleに対応したようです
はじめに
ついにAWS Elastic BeanstalkでもIAMRoleが使えるようになりました。
これでソースにAccessKeyなどの情報含めなくて良いと思ったら、なんだか安心します。
出たばかりなので、とりあえずIAMRoleが使えていることを簡単に確認してみたいと思います。
IAMの設定
まずはManagementConsoleでRoleを作ります。
新しくRoleを作る
Roleの名前
Service Roleの設定
ここにBeanstalkができているのかなとも思ったのですが、おそらくEC2でいいのでは無いかと。
Policyの設定
Policyの確認
Roleの確認
これでIAM Roleの準備はおしまいです。
ここからはElastic Beanstalkで実際に確認してみます。
ManagementConsoleからIAMRoleを設定する。
AWS ElasticBeanstalkでEviromentを作成する際に下の画像のようなInstance Profileを設定するところが出てきています。
ここでIAMRoleを指定することで、立ち上がるEC2に適用されるようです。
実際にはここで設定したInstanceProfileはAutoScalingのLaunchConfigurationに設定されている感じがします。
[蛇足]ebコマンドでIAMRoleを設定する場合[未検証=>検証済]
もしebコマンドを使って作業している場合は、IAMRoleの設定をするには.elasticbeanstalkの中にあるoptionsettingsに1行追加します
aws.autoscaling:launchconfigurationのところに
IamInstanceProfile=作ったIAMRoleの名前
というのを加えてあげる事で立ち上がるEC2にはIAMRoleが有効になるはずです。
ここは未検証です。ごめんなさい。
検証したら、更新します。
2013/04/18 17:25更新
検証したところ無事にIAMRoleの設定ができている事が確認出来ました。
[aws:elasticbeanstalk:container:php:phpini] document_root= composer_options= zlib.output_compression=Off memory_limit=256M allow_url_fopen=On max_execution_time=60 display_errors=Off [aws:elasticbeanstalk:application:environment] PARAM1= PARAM2= PARAM4= PARAM3= PARAM5= [aws:elasticbeanstalk:hostmanager] LogPublicationControl=false [aws:autoscaling:launchconfiguration] InstanceType=t1.micro EC2KeyName=id_rsa IamInstanceProfile=aws-elasticbeanstalk-ec2-role [aws:ec2:vpc] ELBSubnets= ELBScheme=public Subnets= VPCId= [aws:elasticbeanstalk:application] Application Healthcheck URL= [aws:autoscaling:asg] MaxSize=4 MinSize=1 Custom Availability Zones= [aws:elasticbeanstalk:monitoring] Automatically Terminate Unhealthy Instances=true [aws:elasticbeanstalk:sns:topics] Notification Endpoint= Notification Protocol=email
IAMRoleを体感するアプリケーション
まずはアプリケーション(?)を作ります。
今回は下のようなコードを作りました。
SDKを使って現在見えるEC2のインスタンスを表示するという非常に高度なアプリケーションです。
<?php require_once('AWSSDKforPHP/sdk.class.php'); $ec2 = new AmazonEC2(array( 'default_cache_config' => '/tmp' )); $res = $ec2->describe_instances(); echo <<< "HEAD" <html> <body> <table> <thead> <tr><th>instanceId</th><th>instanceType</th></tr> </thead> <tbody> HEAD; foreach($res->body->reservationSet->item as $item) { echo <<< "TABLE" <tr> <td> {$item->instancesSet->item->instanceId} </td> <td> {$item->instancesSet->item->instanceType} </td> </tr> TABLE; } echo <<< "FOOT" </tbody> </body> </html> FOOT;
AWS SDK for PHP
.ebextensions/10_phpsdk.configでは、AWSSDKforPHPを使えるようにインストールするような記述をしておきます。
もしかしたら、最初から入っていて無駄な事かもしれません。
packages: yum: php-amazon-sdk: []
上で作ったindex.phpと.ebextensions/10_phpsdk.configをzipで固めます。
zip -r IAMRoleAppVer1.zip index.php .ebextensions/10_phpsdk.config
このzipファイルをデプロイすれば完了です。
確認。
ManagementConsoleでEC2のところを開きます。 実際に、今立ち上がったインスタンスを見ると、
IAM Roleが設定されている事がわかります。
実際にブラウザでアクセスしてみると、
こんな感じでいま起動しているインスタンスのIDとInstanceTypeが表示されました。
もしIAMRoleが適切に設定されていない時は多分500 InternalServerErrorが帰って来るはずです。
最後に
AWS Elastic BeanstalkでIAMRoleが使えるようになったということで、今後デプロイするアプリケーションのソースにはAccessKeyなどの情報を持たなくていいことになります。
gitと相性の良いサービスなので、ソースコードの管理はgithubで思っていたけれど、AccessKeyなどの情報が入ってるから面倒だなと思っていた人には朗報です。
ちょっとした遊びプロジェクトでpublicなrepositoryに入れても安心です。