re:Invent2020で待望のAWS版CloudShellが発表されました。いろんな使い方が想定されていますが、この資料では、AWS CloudShellをinfrastructure as Codeの実行基盤として使うときに、従来の方法と比較して考慮や注意が必要な点を纏めています。
CloudShellをIaC実⾏基盤として考えるby ハマコー1
View Slide
2@hamako9999ハマコー
3IaC実⾏基盤ってなんやねん︖
4IaCとはInfrastructure as Code(インフラをコードで定義)• CloudFormation• Terraform• AWS Cloud Development Kit(AWS CDK)• Pulumiコードはリポジトリに格納されバージョン管理される
5IaC実⾏基盤とはインフラのコードを実⾏する場所• CloudFormation• create-stack• Terraform• terraform plan• AWS Cloud Development Kit(AWS CDK)• cdk deploy• Pulumi• pulumi up
6IaC実⾏基盤の代表例とPros and Cons
7IaC実⾏基盤の代表例とPros and Cons構成 内容 Pros and Cons作業⽤クライアントPC• インフラ管理者のクライアントPCからコード実⾏• 柔軟性は⾼いが実⾏環境を統⼀しづらい• 往々にして実⾏コードとリポジトリがずれるEC2(SSH接続)• EC2にSSHでログインして、コード実⾏ • IaC実⾏権限の管理が煩雑(SSH秘密鍵とIAMの2重管理)• EC2の料⾦が気になるEC2(セッションマネージャー接続)• EC2にセッションマネージャーでログインして、コード実⾏• SSH接続よりマシ• EC2の料⾦が気になるCloud9 • Cloud9にログインして、コード実⾏ • そもそもCloud9は開発環境だから使う意味なさそうリポジトリから⾃動適⽤• プルリクエストでコードのテスト• エラーなければ特定ブランチマージから⾃動デプロイ• アプリケーションデプロイフローの流れをインフラコードに適⽤• ⼀番オシャレで今どき• 実⾏コードがリポジトリと同⼀なのはすごく安⼼• 構築が⼤変。terraformは良いが、CLI体系が変なCloudFormationとかは地獄
8CloudShellはIaC実⾏基盤として使えるか︖
9IaC実⾏基盤として使うためにきになること1. 実⾏権限2. 料⾦3. 実⾏ログ4. IaC実⾏のための前準備
101.実⾏権限マネジメントコンソールアクセス時の実⾏権限をそのまま使うため、ユーザー管理をIAMに統⼀できるAWS SSOユーザーでも問題なく権限を利⽤可能
112.料⾦「各リージョンで最⼤10個のシェルを同時に無料で利⽤可能」ということは実質無料
123.実⾏ログヒストリーは残るが実⾏ログは⾃前で残す必要あり• cat $HISTFILECloudShellは中⾝はFargateっぽいので、awslogsドライバーからのCloudWatch Logsはそのうち対応される匂いがするので、それを待ちましょう
134.IaC実⾏のための前準備CloudFormationの場合• IaCのコード• CodeCommit︓IAMの権限でそのまま”git clone”• GitHub︓認証させるのがめんどくさいため、GitHubプッシュ時に⾃動でS3コピーしておいて、CloudShellから”aws s3 cp”• 注意︓homeディレクトリは容量が1Gなのと、IaCコードはテンポラリなので/tmp配下とかの利⽤を推奨• CloudFormationの実⾏• aws cli v2がそのまま使えるので、その前提のシェルから実⾏できるなら問題なし• aws cli v2の最新バージョンの反映にどのぐらいタイムラグあるか不明なので、不安なら都度アップデートしましょう
144.IaC実⾏のための前準備Terraformの場合• IaCのコード• CloudFormationと同じ• Terraformの実⾏• 公式の「Install Terraform」のLinux版はそのまま動いた• ブートストラップ的なシェルにいれておけば⼿間なく準備できそう• tfstateはそのアカウントのS3に⼊れておく前提
154.IaC実⾏のための前準備Q︓IaC実⾏環境のためにコンテナは利⽤できないのか︖
164.IaC実⾏のための前準備Q︓IaC実⾏環境のためにコンテナは利⽤できないのか︖A︓CloudShellはそもそもコンテナベース。バイナリインストールしてあれこれやってみましたが、Dockerがそもそも使えないっぽい。深⼊りは怖いのでやってない
17結論CloudShellはIaC実⾏基盤として使えるのか︖
18結論「⼤丈夫だ、問題ない」
19まとめいくらか制限はあるが、その制限をわりきって使うのは問題なさそう• 実⾏ログをきちんと残す仕組みを構築• 実⾏権限や履歴をCloudTrailで管理する• まずはステージングでやってみようね♡