2.8K 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
ビギナーが、 CloudFormation(CFn) を使用して ハマったところ 上地 航平(うえち こうへい)
自己紹介 - 前職:スケボー関連(9年) - IT歴は半年 - 趣味はスケボー - 好きなAWSサービス: 上地 航平 (うえち こうへい) twitterやってます! → @uechikohei_ https://twitter.com/uechikohei_ CloudFormation(CFn)
アジェンダ ● CloudFormationの使い方 ● 特にハマった所 ● トラブルシューティング ● テンプレートファイルの中身(失敗ver / 修正ver) ● まとめ
”CFn(CloudFormation)”の前に、 ”IaC(Infrastructure as Code)” インフラのコード化とは?
Infrastructure as Code(インフラのコード化)とは? 1. インフラ環境をコードで管理する概念 2. 使い回すことが可能。 再度、インフラ環境を構築できる。
CloudFormation(CFn)の使い方
1. ローカル環境でテンプレートファイル(yaml / json)を記述 2. CFnへデプロイする (CLIを使用) 3. CFnはデプロイされたテンプレートファイルを見て、 各種AWSリソースを起動し、スタックという概念で管理する。
テンプレートファイルの構成 セキュリティグ ループ CFnのユーザーガイド:リファレンス) https://docs.aws.amazon.com/en_us/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html サブネット
今回は、最小構成のインフラ環境を作ってみます! 1.ネットワークレイヤー VPC・サブネット・IGW 2.セキュリティレイヤー セキュリティグループ 3.アプリレイヤー EC2(t2.micro) =>クロススタック参照
ここを理解しないと、CFnでハマる! ①テンプレートファイル間で、リソースの関連付けが重要。 ● 2層目(セキュリティレイヤー)で記述したSG(セキュリティグループ)は、 1層目(ネットワークレイヤー)で記述したVPCに所属する ● 3層目(アプリレイヤー)で記述したEC2は、 1層目(ネットワークレイヤー)で記述したサブネットに所属する
特にハマった所 デプロイコマンドが通らない、、 何回やっても失敗する。。
デプロイコマンド aws cloudformation deploy --template-file [テンプレートファイル名] --stack-name [スタック名] ① ③ 1層(ネットワークレイヤー) はデプロイ成功する。 しかし ② 2層(セキュリティレイヤーとアプリレイヤー) のデプロイが失敗してしまう。。。
トラブルシューティング
エラー文は、コンソール画面のほうが見やすい! 「No Export Named MyVPC2 found. ~」 「MyVPC2という値を見つからないよ!」 と言われていました。。
テンプレートファイル(失敗ver)
①ネットワークレイヤー ②セキュリティレイヤー Resources: MyVPC2: Type: AWS::EC2::VPC Resources: secGroupName: Type: AWS::EC2::SecurityGroup ~ VpcId: !ImportValue MyVPC2 ~ ~ ※ Outputセクション記載忘れたため セキュリティレイヤーで「MyVpc2」を定義したが 「MyVpc2」が見つからなかった
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
テンプレートファイル(修正ver)
①ネットワークレイヤー 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: ~
無事デプロイが 完了しました
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
まとめ) CFnを使用してみて、何を学べたか? - AWSリソース間の依存関係を把握できた。 コンソール画面操作では、依存関係を意識せずとも作成できるようUIUXが整っている。 - IaCのメリットを理解できた。 テンプレートファイルをGithubで共有できるのは、便利!
最後まで、ご清聴ありがとうございました! 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