Slide 1

Slide 1 text

Former2でコード生成して GUIポチポチ卒業の第一歩を
 2021/5/18(火)
 AWS事業本部コンサルティング部 猪股翔 
 1

Slide 2

Slide 2 text

2 自己紹介 猪股 翔(inomaso) ● 2021年1月入社 (元金融系SIer) ● AWS事業本部コンサルティング部 ● 好きなAWSサービス ○ AWS Certificate Manager ○ AWS Chatbot ● 好きなIaCツール ○ Terraform @inomasosan

Slide 3

Slide 3 text

3 本LTは… 想定聴講者 ● 手作業の環境構築に疲弊を感じている ● IaCに興味はあるが導入に二の足を踏んでいる ● 構築済みのAWS既存環境がある ゴール ● Former2で既存環境からのコード生成方法がわかる ● GUIポチポチ卒業のヒントを得る

Slide 4

Slide 4 text

4 ところで IaC is 何?

Slide 5

Slide 5 text

5 軽くおさらい ● Infrastructure as Code(IaC)は、インフラをコードで記述すること ● IaCの歴史を紐解くと、最初はシステム管理の自動化のみが焦点 ● Amazon EC2のようなAPIでプログラマブルに扱えるIaaSの普及 ● IaaSを扱うTerraformやCloudFormation、CDK等のツールやコンテナの 普及によりプラットフォームまで対象領域が拡大 Infrastructure as Codeのこれまでとこれから /Infra Study Meetup #1 https://speakerdeck.com/mizzy/infra-study-meetup-number-1

Slide 6

Slide 6 text

6 本日の主役 Former2とは?

Slide 7

Slide 7 text

7 Former2とは ● ブラウザベースのWebサービス ● サードパーティ製でAWS JavaScript SDKを使用 ● AWSの認証情報を使用して、既存リソース情報を取得しコード出力 ● アウトプット形式 ○ CloudFormation ○ Terraform ○ Troposphere ○ CDK (Cfn Primitives) - TypeScript, Python, Java, C# ○ CDK for Terraform - TypeScript ○ Pulumi - TypeScript ○ Diagram - embedded version of draw.io

Slide 8

Slide 8 text

8 Former2ダッシュボード

Slide 9

Slide 9 text

9 Former2セットアップ 1. Former2のWebサイトにアクセス 2. Former2 Helperブラウザ拡張機能のインストール 3. ReadOnlyAccessのIAMロールか、IAMユーザを準備 4. IAMのアクセスキー、シークレットキーを入力 5. (オプション) CloudFormationのスタックパラメータ設定が必要な 場合は設定 6. AWSアカウントに対するスキャン実行

Slide 10

Slide 10 text

10 ちょっと気になった ん?

Slide 11

Slide 11 text

11 Former2セットアップ 1. Former2のWebサイトにアクセス 2. Former2 Helperブラウザ拡張機能のインストール 3. ReadOnlyAccessのIAMロールか、IAMユーザを準備 4. IAMのアクセスキー、シークレットキーを入力 5. (オプション) CloudFormationのスタックパラメータ設定が必要な 場合は設定 6. AWSアカウントに対するスキャン実行 IAMの認証情報を、サード パーティ製のサイトに入 力って大丈夫?

Slide 12

Slide 12 text

12 ちょっと調べてみた AWS Open Source Blogで、Former2に関する記事を発見 https://aws.amazon.com/jp/blogs/opensource/accelerate-infrastructure-as-code-development-with-open-source-former2/

Slide 13

Slide 13 text

13 AWS Open Source Blog には ブログの以下抜粋部分より、Former2は認証情報をAWS APIのエ ンドポイント以外の外部サーバには決して送信しないよう設計さ れていることがわかった

Slide 14

Slide 14 text

14 とはいえ インターネット上のサイトに 認証情報を入力するのに 抵抗が…

Slide 15

Slide 15 text

15 実は Dockerでローカル環境に Webサイトをホスト可能

Slide 16

Slide 16 text

16 ローカル環境でFormer2のコンテナ起動 ● Gitでリポジトリをローカルに複製 ● 複製したリポジトリのディレクトリに移動し、コンテナ起動 % git clone https://github.com/iann0036/former2.git % docker-compose up -d Creating network "former2_default" with the default driver Creating former2_former2_1 ... done Former2のローカルホスティング https://github.com/iann0036/former2/blob/master/HOSTING.md

