Terraform
Terraformにおけるaws_iam_policy_attachmentのTIPS
AWSIAMTerraform

resource aws_iam_policy_attachmentは曲者

作業中に引っかかってしまい、せっかくなので書き記しておきます。
やろうとしたことは、自分で作成したIAMロール「ecs_role」に

AdministratorAccess

をアタッチしようと、tfファイルを定義しました。

resource "aws_iam_role" "ecs_role" {
  name = "${terraform.env}_ecs_role"
  path = "/"
   << 以下は省略 >>
}

resource "aws_iam_policy_attachment" "ecs_role_manag_attach" {
  depends_on = ["aws_iam_role.ecs_role"]
  name       = "ecs_role_manag_attach"
  roles      = ["${aws_iam_role.ecs_role.name}"]
  groups     = ["infra", "developer"]
  policy_arn = "arn:aws:iam::aws:policy/AdministratorAccess"
}

terraform applyを実行すると反映されます。

terraform destroyすると

groups     = ["infra", "developer"]

があるため、IAMグループinfra, developerに含めた
IAMユーザーの権限も外されて、影響を受けてしまいました。

対処方法は、aws_iam_role_policy_attachmentを使用する

resource "aws_iam_role_policy_attachment" "ecs_role_manag_attach" {
  depends_on = ["aws_iam_role.ecs_role"]
  role       = "${aws_iam_role.ecs_role.name}"
  policy_arn = "arn:aws:iam::aws:policy/AdministratorAccess"
}

とすることで、ロールに対してポリシーがアタッチされます。

おまけ:ポリシーのarnを取得するAWS CLI

こちらのAWS CLIで取得できます。

$ aws iam list-policies --query "Policies[][Arn]" --output text

AWSのポリシーは、下記のパターンになります。
私はgrepとパイプでつなげて、抽出して使用してます。

  • arn:aws:iam::aws:policy/XXXXXXXXXXXXX
  • arn:aws:iam::aws:policy/service-role/XXXXXXXXXXXXX
AWS
JAWS DAYS 2016に参加してきました
ConsulJAWS DAYSJAWS-UGPackerSerfTerraformVagrant

JAWS DAYS 2016に行ってきました

2016/03/12にベルサール新宿グランドで開かれましたJAWS DAYS 2016に行って参りました。
今回は、50分のスピーカーとスタッフを務めさせていただきました。

JAWS DAYS スピーカー

50分は初めて

去年はAWSJのSAの方と半分の25分で登壇したんですけど
一人で50分できるかなーと思ってましたが、結構時間いっぱいになりました。
半分ぐらいアドリブでした。
TwitterやFacebookなどで進捗を流してたんですが
心配されていたようでとてもお騒がせしました。
そんなに見て頂いてるとは思いませんでした。お恥ずかしい限りです。

発表したスライドをアップしておきます。

あと、terraformのコードも置いておきます。
https://github.com/fprg/jawsdays_2016_terraform

登壇後にご質問とか
私も使ってるとか、泥臭いことしてますねと
声をかけていただき嬉しかったです。

※反省として
セッション内容が追いつかず、聞きたかったところがあったとご意見をいただきました。
足りてないところの説明もあり、反省しております。
再度のご説明とかは、聞きたかったところの説明は
カジュアルに行きますので、お呼びください。登壇料とかはありません。

ちょっとだけ写真。弟子と師匠みたいな並びのものがあったので。
25136622104_586baa86cf_o.jpg
25140713243_d4d3712745_o.jpg

裏方スタッフ

お弁当の配達、ドリンクの調達

今回で一番大変でした。
大量の品物の発注や納品、受け取り配布、大きい金額の取り扱いは貴重な経験でした。
お弁当をお配りいただいたスタッフの皆様、ありがとうございました。
自主的に動いていただいて、感謝しております。

Tシャツ

今回、Tシャツの受け取り、検品、発送とかもいたしました。
受け取りに間に合わず、会社の人に立て替えしてもらってしまいました。
これは本当に、すいません。

JAWS DAYS 2016ギャラリー

少ないですが、まとめてみました。
JAWS DAYS 2016ギャラリー

そして、JAWS-UG総会へ

JAWS-UG運営のコアメンバーとなりました。
これからどうするかの状態ですが、非常に楽しみです。
IMG_1690.jpg
IMG_1691.jpg
25626522682_896aa5da78_o.jpg
25747505585_b8b07ac2b6_o.jpg

おまけ、そのあと浅草へ

