こんにちは、AWSテクニカルトレーナーの江川大地(@daiti0804)です。
本日のAWS Black Belt Tech Webinarでは、AWS IoTをご紹介しますので、ぜひご覧下さい。
11月は、「デプロイ&プロビジョニング月間」というテーマで、AWS上でのアプリケーションデプロイメント自動化やインフラストラクチャ構築自動化に役立つサービス群を紹介しました。ぜひ、今回紹介したサービスを使いこなし、環境構築などにかける負荷を軽減し、コーディングやシステムを差別化をもたらす業務に集中していただければと思います。
本ブログにて、11月にご紹介した資料や皆様からいただいた質問への回答を載せていますのでご確認ください。また質問については、読み取りやすいように一部編集をしたり、補足を行ったりしていますのでご容赦ください。
AWS OpsWorks
AWS Black Belt Tech シリーズ 2015 - AWS OpsWorks from Amazon Web Services Japan
Q1.エージェントとの通信は暗号化されていますか?
A1. はい、暗号化されています。
Q2.SecurityGroupのポート開放などについては意識する必要がありますか?
A2. はい、意識頂く必要がございます。OpsWorksのレイヤーで割り当てるセキュリティグループを設定可能です。こちらで、開放するポートを設定します。
Q3.MicroservicesをOpsWorksで実現する場合、レイヤーを分けるのが一般的でしょうか?スタックを分ける意味は、あまりないと思ってよいですか?各サービスの管理者分けるみたいな意味とか?
A3. 構成に依存しますが、個々のMicro Serviceをレイヤーで定義頂くことで、それぞれのエンドポイントの情報をスタックJSONで参照・管理が可能となります。スタックを分けると、スタックJSONが別になるため、1つのスタックに纏める形の方が良いかと存じます。
Q4.インスタンス内部からAgentCLIを使う必要があるケースはどのようなときですか?
A4. Agent CLIを使うケースは、Chefレシピのデバッグやトラブルシューティング時にご利用頂くとよろしいかと存じます。スタックコマンドでChefレシピを実行、その結果が分かるまでに1分前後かかることがありますので、過去に実行したスタックコマンドを再実行して早く動作確認したい場合などにお使いください。
Q5.オンプレサーバの電源管理もOpsWorksからできるのでしょうか?
A5. OpsWorksエージェントが動作するOS内部で実行可能な処理であれば、Chefレシピにその処理を登録することで、シャットダウン処理等、一部管理可能なこともございます。ですが、電源ボタンを押下する必要がある、あるいはOS内部で実行不可能な処理であれば、OpsWorksで管理することは出来ません。
Q6.エージェントのバージョンは切り戻し可能でしょうか?
A6. はい、切り戻し可能です。
Q7.OpsWorksでAmazon Simple Workflowのアクティビティワーカーを管理することはできますか?
A7. はい、SWFのワーカーをOpsWorksで管理可能です。OpsWorksのマネージメントコンソールでAmazon SWF Flowレイヤーを作成、ワークフローコードを指定、ワーカーの数を指定して起動が可能です。詳細は以下をご覧ください。
https://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/workingapps-creating.html#workingapps-flow
Q8.スタックに登録した、インスタンスは解除可能でしょうか?
A8. 元々OpsWorksの環境外にあったインスタンスで、追加登録されたインスタンスであれば登録解除が可能です。詳細は以下をご覧ください。
https://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/registered-instances-deregister.html
Q9.念のため教えていただきたいのですが、RedHat6は未対応でしょうか?
A9. はい、現状未対応です。
Q10.appレイヤーのblue green deploymentを実現する場合のベストプラクティスは有りますか?
A10. OpsWorksでBlue-Green Deploymentを実現する方法の例については、以下ドキュメントのp9をご参照ください。
https://d0.awsstatic.com/whitepapers/managing-multi-tiered-web-applications-with-opsworks.pdf
AWS CloudFormation
Q1. CloudFormationを実行しロールバックしてエラーだった場合の調査方法はどのように行うのでしょうか?
A1. CloudFormationのスタックイベントを確認し、エラーの発生箇所を特定できます。AWSサポートを契約中の場合は、サポートケースより問い合わせを行うことも可能です。
Q2. CloudFormation実施後例えばRDS上に初期データ登録などのようなことはできるでしょうか?
A2. 初期データをどこに置くのか次第になるかと思います。例えば、CloudFormation実施前に、Amazon RDSへデータを登録し、スナップショットを取得しておけば、CloudFormation実施時に、そのスナップショットを利用して、RDSインスタンスを作成できます。初期データのダンプファイルをAmazon S3に置いた場合、CloudFormationで、RDSとデータ登録用のEC2インスタンスを構築し、RDSインスタンス作成後、EC2インスタンスを起動し、そのユーザーデータを利用して、S3からデータを取得、RDSへデータ登録という手段がとれます。もちろん、CloudFormationによるインフラストラクチャ(RDSインスタンス)の構築と、その後のアプリケーションのデプロイやデータ登録、移行を分けて行うことも、手段の1つですので、お客様のユースケースに併せて選択してください。
Q3. RDS構築後のエンドポイントをElasticBeansTalkにパラメータとして渡すといったことは関数か何かでできるのでしょうか?
A3.可能です。組み込み関数 Fn::GetAttを利用し、CloudFomation内で作成したリソースの情報を取得できます。ですが、AWS Elastic Beanstalkをお使いの場合、AWS Elastic Beanstalk自体の機能でAmazon RDSの作成とエンドポイントの受け渡しが可能です。
Q4. CloudFormationとAWS CLIとの使い分けというのはあるでしょうか?
A4. CloudFormationを利用することで、プロビジョニング用のサーバ管理から解放されます。加えて、リソース間の依存関係などをより簡単に記述することが出来ます。一方で、AWS CloudFormationではサポートしていないリソースを、AWS CLIで作成可能な場合もあるので、リソースの完全なコントロールや柔軟性を重視して、CLIを選択するケースもあります。 また、既存のジョブ管理ツールからAWSリソースを制御したい場合は、CLIを選択するケースもあります。
Q5. ロールバックされた場合、課金はどうなるのでしょうか?例えばEC2インスタンスなど、起動時間に対して課金されるもの。
A5. はい。全体としてスタックが正常に作成されたかどうかに関係なく、テンプレートのインスタンス化時に作成された AWS リソースへの料金が適用されます。
Q6. 一つのMicroSercviceを、一つのスタックで実現する場合、そのMicroServiceを一意に設定できる値が設定できるのでしょうか?具体的には、ELBでマイクロサービス毎にバランシングした際に、どのマイクロサービスにアクセスが割り振られたか知りたいです
A6. CloudFormationで構築するリソースに対して、タグ付けを行うことで可能かと思います。
Q7. EC2インスタンスにWebアプリを乗せる場合、そのアプリについてもCloudFormationで設定できるのしょうか。スタック構築時に、アプリの配置も一緒にやってくれたらな、と期待しています。
A7. CloudFormationで作成するEC2インスタンスにユーザーデータの設定をすることで可能です。
Q8. パラメータ、マップ、条件などで作成するリソースの数を制御できますか?本番環境のWebサーバは4台、開発環境は2台のように。
A8. 条件(Conditions)の設定により可能です。
Q9. テンプレートからテンプレートを呼ぶとき呼び出したテンプレートのOutputの結果を呼出し元テンプレートで変数として参照可能でしょうか?
A9. はい、GetAtt関数を利用して可能です。詳細はコチラをご確認ください。https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-properties-stack.html
Q10. CloudFormer, cloudformation designerでサポートされるリソースとCloudFormation自体でサポートされるリソースは、差分ありますか?
A10. CloudFormerではサポートされるリソースがCloudFormationがサポートするリソースの一部となります。最新の情報については、CloudFormerスタックにアクセスしたときに表示されるWebの画面を確認してください。AWS CloudFormation Dsigner では、AWS CloudFormation のすべてのリソースタイプの図を表示することができます。各リソースは、AWS::EC2::VPCGatewayAttachment リソースタイプのような、コンテナ、スクエアオブジェクト、または接続としてモデル化されます。AWS CloudFormation デザイナー は、[Resource types] ペインに一覧表示されていない特定のリソース (インターネットゲートウェイ、VPC など) に接続すると、これらの接続リソースを作成します。
Q11. テンプレートを入れ子にした場合、あるテンプレートから他のテンプレートの変数(パラメータ、マップ、条件など)を参照できるのでしょうか。
A11.パラメータをOutputsに出力することで可能です。
Q12. CloudFormationを学べる認定トレーニングは、どのトレーニングになりますか?
A12.「Architecting on AWS」および「Systems Operations on AWS」ではCloudFormationの内容が含まれています。ただし、コース内で扱うサービスやアーキテクチャが多岐にわたりますので、CloudFormationに関しては概要の理解をしていただけるレベルでの扱いです。トレーニングコースについての詳細は、こちらのWebページをご覧ください。とりあえずCloudFormationの操作を試したいということであれば、演習用のサイト(セルフペースラボ)も提供しています。いくつか関連するラボがありますので、検索してみてください。
Q13. CloudFormationで構築したときに、Lamdbaを起動することはできますか?
A13. CloudFormationの実行完了時に、Amazon SNSの通知を行うことが出来るので、SNSの通知をイベントとするLambda関数の実行が可能です。
Q14. 組み込み関数 Fn::GetAZs の説明に"アベイラビリティーゾーンへのアクセス権は顧客ごとに異なります_(中略)特定のリージョンのすべてのアベイラビリティーゾーンをハードコーディングする必要はありません。"とありますが、 AWS固有パラメータ AWS::EC2::AvailabilityZone::Name にもアカウントごとの有効なAZが反映されているという認識で正しいでしょうか?
A14. はい。AWS固有パラメータ AWS::EC2::AvailabilityZone::Name にもアカウントごとに有効なAZが反映されます。
Q15. Parametersに日本語は利用可能でしょうか?
A15. 現時点において、Parametersに日本語を利用することはできません。
Q16. CloudFormerアプリケーションで全出力指定すると、よくエラーで発生してテンプレート出力ができないのです。回避するは、方法あるでしょうか。インスタンスタイプをあげると解決したりするものでしょうか?
A16. CloudFormerはt1.microのインスタンスで動作します。CloudFormer自体もCloudFormationテンプレートで提供され、インスタンスタイプなどのカスタマイズは可能です。個別のエラーの内容についてはお問い合わせください。
Q17.CloudFormationでエラーが発生した場合に、原因究明と対策をどのように取っていけば良いのかがわからないのですが、何か良い手法(取っ掛かり)等についてのアドバイスを頂けますでしょうか?
A17. 申し訳ありませんが、この状況からは回答を導けないのですが、下記のトラブルシューティングガイドを参照ください。
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/troubleshooting.html
AWS Elastic Beanstalk
Q1. ebcliって、管理対象のenvironmentの切り替えできます?BlueGreenDeployとかするならそういう機能がほしいですー。
A1. eb deployにはenvironment nameを付けるオプションがございますし、 gitのこのブランチとEBのこの環境を関連付ける、ということで、eb useというものがございます。下記のようなイメージです。
~/eb$ git checkout master
~/eb$ eb use prod
~/eb$ git checkout develop
~/eb$ eb use dev
詳しくはこちらをご覧ください。
http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/eb-cli3-getting-started.html
また、eb swapでのCNAMEのSwapはこちらをご覧ください。
http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb3-swap.html
Q2. スケール設定をある時間は0にするということはできるか?
A2. Time-based Scaling機能を使いMinとMaxを0にしていただくことで設定可能です。但し、その為にはRolling Updatesをdisabledにする必要がございます。Time-based Scaling機能の詳細に関しましては↓こちらをご覧ください。
http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/using-features.managing.as.html
また、Rolling Updatesの詳細は↓こちらをご覧ください。
http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/using-features.rollingupdates.html
Q3. EBではApacheのドキュメントルートを変更したい場合はどこを修正すればいいでしょうか?
A3. 例えばPHPの場合であれば↓にございますように、Document rootで設定いただけます。 http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/create_deploy_PHP.container.html
Q4. Python向け環境だとApacheしか使えなかったと思うのですが、今もそうでしょうか?
A4. 現状PythonでサポートしているWebサーバーはApache(& mod_wsgi)のみになります。http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/concepts.platforms.html#concepts.platforms.python
例えば、Dockerを使って、その中でApache以外のWebサーバーを使う、といった選択肢もあるかと存じます。
Q5. Environment Link のふるまい?がよくわからなかったのですが、複数のAZに配置されたworkerを同一視できるようになるのでしょうか?
A5. Multi-Tier(WebとWorker)をSQSのキューを介して明示的にリンクさせるような機能です。機能の詳細は↓こちらに記載されておりまして、
http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/environment-cfg-links.html
ローンチのアナウンスを篠原が個人的に日本語にしたものが↓こちらになります。
http://qiita.com/shinodogg/items/cca66c843cd22f2e6300
Q6. httpd.confの更新はどうすればいいでしょうか?
A6. .ebextensionsのfilesを使って、例えば以下のように設定ファイルを配置するのも一つの手かもしれません。また、もしElastic Beanstalkによって事前に定義されたものと大幅に異なる定義が必要な場合などは、Dockerを利用すれば、その制限を受けずに設定を行っていただくことも出来るかと思います。