Slide 17

Slide 17 text

17 ローカル環境のWebサイトにアクセス Chrome等のURLに127.0.0.1:80でアクセスすると、Former2のダッ シュボードが表示されます。

Slide 18

Slide 18 text

18 Former2セットアップの詳細はこちらを参考に https://dev.classmethod.jp/articles/former2/

Slide 19

Slide 19 text

19 既存AWSリソースのコード化 EC2のコード出力

Slide 20

Slide 20 text

20 EC2のコード出力(Terraform) ダッシュボードからEC2をクリック

Slide 21

Slide 21 text

21 EC2のコード出力(Terraform) コード化したいEC2にチェックを入れ、Add Selectedをクリック

Slide 22

Slide 22 text

22 EC2のコード出力(Terraform) Generateボタンをクリック

Slide 23

Slide 23 text

23 EC2のコード出力(Terraform) Default Outputに指定したTerraformのコードが自動生成される

Slide 24

Slide 24 text

24 EC2のコード出力(CloudFormation) CloudFormationテンプレートの場合はこちら

Slide 25

Slide 25 text

25 自動生成されたコードの考慮点 コードの再利用は 考慮が必要

Slide 26

Slide 26 text

26 自動生成されたコードの考慮点 Terraformでの一例

Slide 27

Slide 27 text

27 リソースID指定(Before) ● リソースIDがそのまま出力される ● AWSリソースIDはハイフンと英数字の一意の組み合わせ ● 新環境を作成したい場合は考慮が必要

Slide 28

Slide 28 text

28 リソースID指定(After) ● VPCやサブネット、セキュリティグループを新規作成する場合は 「リソースの種類.任意のリソース名.id」で指定する resource "aws_instance" "EC2Instance" { ami = "ami-0ca38c7440de1749a" instance_type = "t3.micro" key_name = "aws-ssh-key" availability_zone = "ap-northeast-1a" tenancy = "default" subnet_id = aws_subnet.sub_app_1a.id ebs_optimized = true vpc_security_group_ids = [ aws_security_group.ec2.id ]

Slide 29

Slide 29 text

29 IAMポリシー(Before) ● IAMポリシーが直書きで出力される ● 共通のIAMポリシーを利用する場合に、運用が煩雑化

Slide 30

Slide 30 text

30 IAMポリシー(After) ● JSON形式でIAMポリシードキュメントを作成 data "aws_iam_policy_document" "vpc_endpoint" { statement { effect = "Allow" actions = [ "*" ] resources = [ "*" ] principals { type = "AWS" identifiers = [ "*" ] } } }

Slide 31

Slide 31 text

31 IAMポリシー(After) ● IAMポリシーは先ほど作成したポリシードキュメントを指定 resource "aws_vpc_endpoint" "ssm" { vpc_endpoint_type = "Interface" vpc_id = aws_vpc.vpc.id service_name = "com.amazonaws.ap-northeast-1.ssm" policy = data.aws_iam_policy_document.vpc_endpoint.json IAMポリシーのリファクタリング https://learn.hashicorp.com/tutorials/terraform/aws-iam-policy セッションマネージャーを使用してプライベートサブネットのLinux用EC2にアクセス(VPCエンドポイント編) https://dev.classmethod.jp/articles/terraform-session-manager-linux-ec2-vpcendpoint/

Slide 32

Slide 32 text

32 CloudFormationでの改善例 https://speakerdeck.com/yokoyan/infrastructure-as-code-starting-from-scratch

Slide 33

Slide 33 text

33 まとめ Former2≠銀の弾丸

Slide 34

Slide 34 text

34 まとめ Former2は、まずは小規模な 環境からIaCを始めたり、検証 環境をとりあえずコード化する のに便利

Slide 35

Slide 35 text

35 本セッションは… 想定聴講者 ● 手作業の環境構築に疲弊を感じている ● IaCに興味はあるが導入に二の足を踏んでいる ● 構築済みのAWS既存環境がある ゴール ● Former2で既存環境からのコード生成方法がわかる ● GUIポチポチ卒業のヒントを得る

Slide 36

Slide 36 text

36