AWS
CloudFormation
Mackerel

mackerelのAWSインテグレーション用IAM Userをcloudformationで作る

More than 1 year has passed since last update.


概要

Mackerelいいですよね。導入がとても楽です。

https://mackerel.io/ja/

少し前にAWSからメトリックを取得して、Mackerelでモニタリングに利用できる機能ができていました。

https://mackerel.io/ja/blog/entry/weekly/20160513

https://mackerel.io/ja/docs/entry/integrations/aws

ドキュメントを読むと、下記のようなことをやれば良いみたいです。


  1. AWS上にメトリックのRead権限を持ったIAM Userを作成

  2. IAM UserのアクセスキーをMackerelに登録

  3. (+α)特定のタグを含むAWSリソースだけ登録したい場合、タグ情報を取得できる権限を1のIAM Userに付与する

タグを指定しない場合、対象となるリソース全てを取得してしまいます。

なので、今回はELBのメトリックを取得できるIAM Userを作ってみました。


IAM Userの作成


cloudformation定義

下記のようなcloudformationの定義でcreate-stackを行えば終わりです()

{

"AWSTemplateFormatVersion" : "2010-09-09",
"Description" : "IAM User for Mackerel's AWS Integration",
"Resources" : {
"MackerelAWSIntegrationUser" : {
"Type" : "AWS::IAM::User",
"Properties" : {
"ManagedPolicyArns": [
"arn:aws:iam::aws:policy/AmazonEC2ReadOnlyAccess"
]
}
},
"MackerelAWSIntegrationIamGetUser" : {
"Type" : "AWS::IAM::Policy",
"Properties" : {
"PolicyName" : "MackerelAWSIntegrationIamGetUser",
"PolicyDocument" : {
"Statement": [{
"Effect" : "Allow",
"Action" : "iam:GetUser",
"Resource" : {"Fn::GetAtt": ["MackerelAWSIntegrationUser", "Arn"]}
}]
},
"Users": [{"Ref": "MackerelAWSIntegrationUser"}]
},
"DependsOn": "MackerelAWSIntegrationUser"
}
},
"Outputs" : {
"MackerelAWSIntegrationUser" : {
"Value" : {"Ref": "MackerelAWSIntegrationUser"},
"Description" : "MackerelAWSIntegrationUser"
},
"MackerelAWSIntegrationIamGetUser" : {
"Value" : { "Ref" : "MackerelAWSIntegrationIamGetUser" },
"Description" : "MackerelAWSIntegrationIamGetUser"
}
}
}


create-stackの実行

$ls

mackerel.json

$aws cloudformation create-stack --stack-name "MackerelIntegrationIamUser" --template-body file://./mackerel.json --capabilities CAPABILITY_IAM
{
"StackId": "arn:aws:cloudformation:ap-northeast-1:xxxxxxxxxxxxx:stack/MackerelIntegrationIamUser/6b208770-3d2f-11e6-a5ad-50a68a455c82"
}

$aws cloudformation describe-stacks --stack-name "MackerelIntegrationIamUser"
{
"Stacks": [
{
"StackId": "arn:aws:cloudformation:ap-northeast-1:xxxxxxxxxxxxx:stack/MackerelIntegrationIamUser/6b208770-3d2f-11e6-a5ad-50a68a455c82",
"Description": "IAM User for Mackerel's AWS Integration",
"Tags": [],
"Outputs": [
{
"Description": "MackerelAWSIntegrationUser",
"OutputKey": "MackerelAWSIntegrationUser",
"OutputValue": "MackerelIntegrationIamUse-MackerelAWSIntegrationUs-1CJ6RWI4E6O1T"
},
{
"Description": "MackerelAWSIntegrationIamGetUser",
"OutputKey": "MackerelAWSIntegrationIamGetUser",
"OutputValue": "Macke-Mack-1IX625ZIS1EWV"
}
],
"CreationTime": "2016-06-28T12:54:15.152Z",
"Capabilities": [
"CAPABILITY_IAM"
],
"StackName": "MackerelIntegrationIamUser",
"NotificationARNs": [],
"StackStatus": "CREATE_COMPLETE",
"DisableRollback": false
}
]
}


結果のAWSコンソール

AWS コンソール


感想とか

これで出来たIAM Userのアクセスキーをぽちぽち手動でMackerelの管理画面に入れればELBが1 Hostとして扱われてメトリックが表示されます。

便利!

ここもmkrコマンドでできたら楽なのかなぁとか思ったけど、今のところそんな大変じゃないので、まあいっかという感じです。