この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
ついに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に入れても安心です。