sorta kinda...

主にAWS関連ですが、これに限らずいろいろ勉強したことや思ったことを書いていきます。

JAWS DAYS 2019 参加しました!

花粉ツライです、、那須です。

2/23(土) に開催された JAWS DAYS 2019 に参加してきました!

jawsdays2019.jaws-ug.jp

私は今年で 2 回目の参加になるんですが、昨年よりもさらにグレードアップした感がありましたね。 セッションの内容も濃かったですし、懇親会でもいろんな方とお話できて満足袋は満たされまくりました。 アウトプットするまでが JAWS DAYS ということで、簡単に参加した感想などを書いておきます(順番は時系列です

 

[Security] 1日でSSHをやめることができた話 ~AWS Systems Manager Session Manager 導入と運用Tips~

JUBILEE WORKS 金井さんの Session Manager を使った運用の話でした。 個人的には PowerShell でSession manager を使っているので、Linux での運用イメージがついてよかったです。

speakerdeck.com

このお話は聞いて本当によかった。勉強になったのは↓

  • セッションは CloudWatch で検知できる
  • イベント実行したユーザにslackにメンション飛ばせるので、なりすましとかがあった場合にすぐに気づける
  • タグで対象のEC2インスタンスを制御できる(Session Manager で入れるか入れないかとか)

ログインユーザが固定されている点はどうかなと思ってたんですが、どのみち su とかするなら権限的には同じですし、↑上記のメリットを享受できるなら直接 ssh で入るより Session Manager 使ったほうがいいじゃないかなと思いました。

 

AppStream 2.0を活用してユーザ端末に依存しない運用にしよう

私も登壇してきました。 AppStream 2.0 ネタで、たぶんほとんどの方が知らないだろうという前提で作ったので若干モヤっとしてますが、これを機に使う方が増えるといいなと思ってます。

speakerdeck.com

利用ユーザ数が多くて AutoScaling していくと料金が結構かかるので、単純に作業端末的な使い方をするなら WorkSpaces がいいと思います。特定のクライアントソフトを使わせたい場合に AppStream 2.0 が生きると思ってます。

 

[情シス/Well Architected] Well-Architectedな組織を実現するためのチャレンジ - なぜ、CA W-Aを作ろうと思ったのか –

サイバーエージェント 柘植さんの W-A のお話でした。 Well-Architected って W-A って略すんですね。

www.slideshare.net

自分たちの W-A を作ったってのは賢いなと思いました。 AWS の W-A に従って設計していくのも大事なんですが、組織や業務ごとに気にかけるポイントは違うので、AWS W-A を基に自分たちの基準(W-A)を作れば社内に W-A を導入するハードル下がるような気がしますね。 SAP をクラウドに上げるだけでクラウド活用なのか?みたいな話は FacebookTwitter でたまに見かけるので、そう言われないようにうちの会社で SAP W-A を作っていく活動は必要なのかもなって思いました。

作って満足するのではなくて、定期的にチェックして改善していくのが大事なので、W-A をどうするか?それをどう運用していくか?を考えようと思ったきっかけになったセッションでした。

 

[Lunch Session] 顧客が本当に必要だったもの -CIer前日譚-

モビンギ 石田さんのリフト&シフトのお話でした。

リフトするのは簡単、その後のシフトが大変ってのは本当にそうだなと思います。 一度運用が始まればなかなか変えるモチベーションが生まれないのはわかります。 技術的にもそうですが、社内への説明に時間が必要だったり、またお金かかるの?的な話になりがちなので、どうやってシフトすればいいのかはうちもよく考えたほうがいいなと思いました。

 

[Supporter Session] AWSのサーバ管理でsshを使わない管理手段を実現しよう

アンドゲート 岸上さんの Teleport のお話でした。

Teleport の環境は最初に準備しないといけませんが、一度準備すれば自分で Linux の鍵をもつことなく対象サーバにログインできるので嬉しいですね。 なにげに鍵管理って大変です。 さらに Teleport はログインすると動画で操作内容を録画されるので、監査の面でもメリットがありますよ。

Teleport を導入するのに必要な設計とか考え方は↓このブログが一番いい感じでまとまってるそうです。

ken5scal.hatenablog.com

 

[Others] Infrastructure as Codeに疲れたので、僕たちが本来やりたかったことを整理する

ABEJA 村主さんの IaC で疲れた話でした。

speakerdeck.com

この気持ち、今ならよくわかります。 CloudFormation でいっときリソース作成&管理するようにしてみたんですが、ちょっとした変更でもポチポチ手作業でやるより時間がかかってたまにイラッとするんですよね。 このセッション聞いて本当に良かったです。

Terraform でも同じで、変更すると一度 Destroy してから Create するような動きするリソースもあってそれなりにスキルが求められるので、誰でもすぐにできるわけではないってのは同意です。 さらに CFn も Terraform もすべてのサービスに対応してるわけではないので、サポートされてないサービスのリソースを作る場合はもうどうしても手作業ですよね。 ということである程度の割り切りは必要だと思います。 ROI を考えましょうって一言にすごく重みを感じますね。

 

懇親会

前々から知ってたけど話したことない方や、まったく初めて会う方と一緒に話をさせてもらいました。 むちゃくちゃ楽しすぎてどうやって銀座のホテルまで戻ったのか記憶がありません。。 Facebook でも絡んでくれる方が増えたので、マジで JAWS DAYS 参加してよかったなと思ってます!

 

まとめ

周りの人を巻き込んで来年も参加したいなと思いました。 特に登壇する機会を持つ大切さ、社外の方と話をするとかつながりを持つ大切さ、ブログ等でアウトプットする大切さなんかは言い続けて一人でも多くの人に同じ思いを共有したいと思うので、何かアクション考えます。
あと、もう若くないので飲み過ぎには注意しようと思いました。。

PowerShell でディスクの初期化をすると楽ですよ

似たような内容を繰り返す手作業は苦手です、那須です。

Windows Server を構築した際にディスクの初期化作業を皆さんしますよね? いつもはサーバーマネージャーを開いて、この 50GB は D ドライブ、この 100GB は…あ、100GB ディスクが 3 つもある、どれがどのドライブになるんや?とか、多少悩みながらやってたんですが、この作業を悩まずに CLI でやりたいなと思いました。

Server Core で運用してるところもあるくらいやから、ほとんどのことは PowerShell でできるやろと思って調べてみたらやっぱりできそうだったのでやってみました。 というか、今まさに構築案件で実際に使ってます。

 

まずは EBS ボリュームを作成

とりあえず EBS ボリュームを作成して EC2 インスタンスにアタッチします。 今回作成した EBS ボリュームは↓この画像の通り。

f:id:nasrinjp1:20190304210301p:plain
作成した EBS ボリューム一覧

 

PowerShell でディスクの初期化とドライブレター設定

対象の EC2 インスタンスに RDP でログインして、PowerShell を開きます。 ちなみに、PowerShell は管理者として開いてください。ディスクの初期化は管理者として PowerShell を実行していないとできません。 Get-Disk コマンドで実際にディスクが見えていることを確認しましょう。

PS C:\Users\Administrator> get-disk

Number Friendly Name Serial Number                    HealthStatus         OperationalStatus      Total Size Partition
                                                                                                             Style
------ ------------- -------------                    ------------         -----------------      ---------- ----------
2      NVMe Amazo... vol094aa450e33c77e0e_00000001.   Healthy              Online                     100 GB RAW
1      NVMe Amazo... vol0f97e22654bd0299b_00000001.   Healthy              Online                     100 GB RAW
0      NVMe Amazo... vol0a2321b8acd7e61d5_00000001.   Healthy              Online                      30 GB MBR
3      NVMe Amazo... vol01f876d6509237413_00000001.   Healthy              Online                     100 GB RAW

どの EBS ボリュームを何ドライブに、ラベルは何にするかを配列で指定しましょう。 ↓この例では、3 つの EBS ボリュームをそれぞれX、Y、Zドライブに割り当てるように設定しています。 これをそのまま PowerShell ウィンドウに貼り付けてもいいですし、スクリプトとして ps1 ファイルにしてそれを実行するでも、どちらでも OK です。 とにかく実行すればディスクの初期化が完了しているはずです。

@(
    @(
        "vol-0f97e22654bd0299b",
        "XXX",
        "X"
    ),
    @(
        "vol-094aa450e33c77e0e",
        "YYY",
        "Y"
    ),
    @(
        "vol-01f876d6509237413",
        "ZZZ",
        "Z"
    )
) | foreach {
    Get-Disk | Where SerialNumber -match ($_[0] -replace "-") | Set-Disk -IsReadonly $False | Set-Disk -IsOffline $False
    Get-Disk | Where SerialNumber -match ($_[0] -replace "-") | Initialize-Disk -PartitionStyle GPT -PassThru | New-Partition -UseMaximumSize | Format-Volume -FileSystem NTFS -NewFileSystemLabel $_[1] -Force | Get-Partition | Add-PartitionAccessPath -AccessPath ($_[2] + ":")
}

ちなみに、↑この配列部分を 1 つだけにして実行するとエラーになります。 なので、2 つ以上のディスクを初期化する場合に限定して使うようにしてください。 そのうちディスクが 1 つでも実行できるように改修しようと思います。

できました。 1 つだけディスクを初期化する場合は、2 つ目の@の前に , を追加するだけでした。 ↓このブログを社内の PowerShell マスターに教えてもらいました。

tech.guitarrapc.com

↓こういう感じです。

@(
    ,@(
        "vol-0f97e22654bd0299b",
        "XXX",
        "X"
    )
) | foreach {
    Get-Disk | Where SerialNumber -match ($_[0] -replace "-") | Set-Disk -IsReadonly $False | Set-Disk -IsOffline $False
    Get-Disk | Where SerialNumber -match ($_[0] -replace "-") | Initialize-Disk -PartitionStyle GPT -PassThru | New-Partition -UseMaximumSize | Format-Volume -FileSystem NTFS -NewFileSystemLabel $_[1] -Force | Get-Partition | Add-PartitionAccessPath -AccessPath ($_[2] + ":")
}

さすがに 1 からスクリプト書く余裕もなかったんで、↓このページを参考にさせていただきました。 本当に誰かが書いてくれたブログって助かりますね。

blog.yottun8.com

最初に試したスクリプトは実行するとポップアップが出て全自動でできなかったんですが、↓このページに助けてもらいました。

teratail.com

 

確認してみよう

↓このリンク先にあるスクリプトを実行しましょう。 そしてドキュメントは英語で確認しましょう。 日本語だと情報が古い場合があって、記述が古いだけならいいんですがスクリプトが変わってる場合もあるので、英語でドキュメントを確認するのは本当に大事です。 ちなみに私は日本語ドキュメントを信頼して何回かハマったことがあります。

docs.aws.amazon.com

実行すると↓こんな感じの結果が表示されるはずです。

PS C:\Users\Administrator> C:\vol-check.ps1

Disk Partitions DriveLetter EbsVolumeId           Device    VirtualDevice VolumeName
---- ---------- ----------- -----------           ------    ------------- ----------
   0          1           C vol-0a2321b8acd7e61d5 /dev/sda1 N/A
   1          2           X vol-0f97e22654bd0299b xvdf      N/A           XXX
   2          2           Y vol-094aa450e33c77e0e xvdg      N/A           YYY
   3          2           Z vol-01f876d6509237413 xvdh      N/A           ZZZ

この結果を見れば、どの EBS ボリュームが何ドライブになっているか一目瞭然ですね。

 

まとめ

PowerShell でディスクの初期化をする流れをご紹介しました。 これの何がいいかというと、わざわざ RDP でログインしなくても Systems Manager の Session Manager 経由で作業できるんですね。 ということは、AWS コンソールでディスクの初期化が完了するということですよ!
もちろん、対象の EC2 インスタンスに Session Manager が使えるように IAM ロールを付与したり必要な VPC エンドポイントにアクセスできるようにしたりといくつか事前準備は必要ですが、そんなに難しい準備でもないので、大量の Windows Server と大量の EBS ボリュームの初期設定を前に途方に暮れてる方は試してみてはどうでしょうか?

ディスク初期化以外にも Windows Server の初期構築に必要な作業はあるので、今後はそれらも全部 PowerShell スクリプト化して他でも使い回せるようにしておきたいと思います。

 

2019.03.07追記

続編書きました。

nasrinjp1.hatenablog.com