なんだろうこれという人がいるかもしれませんが。まあ、知っている方向けです。
IMG_1694.jpg
IMG_1699.jpg
IMG_1703.jpg
IMG_1705.jpg
IMG_1706.jpg

まとめ

登壇とスタッフは、正直結構大変でした。
セッションもみれてなく、個人的にもっと参加したかったなぁと思います。
バランスは大事だと思いました。また1年修行ですかね。

最後に、参加者の皆様ご参加ありがとうございました。
ゴミの片付けなどご対応いただいてありがとうございました。

参考資料・リンク

JAWS DAYS 2016公式サイト
JAWS DAYS 2015の記事

AWS
AWS Advent Calendar 2014
AWSAdvent CalendarEC2EIPTerraformVPC

AWS Advent Calendar 2014

今回の投稿内容は、AWS Advent Calendar 2014
になります。

AWS Advent Calendar 2014

今回の取り上げるテーマ

今回はEIPを取り上げます。EIPを付ける際はどうされてますか?
私は先ほど仕事で10個EC2インスタンスにEIPをつけようとしました。
yumによるインストールするによりリポジトリと通信を行うためです。
Managment Consoleでの選択してEIPを設定するのは正直手間がかかりました。

Managment Consoleでの作業

VPC_Management_Console.png

発行されたEIPで接続するために、sshのconfigを作成したり
EC2へのインストール作業後にEIPを外す作業もなかなか手間がかかるものです。

Terraformによるeipのオーケストレーション

最近Terraformを覚えたので、もしかしたらそちらでできるのではないかと思いつきました。
すると調べたところ、作業が簡単になる見込みがありました。
HashicoprのTerraformにより、一斉設定を行います。

Terraformファイルの準備

[01:41:52][f_prg@mba:eip]# cat eip.tf
provider "aws" {
    access_key = "XXXXXXXXXXXXXXXXXXXX"
    secret_key = "YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY"
    region = "ap-northeast-1"
}

resource "aws_eip" "hoge" {
    instance = "i-AAAAAAAAA"
    vpc = true
}

resource “aws_eip”
の4行を複数記述すれば、複数のインスタンスに実行ができるようになります。

Terraformの実行

[01:41:53][f_prg@mba:eip]# terraform plan
Refreshing Terraform state prior to plan...


The Terraform execution plan has been generated and is shown below.
Resources are shown in alphabetical order for quick scanning. Green resources
will be created (or destroyed and then created if an existing resource
exists), yellow resources are being changed in-place, and red resources
will be destroyed.

Note: You didn't specify an "-out" parameter to save this plan, so when
"apply" is called, Terraform can't guarantee this is what will execute.

+ aws_eip.hoge
    allocation_id:  "" => "<computed>"
    association_id: "" => "<computed>"
    domain:         "" => "<computed>"
    instance:       "" => "i-AAAAAAAAA"
    private_ip:     "" => "<computed>"
    public_ip:      "" => "<computed>"
    vpc:            "" => "1"


[01:41:58][f_prg@mba:eip]# terraform apply
aws_eip.hoge: Creating...
  allocation_id:  "" => "<computed>"
  association_id: "" => "<computed>"
  domain:         "" => "<computed>"
  instance:       "" => "i-AAAAAAAAA"
  private_ip:     "" => "<computed>"
  public_ip:      "" => "<computed>"
  vpc:            "" => "1"
aws_eip.hoge: Creation complete

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

The state of your infrastructure has been saved to the path
below. This state is required to modify and destroy your
infrastructure, so keep it safe. To inspect the complete state
use the `terraform show` command.

State path: terraform.tfstate

各々のインストールはchefやansibleで行います。

今回は割愛します。
EIPが付いているので、packageやyumによる
パッケージインストールができるようになります。

Terraform destroyの破棄

EIPが解放されます。

[01:48:18][f_prg@mba:eip]# terraform destroy
Do you really want to destroy?
  Terraform will delete all your managed infrastructure.
  There is no undo. Only 'yes' will be accepted to confirm.

  Enter a value: yes

aws_eip.hoge: Refreshing state... (ID: eipalloc-AAAAAAAAA)
aws_eip.hoge: Destroying...
aws_eip.hoge: Destruction complete

Apply complete! Resources: 0 added, 0 changed, 1 destroyed.

まとめ

-public ipを付与できないEC2インスタンスには有効です。
-EC2インスタンスIDを入力するのはまだ手間がかかりました。
-プライベートサブネット配下のEC2インスタンスにインストール作業するときに大変便利だなぁと思いました。
-Terraformファイルを作成する工夫でもっと簡単になるのかとも思いました。