20211227_ビギナーがCloudFormationを使用してハマったところ

2.4K Views

January 10, 24

スライド概要

JAWS-UG 初心者支部#40 年忘れLT大会!!でのLTで発表したスライドです。

参照:
CFnのユーザーガイド:リファレンス)
https://docs.aws.amazon.com/en_us/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html

Ref関数)https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-importvalue.html

ImportValue関数)https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-importvalue.html

今回作成したCFnコード)Githubhttps://github.com/uechikohei/cloudformation-basic

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

ビギナーが、 CloudFormation(CFn) を使用して ハマったところ 上地 航平(うえち こうへい)

2.

自己紹介 - 前職:スケボー関連(9年) - IT歴は半年 - 趣味はスケボー - 好きなAWSサービス: 上地 航平 (うえち こうへい) twitterやってます! → @uechikohei_ https://twitter.com/uechikohei_ CloudFormation(CFn)

3.

アジェンダ ● CloudFormationの使い方 ● 特にハマった所 ● トラブルシューティング ● テンプレートファイルの中身(失敗ver / 修正ver) ● まとめ

4.

”CFn(CloudFormation)”の前に、 ”IaC(Infrastructure as Code)” インフラのコード化とは?

5.

Infrastructure as Code(インフラのコード化)とは? 1. インフラ環境をコードで管理する概念 2. 使い回すことが可能。 再度、インフラ環境を構築できる。

6.

CloudFormation(CFn)の使い方

7.

1. ローカル環境でテンプレートファイル(yaml / json)を記述 2. CFnへデプロイする (CLIを使用) 3. CFnはデプロイされたテンプレートファイルを見て、 各種AWSリソースを起動し、スタックという概念で管理する。

8.

テンプレートファイルの構成 セキュリティグ ループ CFnのユーザーガイド:リファレンス) https://docs.aws.amazon.com/en_us/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html サブネット

9.

今回は、最小構成のインフラ環境を作ってみます! 1.ネットワークレイヤー VPC・サブネット・IGW 2.セキュリティレイヤー セキュリティグループ 3.アプリレイヤー EC2(t2.micro) =>クロススタック参照

10.

ここを理解しないと、CFnでハマる! ①テンプレートファイル間で、リソースの関連付けが重要。 ● 2層目(セキュリティレイヤー)で記述したSG(セキュリティグループ)は、 1層目(ネットワークレイヤー)で記述したVPCに所属する ● 3層目(アプリレイヤー)で記述したEC2は、 1層目(ネットワークレイヤー)で記述したサブネットに所属する

11.

特にハマった所 デプロイコマンドが通らない、、 何回やっても失敗する。。

12.

デプロイコマンド aws cloudformation deploy --template-file [テンプレートファイル名] --stack-name [スタック名] ① ③ 1層(ネットワークレイヤー) はデプロイ成功する。 しかし ② 2層(セキュリティレイヤーとアプリレイヤー) のデプロイが失敗してしまう。。。

13.

トラブルシューティング

14.

エラー文は、コンソール画面のほうが見やすい! 「No Export Named MyVPC2 found. ~」 「MyVPC2という値を見つからないよ!」 と言われていました。。

15.

テンプレートファイル(失敗ver)

16.

①ネットワークレイヤー ②セキュリティレイヤー Resources: MyVPC2: Type: AWS::EC2::VPC Resources: secGroupName: Type: AWS::EC2::SecurityGroup ~ VpcId: !ImportValue MyVPC2 ~ ~ ※ Outputセクション記載忘れたため セキュリティレイヤーで「MyVpc2」を定義したが 「MyVpc2」が見つからなかった

17.

Ref関数とImportValue関数 (組み込み関数) 違うスタックのOutputsセクションでエクスポートした値を、参照したい! - ImportValue関数 https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-importvalue.html 同じスタック内でAWSリソースの値を、参照したい! - Ref関数 https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html

18.

テンプレートファイル(修正ver)

19.

①ネットワークレイヤー Resources: MyVPC2: Type: AWS::EC2::VPC ~ Outputs: ②セキュリティレイヤー Resources: secGroupName: Type: AWS::EC2::SecurityGroup ~ GroupDescription-SG VpcId: !ImportValue MyVPC2 ~ VPC: Value: !Ref MyVPC2 Export: Name: MyVPC2 ~ Outputs: ~

20.

無事デプロイが 完了しました

21.

3層テンプレートファイル構成の関連付け(全体図) ①ネットワークレイヤー Resources: MyVPC2: ~ Subnet1Name: ~ ②セキュリティレイヤー Resources: secGroupName: Type: AWS::EC2::SecurityGroup ~ GroupDescription-SG VpcId: !ImportValue MyVPC2 ~ Outputs: Resources: myEC2Instance: Type: AWS::EC2::Instance Properties: ~~~~ NetworkInterfaces: SubnetId: !ImportValue Subnet1Name Outputs: VPC: Value: ③アプリレイヤー !Ref MyVPC2 Export: Name: MyVPC2 Subnet1: GroupSet: SG1: - !ImportValue SG1Name Value : !Ref secGroupName Export: Name: SG1Name Tags: - Key: Name Value: CFec2 Value: !Ref Subnet1Name Export: Name: Subnet1Name 今回作成したCFnコードは、Github:https://github.com/uechikohei/cloudformation-basic

22.

まとめ) CFnを使用してみて、何を学べたか? - AWSリソース間の依存関係を把握できた。 コンソール画面操作では、依存関係を意識せずとも作成できるようUIUXが整っている。 - IaCのメリットを理解できた。 テンプレートファイルをGithubで共有できるのは、便利!

23.

最後まで、ご清聴ありがとうございました! CFnのユーザーガイド:リファレンス) https://docs.aws.amazon.com/en_us/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html Ref関数 https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-importvalue.html ImportValue関数 https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-importvalue.html 今回作成したCFnコードは、Githubhttps://github.com/uechikohei/cloudformation-basic