Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

AWS Black Belt Tech シリーズ 2015 - AWS CloudFormation

16,021 views

Published on

2015年11月18日に放送したAWS CloudFormationの回の資料です。今後の予定は以下をご覧ください。
http://aws.amazon.com/jp/about-aws/events/#webinar

Published in: Technology
  • Be the first to comment

AWS Black Belt Tech シリーズ 2015 - AWS CloudFormation

  1. 1. 1 AWS CloudFormation AWS Black Belt Tech Webinar 2015 アマゾン ウェブ サービス ジャパン株式会社 部長/ソリューションアーキテクト 瀧澤 与一 2015/11/18
  2. 2. 2 Agenda • AWS CloudFormationの概要 • さまざまな利用パターン • スタック、テンプレート • CloudFormer • AWS CloudFormation Designer • AWS CloudFormationでの運用 • まとめ
  3. 3. 3 Agenda • AWS CloudFormationの概要 • さまざまな利用パターン • スタック、テンプレート • CloudFormer • AWS CloudFormation Designer • AWS CloudFormationでの運用 • まとめ
  4. 4. 4 AWSを大規模で利用する時に、よくあるケース • AWSリソースの管理・構築を効率化したい。 • 開発標準に基づいてインフラの作成・更新をしたい。 • リソースの依存関係やプロビジョニングの順序を確 実にしたい。 • ソフトウェアのようにインフラもバージョン管理し たい。 そんなとき、「AWS CloudFormation」
  5. 5. 5 AWS CloudFormation • EC2やELBといったAWSリソースの環境構築を、設定ファイル(テン プレート)を元に自動化できるサービス • テンプレートを自由に作成できるため、自分好みのシステム構成を自 動的に構築できる • テンプレートには起動すべきリソースの情報をJSONフォーマットのテ キスト形式で記述する テンプレートベースの プロビジョニング インフラを コード化 宣言・柔軟性 簡単に利用可能
  6. 6. 6 スタック S3 CloudWatch Elastic Load Balancing EC2 EC2 Auto Scaling SNS テンプレート Cloud Formation テンプレートに基づき 各リソースが起動 AWS CloudFormationのイメージ
  7. 7. 7 AWS CloudFormationとテンプレート、スタックの関係 テンプレート AWS CloudFormation スタック JSON形式のテキスト パラメータの定義 リソースの作成 実際の設定 AWSサービスの設定 サービス全体での統合 サービスのイベント管理 カスタマイズ フレームワーク スタックの作成 スタックの更新 エラー検知とロールバック
  8. 8. 8 利用シーンと利点 • 一度テンプレートを作成すれば、同じ構成を再現できる – 開発環境の構築 – Blogシステム、Webシステム、ゲームプラットフォームなど、同じ仕組み でアプリやデータが異なるようなもの • ベストプラクティスが盛り込まれたテンプレートが使用可能 – 複数のAZを跨いでリソースを配置する可用性の高い構成 – セキュリティ要件を満たす上で必須のソフト・設定が入った構成 • 起動時にパラメータを渡せる – 例えばDBのエンドポイントをEC2に渡せる
  9. 9. 9 利用料金 • AWS CloudFormationの利用自体は無料 • テンプレートに従って構築された各AWSサービスに対して課金 – EC2インスタンス、ELB、RDSなど起動したリソースの費用が請求される
  10. 10. 10 AWSから提供されているデプロイ&マネージメント 関連サービス MonitorProvisionDeployTestBuildCode Elastic Beanstalk OpsWorks Cloud Watch Cloud Formation Code Deploy Code Commit Code Pipeline 導入の容易さ フレキシブル
  11. 11. 11 AWS CloudFormationによるDR事例 アステラス製薬株式会社様 http://aws.amazon.com/jp/solutions/case-studies/astellas/
  12. 12. 12 最近のアップデート 日付 主なアップデート 2015/11/4 AWS::EC2::VolumeリソースにおけるAutoEnableIOプロパティサ ポート 2015/10/1 CodeDeploy, SimpleAD, EC2::PlacementGroup, SpotFleet, Lambda, CloudWatch Logs, RDS::DBCluster, WorkSpacesの追加 2015/10/1 ElastiCache, OpsWorks, S3, IAM関連のアップデート 2015/10/1 AWS CloudFormation Designerの提供開始 2015/8/24 AWS::EC2::VPCEndpoint の追加。ElasticBeansTalk, Lambda, OpsWorks, RDS, S3関連のアップデート 2015/8/3 AWS:EFS関連の追加 http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/ReleaseHistory.html
  13. 13. 13 Agenda • AWS CloudFormationの概要 • さまざまな利用パターン • スタック、テンプレート • CloudFormer • AWS CloudFormation Designer • AWS CloudFormationでの運用 • まとめ
  14. 14. 14 AWS CloudFormationの利用のパターン 1. クイックスタートで公開されているテンプレー トを使用する。 2. サンプルコード&テンプレートを利用する。 3. 自らテンプレートを作成する。 – JSON形式でテンプレートを記述する。 – CloudFormerを利用する。 – AWS CloudFormation Designerを利用する。
  15. 15. 15 AWS CloudFormationの利用のパターン 1. クイックスタートで公開されているテンプレー トを使用する。 2. サンプルコード&テンプレートを利用する。 3. 自らテンプレートを作成する。 – JSON形式でテンプレートを記述する。 – CloudFormerを利用する。 – AWS CloudFormation Designerを利用する。
  16. 16. 16 • エンタープライズアプリケーションをAWS上で動かす 場合の、セキュリティや可用性を考慮したベストプラク ティス – マイクロソフト、SAP、トレンドマイクロなどの製品をサポート。 – 15分程度でエンタープライズアプリケーションをAWS上に展開可能。 – 設計ガイドと、AWS CloudFormationのテンプレートを提供。カスタマイ ズも可能。 – FAQ, GitHUBリポジトリ、ディスカッションフォーラムを提供。 – https://aws.amazon.com/jp/quickstart/ または、 https://aws.amazon.com/jp/architecture/ クイックスタートリファレンス
  17. 17. 17 • AWSのベストプラクティス に基づき、250のメール ボックスを展開可能なAWS CloudFormation テンプ レートを提供。 • クイックスタートガイドで は、2,500、10,000のメー ルボックスをサポートする 場合の、耐障害性が考慮さ れた設計方法を記載。 たとえば、 Exchange Serverの場合(1/3)
  18. 18. 18 クイックスタート (所要時間:15分) と、 カスタムデプロイ の2種類を提供 たとえば、 Exchange Serverの場合(2/3) ① CloudFormationテン プレートを選択 ② AD, Exchangeに必要 な設定を入力 ③ 約2時間で構築完了
  19. 19. 19 たとえば、 Exchange Serverの場合(3/3) 提供①:クイックスタートガイド 提供②: AWS CloudFormation テンプレート
  20. 20. 20 カテゴリ プロダクト 解説 マイクロソフト Web Application Proxy and ADFS Web Application Proxy および Active Directory Federation Services (AD FS) を、新規または既存の AWS インフラストラク チャにデプロイ Lync Server 2013 小規模または中規模の Microsoft Lync Server 2013 環境を AWS に 構築して、高い可用性と災害対策を実現 Exchange Server 2013 新規または既存の Amazon VPC のいずれかを選択して、可用性の高 い AWS のアーキテクチャにデプロイ Windows PowerShell DSC Microsoft Windows PowerShell DSC プルサーバーまたはプッシュ サーバー環境を AWS に構築 SharePoint Server 2013 Microsoft SharePoint Server 2013 を SQL Server AlwaysOn Availability Groups with WSFC をデータベース層としてデプロイ SQL Server 2012 and 2014 with WSFC Windows Server Failover Clustering (WSFC) と SQL Server AlwaysOn Availability Groups を活用した高可用性ソリューション Remote Desktop Gateway リモートデスクトップゲートウェイと RDP による保護されたリモー ト管理ソリューション Active Directory Domain Services クラウドのみまたはハイブリッドアーキテクチャを選択可能 2015/11/19現在で提供されている クイックスタートリファレンス(マイクロソフト)
  21. 21. 21 カテゴリ プロダクト 解説 SAP SAP Business One, version for SAP HANA SAP Business One の SAP HANA バージョンを、クラウド の新規または既存の AWS インフラストラクチャにデプロイ SAP HANA 複数ノードの SAP HANA クラスターを AWS に構築 Trend Micro Deep Security Trend Micro Deep Security 9.5 をデプロイします。このソ リューションは、新規または既存の AWS インフラストラク チャ MongoDB 柔軟でスケーラブル、かつコスト効率の優れた方法で MongoDB を AWS にデプロイ Cloudera Enterprise Data Hub Cloudera Director と AWS サービスを統合し、複数ノード の Cloudera Enterprise Data Hub (EDH) クラスターを構 築 Magento Magento Community EditionをAWS上に展開します。 Magentoは、E-コマースWebサイトのためのオープンソース のコンテンツ管理システムです。 2015/11/19現在で提供されている クイックスタートリファレンス(SAP, Security,…)
  22. 22. 22 AWS CloudFormationの利用のパターン 1. クイックスタートで公開されているテンプレー トを使用する。 2. サンプルコード&テンプレートを利用する。 3. 自らテンプレートを作成する。 – JSON形式でテンプレートを記述する。 – CloudFormerを利用する。 – AWS CloudFormation Designerを利用する。
  23. 23. 23 AWS CloudFormationのサンプル テンプレートとスニペット • サンプルテンプレートや、各 AWSサービスの各種構成よそ の宣言方法を示したサンプル アプリケーションフレーム ワーク • AMP や Ruby on Rails など のよく使われるフレームワーク 実験的/コミュニティのサ ンプル • AWS Labs (https://github.com/awslabs) リファレンス実装 • AWS QuickStartや、AWS Test Drive サンプルソリューション • 作成方法を示すサンプル https://aws.amazon.com/jp/cloudformation/aws-cloudformation-templates/
  24. 24. 24 テンプレートとスニペット テンプレート • Auto Scaling • Amazon DynamoDB • Amazon EC2 • Amazon ElastiCache • AWS Elastic Beanstalk • Elastic Load Balancing • AWS Identity and Access Management • AWS OpsWorks • Amazon Relational Database Service • Amazon Redshift • Amazon Route 53 • Amazon Simple Storage Service • Amazon Simple Queue Service • Amazon Virtual Private Cloud テンプレートスニペット • 一般的なテンプレートスニペット • Auto Scaling テンプレートスニペット • AWS CloudFormation テンプレートスニペット • Amazon CloudFront のテンプレートスニペット • Amazon CloudWatch テンプレートスニペット • Amazon CloudWatch Logs テンプレートスニペット • Amazon EC2 テンプレートスニペット • Amazon EC2 Container Service テンプレートスニペット • Amazon Elastic File System サンプルテンプレート • Elastic Beanstalk テンプレートスニペット • Elastic Load Balancing テンプレートのスニペット • AWS Identity and Access Management のテンプレートスニペット • AWS Lambda テンプレート • AWS OpsWorks テンプレートスニペット • Amazon Redshift テンプレートスニペット • Amazon RDS テンプレートスニペット • Amazon Route 53 テンプレートスニペット • Amazon S3 テンプレートスニペット • Amazon SNS テンプレートスニペット • Amazon SQS テンプレートスニペット http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/cfn-sample-templates.html
  25. 25. 25 AWS CloudFormationの利用のパターン 1. クイックスタートで公開されているテンプレー トを使用する。 2. サンプルコード&テンプレートを利用する。 3. 自らテンプレートを作成する。 – JSON形式でテンプレートを記述する。 – CloudFormerを利用する。 – AWS CloudFormation Designerを利用する。
  26. 26. 26 AWS CloudFormationがサポートする主なサービス  Amazon EC2  Amazon EC2 Container Service  AWS Lambda (including event sources – New)  Auto Scaling (including Spot Fleet - New)  Amazon VPC  Elastic Load Balancing  Amazon Route 53  Amazon CloudFront  Amazon RDS  Amazon Redshift  Amazon DynamoDB  Amazon ElastiCache  Amazon RDS for Aurora (New)  Amazon S3  AWS IAM (including managed policies)  Simple AD (New)  Amazon Kinesis  Amazon SNS  Amazon SQS  AWS CloudFormation  AWS CloudTrail  Amazon CloudWatch  AWS Data Pipeline  AWS Elastic Beanstalk  AWS OpsWorks  AWS CodeDeploy (New)  Amazon WorkSpaces (New) http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html
  27. 27. 27 AWS CloudFormation テンプレートの例① { "AWSTemplateFormatVersion" : "2010-09-09", "Resources" : { "HelloBucket" : { "Type" : "AWS::S3::Bucket" } } } HelloBucketというAmazon S3バ ケットを作るテンプレート
  28. 28. 28 AWS CloudFormation テンプレートの例② { "AWSTemplateFormatVersion" : "2010-09-09", "Resources" : { "HelloBucket" : { "Type" : "AWS::S3::Bucket", "Properties" : { "AccessControl" : "PublicRead" } } } } HelloBucketというAmazon S3バ ケットを作るテンプレート ↓ AccessControlに「PublicRead」 を指定。
  29. 29. 29 AWS CloudFormation テンプレートの例③ { "AWSTemplateFormatVersion" : "2010-09-09", "Resources" : { "HelloBucket" : { "Type" : "AWS::S3::Bucket", "Properties" : { "AccessControl" : "PublicRead", "WebsiteConfiguration" : { "IndexDocument" : "index.html", "ErrorDocument" : "error.html" } } } } } HelloBucketというAmazon S3バ ケットを作るテンプレート ↓ AccessControlに「PublicRead」 を指定。 ↓ Webサイトとして公開するために、 index.htmlと、ErrorDocumentの 設定を行う。
  30. 30. 30 Agenda • AWS CloudFormationの概要 • さまざまな利用パターン • スタック、テンプレート • CloudFormer • AWS CloudFormation Designer • AWS CloudFormationでの運用 • まとめ
  31. 31. 31 AWS CloudFormationとテンプレート、スタックの関係 テンプレート AWS CloudFormation スタック JSON形式のテキスト パラメータの定義 リソースの作成 実際の設定 AWSサービスの設定 サービス全体での統合 サービスのイベント管理 カスタマイズ フレームワーク スタックの作成 スタックの更新 エラー検知とロールバック
  32. 32. 32 スタック • テンプレートからプロビジョニングされるリソースの集合のことを スタックと呼ぶ • スタック単位でリソースの管理が可能。スタック破棄を実行すると、 スタックにひもづくリソースを破棄することが可能 • 使用するリソースおよびリソースの構築順は、テンプレートの依存 関係からCloudFormationが自動的に決定 Web Server App Server スタック これらを一度に生成・破棄可能
  33. 33. 33 スタックの起動方法 • AWS Management Consoleから起動 • コマンドラインツールも利用可能 – AWS Command Line Tool:http://aws.amazon.com/cli/ • 各種SDKでもサポート – Java : http://aws.amazon.com/jp/sdkforjava/ – .NET : http://aws.amazon.com/jp/sdkfornet/ – PHP : http://aws.amazon.com/jp/sdkforphp/ – Ruby : http://docs.aws.amazon.com/AWSSdkDocsRuby/latest/DeveloperGuide/ruby-dg- setup.html – JavaScript : http://aws.amazon.com/documentation/sdkforjavascript/ – Python : http://docs.pythonboto.org/en/latest/
  34. 34. 34 AWS Management Consoleによる起動-1
  35. 35. 35 スタックの名前を入力 テンプレートを指定する。 3種類の方法から選択 サンプルを使う場合はこちら 手持ちのテンプレートを使う場合 はこちらを選択しファイルを指定 S3に配置済みのテンプレートを 指定する場合はこちら AWS Management Consoleによる起動-2
  36. 36. 36 テンプレートによってはパラ メータの入力が必要(後述) AWS Management Consoleによる起動-3
  37. 37. 37 タグをつけることでリ ソースの管理が可能 AWS Management Consoleによる起動-4
  38. 38. 38 起動されるスタックのコ スト見積もりを参照可能 AWS Management Consoleによる起動-5
  39. 39. 39 AWS Management Consoleによる起動-6 クリックするとスタックの 起動処理が開始される
  40. 40. 40 「Events」タブでは各リソースが 順次起動されることを確認できる ステータス「CREATE_IN_PROGRESS」は スタックが起動中であることを意味する AWS Management Consoleによる起動-7
  41. 41. 41 AWS Management Consoleによる起動-8 スタック起動が完了するとステータスが 「CREATE_COMPLETE」に変化する テンプレートによっては「Outputs」 タブにDNS名やEIPの情報などが 出力される場合がある(後述)
  42. 42. 42 AWS Management Consoleによる起動-9 エラーが起きるとスタックはロールバックさ れる。起動したリソースはすべて削除される ロールバックの原因は「Events」タブから 参照できるので、問題を修正し再実行する
  43. 43. 43 AWS CloudFormationとテンプレート、スタックの関係 テンプレート AWS CloudFormation スタック JSON形式のテキスト パラメータの定義 リソースの作成 実際の設定 AWSサービスの設定 サービス全体での統合 サービスのイベント管理 カスタマイズ フレームワーク スタックの作成 スタックの更新 エラー検知とロールバック
  44. 44. 44 { "AWSTemplateFormatVersion" : "2010-09-09", "Description" : “Sample", "Parameters" : { "KeyName" : { "Description" : “Sample key, "Type" : "String" } }, "Mappings" : { }, "Resources" : { "Ec2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "SecurityGroups" : [ { "Ref" : "InstanceSecurityGroup" } ], "KeyName" : { "Ref" : "KeyName" }, "ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "AMI" ]} } }, "InstanceSecurityGroup" : { "Type" : "AWS::EC2::SecurityGroup", "Properties" : { "GroupDescription" : "Enable SSH access via port 22", "SecurityGroupIngress" : [ { "IpProtocol" : "tcp", "FromPort" : "22", "ToPort" : "22", "CidrIp" : "0.0.0.0/0" } ] } } } } テンプレート • AWS CloudFormationの心臓部 • スタック構築の設計図 – どのリソースをどう起動するかがすべ て記述されている • JSONフォーマットで記述
  45. 45. 45 サンプルテンプレート • テンプレートのサンプルを利用可能 http://aws.amazon.com/jp/cloudformation/aws-cloudformation-templates/
  46. 46. 46 { "AWSTemplateFormatVersion" : “2010-09-09", "Description" : "Valid JSON strings up to 4K", "Parameters" : { set of parameters }, "Mappings" : { set of mappings }, “Conditions" : { set of conditions }, "Resources" : { set of resources }, "Outputs" : { set of outputs } } テンプレートのバージョン テンプレートの詳細(説明文) CloudFormation実行時にユーザ入力を求める パラメータを定義する (KeyPairの名前や、DBのユーザ名など) Hashtableのようなもの キーに応じて値を特定出来る (例:リージョンに応じたAMI-IDなど) EC2やRDSなど、スタックを構成する リソースを定義 スタック構築後にCloudFormationから出力させ る値(例:DNS名やEIPの値など) 条件名と条件判断内容を登録する。この条件名は Resourcesなどでリソース作成時に利用できる。 テンプレートの要素
  47. 47. 47 { "AWSTemplateFormatVersion" : “2010-09-09", "Description" : "Valid JSON strings up to 4K", "Parameters" : { set of parameters }, "Mappings" : { set of mappings }, “Conditions" : { set of conditions }, "Resources" : { set of resources }, "Outputs" : { set of outputs } } Parameters CloudFormation実行時にユーザ入力を求める パラメータを定義する (KeyPairの名前や、DBのユーザ名など)
  48. 48. 48 "Parameters": { "Age":{ "Type":"Number", "Default" : "30", "MinValue": "20", "MaxValue": "60", "Description":"input your age." }, "FirstName":{ "Type":"String", "Description":"input your first name." }, "MyKeyName": { "Description" : "Input your key pair.", "Type" : "String" } }, Parametersとは • スタック構築時に値を定義することができる • データ型、デフォルト値、最大最小値など型が設定可能
  49. 49. 49 プロパティ 内容 Type データ型 “String” “Number” “CommaDelimitedList” Default デフォルト値 NoEcho 入力時に*****となる(パスワードなどに使用) AllowedValues 入力可能値の一覧指定 (例:[“true”,”false”] ) AllowedPattern 正規表現で入力可能パターンを指定(例:[a-zA-Z]*) MaxLength 最大文字数 MinLength 最小文字数 MaxValue 最大値 MinValue 最小値 Description プロパティの詳細説明 ConstraintDescription 入力した値がAllowedPatternやMaxLengthなどの制約に引っかかった時に表示する説明 (どのような制約があるかの説明を記述) • 以下のプロパティが利用可能 Parametersのプロパティ
  50. 50. 50 “Resources” : { “MyServer”:{ “Type":“AWS::EC2::Instance", “Properties” : { “KeyName”: { “Ref” : “MyKeyName”}, "Tags": [ { “Key”: “OwnerAge”,“Value”: { “Ref”: “Age” } }, { “Key": “OwnerName",“Value”: { “Ref”: “FirstName” } } ], }}} “Ref”を使うとパラメータの 値を参照することができる Parametersの参照 • パラメータの値は、テンプレート中で”Ref”により参照可能 • ユーザ名やパスワードなど、ユーザ入力させたい項目に便利
  51. 51. 51 http://docs.amazonwebservices.com/AWSCloudFormation/latest/UserGuide/ index.html?intrinsic-function-reference.html Function • パラメータの参照やMapの参照などの際はFunctionを利用する • Parameterの取得に利用した”Ref”もFunctionのひとつ • 大別して8種類が用意されている – Ref → パラメータを参照する – Fn::Base64 → 文字列をBase64エンコードする – Fn::FindInMap → Mapから値を取り出す – Fn::GetAtt → リソースに付随する値を取得する。例)"Fn::GetAtt" : [ "MyELB" , "DNSName"] – Fn::GetAZs → 指定したリージョンのアベイラビリティゾーンを取得する – Fn::Join → 文字列を結合する。例)“Fn::Join” : [ “:”, [ “a”, “b”] ] は 「a:b」を返す – Fn::Select → Index値に応じた値をListから選択する。 例) { “Fn::Select” : [ “1”, [ “Jan”, “Feb”, “Mar”, “Apr”, “Jun” ] ] } は”Feb”を返す – Condition Functions → Fn::IfやFn::Orなどの条件分岐関連Function群
  52. 52. 52 http://docs.aws.amazon.com/AWSCloudFormation/latest/ UserGuide/pseudo-parameter-reference.html 疑似パラメータ参照(Pseudo Parameter) • あらかじめ定義された擬似パラメータ群で“Ref”により参照できる • 利用可能なパラメータは下記の通り – AWS::Region → リージョン名を取得 – AWS::StackId → スタックIDを取得 – AWS::StackName → スタック名を取得 – AWS::AccountId → AWSアカウントIDを取得 – AWS::NotificationARNs → notification Amazon Resource Names(ARNs)を取得 – AWS::NoValue → 指定されたプロパティを無視するようCloudFormationに伝える 例) “Resources" : { “MyServer":{ “Type":“AWS::EC2::Instance", “Properties” : { “KeyName”: { “Ref” : “AWS::StackName”}, “Tags” : { “Ref” : “AWS::Region”} }}} "DBSnapshotIdentifier" : { "Fn::If" : [ "UseDBSnapshot", {"Ref" : "DBSnapshotName"}, {"Ref" : "AWS::NoValue"} ]}  UseDBSnapshotがTrueのとき 「DBSnapshotIdentifier」としてDBSnapshotNameの値を使う  UseDBSnapshotがFalseのとき CloudFormationはプロパティ「DBSnapshotIdentifier」が定義され ていないものとして動作する(=DBSnapshotIdentifierを無視する)
  53. 53. 53 { "AWSTemplateFormatVersion" : “2010-09-09", "Description" : "Valid JSON strings up to 4K", "Parameters" : { set of parameters }, "Mappings" : { set of mappings }, “Conditions" : { set of conditions }, "Resources" : { set of resources }, "Outputs" : { set of outputs } } Mappings Hashtableのようなもの キーに応じて値を特定出来る (例:リージョンに応じたAMI-IDなど)
  54. 54. 54 "Mappings" : { "RegionTable" : { "us-east-1" : { "AMI" : "ami-8c1fece5“, “KeyPair” : “myKey-east” }, "us-west-1" : { "AMI" : "ami-3bc9997e“, “KeyPair” : “myKey-west” }, "ap-northeast-1" : { "AMI" : "ami-300ca731“, “KeyPair” : “myKey-japan” }}}, Mappingsにテーブルの定義を行う (この例の場合、”RegionTable”という 名称でMappingを定義) Mappingsとは • キーと値のマッピングテーブルを管理できる • リージョンやユーザ入力パラメータによって、値が変わるものに利用 • Mappingsを利用することでテンプレートの再利用性が向上 Regionが”ap-northeast-1”であれば、 AMI IDは”ami-300ca731”でキーペアの 名前は”myKey-japan”とする Regionが”us-west-1”であれば、AMI ID は”ami-3bc9997e”でキーペアの名前 は”myKey-west”とする
  55. 55. 55 Mappingsの使い方 • Functionの”Find::InMap”を使って値を取得 例)"Fn::FindInMap" : [ "MapName", "Key", "Value"] • MapName,key,Valueには”Ref”が利用可能 "Mappings" : { "RegionTable" : { "us-east-1" : { "AMI" : "ami-8c1fece5“, “KeyPair” : “myKey-east” }, “us-west-1” : { “AMI” : “ami-3bc9997e“, “KeyPair” : “myKey-west” }, "ap-northeast-1" : { "AMI" : "ami-300ca731“, “KeyPair” : “myKey-japan” } } }, “Fn::FindInTemplate” "Parameters": { “region":{ "Type":"String", "Description":”input your region selection." }} “Resources" : { “MyServer":{ “Type":“AWS::EC2::Instance", “Properties” : { “ImageId”: { “Fn:FindInMap” : [ “RegionTable” , { “Ref” : “region” },“AMI” ] }, } } } リージョン名はユーザ入力 入力されたリージョンに合致す るAMIの値を取得する ユーザ入力が”ap-northeast-1”の場合、最 終的な戻り値は”ami-300ca731”となる
  56. 56. 56 { "AWSTemplateFormatVersion" : “2010-09-09", "Description" : "Valid JSON strings up to 4K", "Parameters" : { set of parameters }, "Mappings" : { set of mappings }, “Conditions" : { set of conditions }, "Resources" : { set of resources }, "Outputs" : { set of outputs } } Conditions 条件名と条件判断内容を登録する。この条件名は Resourcesなどでリソース作成時に利用できる。
  57. 57. 57 "Parameters" : { "EnvType" : { "Description" : "Environment type.", "Default" : "test", "Type" : "String", "AllowedValues" : [“production", "test"], "ConstraintDescription" : "must specify prod or test." } }, "Conditions" : { "CreateProdResources" : {"Fn::Equals" : [{"Ref" : "EnvType"}, “production"]} }, Conditionsとは • 条件名と成立条件を列挙 • Resourcesセクションなどで、『ある条件が成立しているときのみリ ソースを起動』といった条件ベースの制御が可能 • 本番環境と検証環境で構成が異なる場合に便利 EnvTypeパラメータの値が”production”であれ ば、CreateProdResources条件が成立 パラメータEnvTypeの値は、『production』 『test』のいずれかをユーザが入力する
  58. 58. 58 "Resources" : { "EC2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "AMI" ]} }}, "NewVolume" : { "Type" : "AWS::EC2::Volume", "Condition" : "CreateProdResources", "Properties" : { "Size" : "100", "AvailabilityZone" : { "Fn::GetAtt" : [ "EC2Instance", "AvailabilityZone" ]} }}, “MountPoint” : { “Type” : “AWS::EC2::VolumeAttachment”, “Condition” : “CreateProdResources”, “Properties” : { “InstanceId” : { “Ref” : “EC2Instance” }, “VolumeId” : { “Ref” : “NewVolume” }, “Device” : “/dev/sdh” }}} Conditionsとは CreateProdResourcesが成立している ときに限り、本番環境のみに存在する EBSをアタッチする CreateProdResourcesが成立している ときに限り、本番環境のみで利用する EBSボリュームをプロビジョニング • Resourcesで”Condition”を指定すると、指定した条件が成立している 場合に限り、そのリソースが起動されるようになる。
  59. 59. 59 { "AWSTemplateFormatVersion" : “2010-09-09", "Description" : "Valid JSON strings up to 4K", "Parameters" : { set of parameters }, "Mappings" : { set of mappings }, “Conditions" : { set of conditions }, "Resources" : { set of resources }, "Outputs" : { set of outputs } } Resources EC2やRDSなど、スタックを構成する リソースを定義
  60. 60. 60 “Resources" : { "MyInstance": { "Type": "AWS::EC2::Instance", "Properties": { "DisableApiTermination": "FALSE", "ImageId": "ami-a1b6fda0", “InstanceType": "t1.micro", "KeyName": { "Ref": "MyKeyName" } , "Monitoring": "false", } } } • EC2やELB, RDSなど、起動するサービスを指定 • リソースごとに決められたプロパティを設定する Resourcesとは リソースタイプの定義 リソースごとのプロパティ
  61. 61. 61 リソースタイプ • CloudFormationで利用可能なリソースタイプ。最新のリストはWeb を参照してください。 http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html
  62. 62. 62 Attributes • リソースの振る舞いや関係を制御する • DeletionPolicy – スタック削除時のリソースの扱い(Delete (Default) / Retain / Snapshot) • DependsOn – リソース間の依存関係を明示的に記述 • Metadata • UpdatePolicy – AWS::AutoScaling::AutoScalingGroupリソースのみ – Auto ScalingのRolling Updateでの挙動を制御 • MaxBatchSize、MinInstancesInService、PauseTime
  63. 63. 63 { "AWSTemplateFormatVersion" : “2010-09-09", "Description" : "Valid JSON strings up to 4K", "Parameters" : { set of parameters }, "Mappings" : { set of mappings }, “Conditions" : { set of conditions }, "Resources" : { set of resources }, "Outputs" : { set of outputs } } スタック構築後にCloudFormationから出力させ る値(例:DNS名やEIPの値など) Outputs
  64. 64. 64 Outputsとは • スタック構築後に取得・表示したい情報の定義 • 例えばアクセスURLや、DBの通信先情報、作ったIAMユーザー名など、 あとで使用するもの • マネジメントコンソールから確認できるので、スタックに関する情報 を出力すると便利(キーペア名、AZ、インスタンスIDなど)
  65. 65. 65 "Outputs" : { "InstanceId" : { "Description" : "InstanceId of the newly created EC2 instance", "Value" : { "Ref" : "Ec2Instance" } }, "AZ" : { "Description" : "Availability Zone of the newly created EC2 instance", "Value" : { "Fn::GetAtt" : [ "Ec2Instance", "AvailabilityZone" ] } }, "ApplicationURL" : { "Description" : "URL of running web application", "Value" : { "Fn::Join": ["", [ "http://", { "Fn::GetAtt": [ "Ec2Instance" , "PublicIp"] } , "/index.html"] ] } } } 出力データの名称を定義 説明 値の指定 Functionを使って文字列を加工 Outputsの定義
  66. 66. 66 • リソース定義にEC2インスタンスが必須ではない – DB構築だけ、オートスケールだけ、アラーム設定だけでもOK • 参照関係があると、依存関係があるとみなされる。相互参照や循環参 照はエラーとなる • 参照関係がある部分は、参照の整合性が取れるよう起動順を CloudFormationが決定(Depends onで明示的に指定も可) • スタックを破棄すると、スタックにひもづくリソースは破棄される – ただし”DeletionPolicy”を”Retain”にすると破棄されない テンプレートのTips "Resources" : { "myS3Bucket" : { "Type" : "AWS::S3::Bucket", "DeletionPolicy" : "Retain" }}
  67. 67. 67 • CloudFormationで生成されたリソースには自動でスタック名などの タグが付与される • 管理者がリソースを識別できるよう、明示的なタグの付与を推奨 • テンプレートは入れ子にすることが可能。あるテンプレートから、別 のテンプレートを呼ぶことができる – リソースタイプに “AWS::CloudFormation::Stack“を指定しURLを指定すると、 そのテンプレートを読み込む – 呼び出された側に対するParameterの引き渡しや、呼び出し側で呼び出された側の Outputsを参照することが可能 テンプレートのTips "Resources" : { "WebServer" : { "Type" : "AWS::CloudFormation::Stack", "Properties" : { "TemplateURL" : “https://s3.amazonaws.com/hoge.template" ]]}, "Parameters" : { "KeyName" : { "Ref" : "KeyName" }, "InstanceType" : { "Ref" : "InstanceType"}, }},
  68. 68. 68 • JSONフォーマットでスタックの情報を記載 • リソース間の依存関係はCloudFormationが自動判別する • Parameterを利用すれば、パラメータのユーザ入力を受け取れる • Management Console等に値を出力したい場合はOutputsに記述する • タグを設定してリソースの管理性を高める テンプレートのまとめ
  69. 69. 69 Agenda • AWS CloudFormationの概要 • さまざまな利用パターン • スタック、テンプレート • CloudFormer • AWS CloudFormation Designer • AWS CloudFormationでの運用 • まとめ
  70. 70. 70 EC2 EC2 AutoScaling テンプレート CloudFormer CloudFormer • 構築済みの環境からテンプレートを作成するツール(Webアプリ) • テンプレート作成のベースを構築するのに有益
  71. 71. 71 CloudFormerの特徴 • CloudFormerは全てのCloudFormationのリソースをサポート • どのリソースをテンプレートに含めるか完全に制御可能 • リソースを選択すると、従属するリソースも自動選択(変更可) – 例えば、EC2インスタンスを選択すると、EC2インスタンスが必要とするセキュリ ティグループもテンプレートに含まれるようになる • EC2インスタンスを選択すると、そのインスタンスが起動された元の AMIが指定される – 構築済みのイメージを利用したい場合は、生成されたテンプレートのAMI IDを確 認する。意図しないものであれば修正を行う • CloudFormerで生成されたテンプレートを手修正し、最終的なテンプ レートとして利用することを推奨
  72. 72. 72 CloudFormerの使い方 1. 既存の手順やツールで必要なリソースを構成 2. CloudFormationの「Choose Template」か ら、「Tools - CloudFormer」を選択 3. CloudFormerがEC2のt1.microインスタンス で動作する 4. CloudFormerのURLにアクセスし、画面の指 示通りにテンプレート化するリソースを指定 5. 生成されたテンプレートはAmazon S3に保存 される 6. 作業が終わったら、CloudFormerのスタック はDeleteを推奨
  73. 73. 73 CloudFormerスタックの起動・アクセス
  74. 74. 74 CloudFormerアプリケーション
  75. 75. 75 CloudFormerによるテンプレート生成 • テンプレート化を行うリソースのリージョンを指定 • チェックを入れて指定したリソースが含まれるテンプレートができる • 必要に応じてParameterの利用やOutputsの定義を行う
  76. 76. 76 Agenda • AWS CloudFormationの概要 • さまざまな利用パターン • スタック、テンプレート • CloudFormer • AWS CloudFormation Designer • AWS CloudFormationでの運用 • まとめ
  77. 77. 77 AWS CloudFormation Designer • テンプレート内のリ ソースを可視化 • テンプレートの修正を ドラッグ&ドラッグで 対応可能 • サンプルテンプレート のカスタマイズが容易
  78. 78. 78 AWS CloudFormation Designer ツールバー Resources JSONエディタ Canvas
  79. 79. 79 CloudFormation Designer ツールバー ツールバーでメニューが開きます。 • Open: ローカルファイルや、S3から開 く。 • ※既存のスタックから、Designerで表示 させることも可能です。 • Save: ローカルファイル、S3への保存 • Validation:テンプレートのチェック • Refresh: JSONテキストファイルの更新 を行う場合 Validation Refresh
  80. 80. 80 CloudFormation Designer Resources • サポートされているリ ソースが表示されます。 • サービスごとにカテゴ ライズ • ドラッグ&ドロップで Canvasに構成を書けま す
  81. 81. 81 CloudFormation Designer canvas ① サービスごとのコンテナリソース e.g. EC2 VPCs, subnets ② リソース間の接続 e.g. Ref, DependsOn, GetAtt ③パラメータ編集などのメニュー Code/Clone/Delete/Docs
  82. 82. 82 CloudFormation Designer JSONエディタ • Ctrl+Space : リソースのプロパティ で設定可能な項目が、リスト形式で表 示されます。 • Ctrl+F : 検索 • Ctrl+ : 適切なインデントと改行で フォーマット • Ctrl+Shift+ : 余計な空白の削除
  83. 83. 83 CloudFormerで作成したテンプレートを CloudFormation Designerで表示することも可能
  84. 84. 84 Agenda • AWS CloudFormationの概要 • さまざまな利用パターン • スタック、テンプレート • CloudFormer • AWS CloudFormation Designer • AWS CloudFormationでの運用 • まとめ
  85. 85. 85 CloudFormationと運用ポリシー • CloudFormationはAWSリソースの構築を自動化するツール • スタック単位でリソースの起動・破棄が行えるため、類似の環境を 複数構築する場合に非常に有益 • アプリケーションの管理については、CloudFormation自体では制 御されないため、デプロイ方式について考慮が必要
  86. 86. 86 CloudFormationのベストプラクティス 計画 •ライフサイクルと所有権によるス タックの整理 •テンプレートを再利用して複数の環 境にスタックを複製する •すべてのリソースタイプのクォータ を確認する •ネストされたスタックを使用して共 通テンプレートパターンを再利用す る テンプレートの作成 •テンプレートに認証情報を埋め込ま ない •AWS 固有のパラメータタイプの使 用 •パラメータの制約の使用 •AWS::CloudFormation::Init を使 用して Amazon EC2 インスタンス にソフトウェアアプリケーションを デプロイする •テンプレートを使用する前に検証す る スタックの管理 •AWS CloudFormation ですべての スタックリソースを管理する •スタックポリシーを使用する •AWS CloudTrail を使用して AWS CloudFormation 呼び出しを記録す る •コードの確認とリビジョン管理を使 用してテンプレートを管理する
  87. 87. 87 アプリケーション展開のやりかたの一例 • CloudFormationではインフラ環境の構築までを行い、アプリケー ションは手作業を含む別の方法でデプロイする – CloudFormationにはアプリを意識させないパターン • アプリのデプロイまで完了した”Baked-AMI”を作成しておき、 CloudFormationではそのAMIを利用して環境を構築する – 全部入りのAMIを用意しておくパターン • 汎用的なAMIを利用し、インスタンス起動時に必要なソフトウェア 群をセットアップする – スタックの起動時に都度ソフトウェアをダウンロードし、都度インストールす るパターン
  88. 88. 88 AWS CloudFormationのヘルパー • スタックの一部として作成する Amazon EC2 インスタンスでソフトウェ アをインストールしたりサービスを開始したりするために使用できる Python ヘルパースクリプトのセットが用意されています。 • cfn-init: – リソースメタデータの取得と解釈、パッケージのインストール、ファイルの作成、およびサービス の開始で使用されます。 • cfn-signal: – AWS CloudFormation CreationPolicy または WaitCondition にシグナルを送信するためのシン プルなラッパー。スタック内の他のリソースと、準備ができたアプリケーションを同期させること ができます。 • cfn-get-metadata: – リソースに対して定義されたすべてのメタデータ、またはリソースメタデータの特定のキーやサブ ツリーへのパスを簡単に取得できるようにするラッパースクリプト。 • cfn-hup: – メタデータへの更新を確認し、変更が検出されたときにカスタムフックを実行するデーモン。 http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/cfn-helper-scripts-reference.html
  89. 89. 89 cloud-init (AWS::CloudFormation::Init ) • Amazon Linuxに入っている、初期設定ツール • EC2インスタンスの起動時に、userdataに記述されたスクリプトを 実行する – 「#!」 で始まる文字列の場合のみ、スクリプトを実行 • ロケール変更、アプリインストール、ファイル書き換えなどが可能 • RHELでも利用可能 • WindowsではEC2ConfigService https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/cfn-init.html
  90. 90. 90 cloud-init User Dataに定義 Cloud-initがuserdataを 読み込む 読み込んだスクリプトを 実行 EC2インスタンス起動
  91. 91. 91 "Resources" : { "Ec2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "KeyName" : { "Ref" : "KeyName" }, "SecurityGroups" : [ { "Ref" : "InstanceSecurityGroup" } ], "ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "AMI" ]}, "UserData" : { "Fn::Base64" : { "Fn::Join" : ["",[ "#!/bin/bash -ex","n", "yum -y install gcc-c++ make","n", "yum -y install mysql-devel sqlite-devel","n", "yum -y install ruby-rdoc rubygems ruby-mysql ruby-devel","n", "gem install --no-ri --no-rdoc rails","n", "gem install --no-ri --no-rdoc mysql","n", "gem install --no-ri --no-rdoc sqlite3","n", "rails new myapp","n", "cd myapp","n", "rails server -d","n", "curl -X PUT -H 'Content-Type:' --data-binary '{"Status" : "SUCCESS",", ""Reason" : "The application myapp is ready",", ""UniqueId" : "myapp",", ""Data" : "Done"}' ", """, {"Ref" : "WaitForInstanceWaitHandle"},""n" ]]}} } } EC2InstanceのPropatiesのUserDataを使って、コマンドを実行する方法 EC2起動時のアプリケーション展開とアップデート
  92. 92. 92 AWS CloudFormation: アプリケーション展開の例 CloudFront Distribution Amazon Route 53 Elastic Load Balancer S3 Bucket Web ASG Master Standby RR 1 RR 2 RR 3 RR 4 ElastiCache Cluster Web Servers Web Servers Elastic Beanstalk App App
  93. 93. 93 AWS CloudFormation: アプリケーション展開の例 スタックを定義する テンプレートファイル Git Subversion Mercurial Dev Test Prod アプリケーションシステム全体は、 AWS CloudFormationテンプレート に表すことができます。 テンプレートの保存にも バージョン管理システム を利用 複数環境の構築 (開発環境、テスト、 DR環境を同じテンプ レートで行う。)
  94. 94. 94 どのようにスタック、テンプレートを設計するか?
  95. 95. 95 サンプルアーキテクチャ:1つのテンプレート
  96. 96. 96 サンプルアーキテクチャ:個別テンプレート
  97. 97. 97 AWS CloudFormationでの セキュリティ実装の適用例 Bas tion Web Web NAT Web Web Bas tion Private Segment (Web) Public Segment Log Jump Private Segment (DB) Protected Segment Public Subnet (DMZ) Public Subnet (DMZ) Private Subnet (Private) Private Subnet (Private) Private Subnet (Private) Private Subnet (Private) Private Subnet (Protected) Private Subnet (Protected) 1. S3 BucketPolicyの定義 2. CloudTrailの設定とBucketの設置 3. IAM Groupの作成 4. IAM Userの作成とGroupへ所属 5. VPC作成 6. SG、NACL定義 7. RouteTables定義 8. Subnet作成 - Multi-AZ(2AZ@Tokyo)による冗 長性の確保 - ネットワークのセグメントは Public、Private、Protectedに分割 9. InternetGatewayの設置 10.RT、NACL、SG割り当て 11.外部接続用にNAT、Proxyサーバー の設置 Jump Bas tion NAT
  98. 98. 98 EC2の設定 { "Type" : "AWS::EC2::Instance", "Properties" : { "AvailabilityZone" : String, "BlockDeviceMappings" : [ EC2 Block Device Mapping, ... ], "DisableApiTermination" : Boolean, "EbsOptimized" : Boolean, "IamInstanceProfile" : String, "ImageId" : String, "InstanceInitiatedShutdownBehavior" : String, "InstanceType" : String, "KernelId" : String, "KeyName" : String, "Monitoring" : Boolean, "NetworkInterfaces" : [ EC2 Network Interface, ... ], "PlacementGroupName" : String, "PrivateIpAddress" : String, "RamdiskId" : String, "SecurityGroupIds" : [ String, ... ], "SecurityGroups" : [ String, ... ], "SourceDestCheck" : Boolean, "SubnetId" : String, "Tags" : [ EC2 Tag, ... ], "Tenancy" : String, "UserData" : String, "Volumes" : [ EC2 MountPoint, ... ] } } AWS::EC2::Instance http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html セキュリティ関連設定 EC2をAPIを通じてTerminateさせない IAMポリシーの付与 SSHキーペアの指定 Security Groupの設定 Tagによる分類 User Dataによる起動処理 Deployする際は複数AZにまたがる展開を考慮 考慮事項 OSより上のレイヤーにおける機能の実装はUser Dataを用いたcloud-init、cfn-init、もしくはChef等 のツールの利用を検討する
  99. 99. 99 Security Groupの設定 { "Type" : "AWS::EC2::SecurityGroup", "Properties" : { "GroupDescription" : String, "SecurityGroupEgress" : [ Security Group Rule, ... ], "SecurityGroupIngress" : [ Security Group Rule, ... ], "Tags" : [ Resource Tag, ... ], "VpcId" : String } } AWS::EC2::SecurityGroup http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group.html { "CidrIp" : String, "DestinationSecurityGroupId" : String, "FromPort" : Number, "GroupId" : String, "IpProtocol" : String, "ToPort" : Number } { "GroupName" : String "GroupId" : String "IpProtocol" : String "CidrIp" : String "SourceSecurityGroupName" : String "SourceSecurityGroupId" : String "SourceSecurityGroupOwnerId" : String "FromPort" : Number "ToPort" : Number }
  100. 100. 100 EC2:サンプルコード "Host1" : { "Type" : "AWS::EC2::Instance", "Properties" : { "InstanceType" : { "Ref" : "HostInstanceType" }, "KeyName" : { "Ref" : "KeyName" }, "DisableApiTermination" : "True", "Monitoring" : "true", "SubnetId" : { "Ref" : "HostSubnets" }, "ImageId" : { "Fn::FindInMap" : [ "AWSRegionArch2AMI", { "Ref" : "AWS::Region" }, { "Fn::FindInMap" : [ "AWSInstanceType2Arch", { "Ref" : "HostInstanceType" }, "Arch" ] } ] }, "SecurityGroupIds" : [{ "Ref" : "HostSecurityGroup" }] } }, "HostSecurityGroup" : { "Type" : "AWS::EC2::SecurityGroup", "Properties" : { "GroupDescription" : "Enable access to others", "VpcId" : { "Ref" : "VPCId" }, "SecurityGroupIngress" : [ { "IpProtocol" : "tcp", "FromPort" : "22", "ToPort" : "22", "CidrIp" : "0.0.0.0/0"} ], "SecurityGroupEgress" : [{ "IpProtocol" : "tcp", "FromPort" : "22", "ToPort" : "22", "CidrIp" : "0.0.0.0/0"}] } }, APIでのTermination を禁止
  101. 101. 101 Agenda • AWS CloudFormationの概要 • さまざまな利用パターン • スタック、テンプレート • CloudFormer • AWS CloudFormation Designer • AWS CloudFormationでの運用 • まとめ
  102. 102. 102 まとめ • 開発や本運用に必要な、互いに関連する AWS リソースのコ レクションを作成しておき、そのリソースを適切な順序でプ ロビジョニング可能。 • クイックスタートやサンプルテンプレートも充実。 • AWS CloudFormation Degsignerで、ドラッグアンドド ロップインターフェイスを使用して、テンプレートを図とし て視覚化し、編集することも可能。 • 利用料金は無料。EC2やRDSなどリソースの利用料金のみ。
  103. 103. 103 参考資料 ドキュメント https://aws.amazon.com/documentation/cloudformation/ テンプレートの分析 http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-anatomy.html リソースタイプ http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource- type-ref.html コマンドライン(CLI) http://docs.aws.amazon.com/cli/latest/reference/cloudformation/index.html サンプル http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/example- templates.html AWS CloudFormation よくある質問 http://aws.amazon.com/jp/cloudformation/faqs/
  104. 104. 104 公式Twitter/Facebook AWSの最新情報をお届けします @awscloud_jp 検索 最新技術情報、イベント情報、お役立ち情報、お得なキャンペーン情報などを 日々更新しています! もしくは http://on.fb.me/1vR8yWm
  105. 105. 105 Webinar資料の配置場所 • AWS クラウドサービス活用資料集 – http://aws.amazon.com/jp/aws-jp-introduction/
  106. 106. 106 ご参加ありがとうございました。

×