Vagrant
イベント
該当するコンテンツが見つかりませんでした
マガジン
該当するコンテンツが見つかりませんでした
技術ブログ
みなさん、こんにちは。SCSKのMasedatiです! 最近の私、週2でラーメン屋に通っています。E.A.Kって最高ですね! さてさて、今年で新卒3年目を迎える私ですが、昨年度は新人指導員としてOJTに携わっていました。 その中で改めて感じたのは、 新人の皆さんは日々覚えることが多く、なかなかアウトプットにまで手が回らない という課題です。 私が1年目だった頃、アウトプットの機会を提供する取り組みとして、 月1回のブログ発信を支援する「 新人ブログマラソン 」が実験的に始まりました。 当時は新人としてブログ発信に挑戦する立場でしたが、 技術を言語化し発信する経験は、非常に良い刺激 となったのを覚えています。 この経験を踏まえ、2024年度も新人の皆さんが自らテックブログを書き、楽しみながらアウトプットに取り組める場として、 「 新人ブログマラソン 」を継続開催することにしました。 企画概要 新人と指導員がペアを組み、新人がブログ記事を執筆 ※ペアは月ごとに交代 指導員は記事に対してフィードバックを行い、その後、ブログを公開 実施期間は 2024年12月〜2025年3月 で、 月1本の投稿 を目安 技術に関連する内容、またはそれに準ずる内容であればテーマは自由 前回開催の「新人ブログマラソン」の活動報告 は↓こちら。 新入社員がブログを書き始めるきっかけとは!? 当社新人たちがテックブログを書いてみたよ。 blog.usize-tech.com 2024.05.07 そもそもなんでブログを書くのか?(再掲) 人に伝えようとすることで自分の理解になる。 昔の人は言いました「100回の購読より、1回の寄稿」だと。 新人はインプットする機会は多いですがアウトプットすることで知識定着に寄与できます。 「テックブログを書く」という道の最初の一歩を作る。 テックブログなんて社外に発信できるなんてすごいエンジニアだけなんだ。という畏怖の取り除きを解消することができます。 新人育成の中で先輩社員がリードしてあげることで新人様の最初の一歩を促すことができます。 社内外に顔を売るチャンスを作る。 社外発信することにより人目につき、名前や顔が売れていきます。 パブリックな活動を評価するような仕組みも社外にはあるので、そこに取り上げてもらうことで当社としても個人としても対外的な評価を受けれるのは素晴らしいことです。また社内向けには報告会を行うこと新人様と役職者をつなげるような活動にも発展できます。 取り組み紹介 ということで今期取り組んだ新人様6名の記事を紹介したいと思います。 本イベントを通して発信されたブログ一覧は↓こちら! 新人ブログマラソン 2024 【2024/12月~2024/3月開催】SCSKの新人たちが自由なテーマで毎月クラウド技術やテクノロジーに関する記事をお届けします。 blog.usize-tech.com 2024.11.27 ササキさん ◆主な業務内容 ・DWH基盤構築(Snowflake) ・DB構築(Oracle) ◆趣味 ドライブ・神社仏閣めぐり ◆投稿記事 ササキさんの記事 Snowflakeの最新機能を、新米エンジニアの視点から徹底的に解剖する、Snowflake入門ブログ となっています。 Snowflakeに興味はあるけれど、何から始めれば良いか分からない…最新機能って難しそう…そんな悩みを抱える方にこそ、ぜひ読んでいただきたい内容です。 特に、Cortex AIを使い、ドキュメント検索アシスタントを実際に構築していく過程を、基礎から応用まで、一つ一つ丁寧に解説していただきました。 ✨感想ダイジェスト✨ 知識整理および新情報キャッチアップ 🔍 調査や検証の仕方に慣れることができた ✍️ 習慣的な投稿が大切だと感じた 初学者にも伝わるように執筆することは難しい・・・ 💡 客観的な視点を持つことの大切さに気付いた 今後について 🚀 所属組織のプレゼンス向上につながるため、 より PV 数を意識して投稿していきたい コウさん ◆主な業務内容 ・ USiZE に関連する保守運用/機能開発 ◆趣味 エクストリームスポーツ・スキー ◆投稿記事 コウさんの記事 Rubrikの様々な側面を深く理解していただけるようなコンテンツ を寄稿いただきました! Rubrikそのものの概要、提供される機能、そしてバックアップ管理の全体像について詳しく解説されています。 また、Rubrikが備えるランサムウェア対策機能の仕組みと検証や機密データの可視化と管理を容易にするSensitive Data Discoveryについても掘り下げていただきました。 さらには、RubrikとAWSとの連携に注目し、EC2のバックアップを自動化するための設定手順から、アーカイブに至るまでの具体的な流れを検証されています。 ✨感想ダイジェスト✨ Rubrikに対する理解の促進 💪実際に手を動かして検証する中で、知識が定着することができた アウトプットの効果 🤝自部署以外との交流が増えた 🤔伝わりやすい言葉選びや構成の工夫の習得 今後について 🎨より多くの人に届くよう、タイトルや見せ方も工夫したい 🔥実務で得た知見をわかりやすく発信し続けていきたい オダさん ◆主な業務内容 ・ USiZE に関連する運用 ◆投稿記事 オダさんの記事 実務経験に基づいたIT技術情報 を寄稿いただきました! PowerShell、ITIL、vCLS、Vagrant/VirtualBoxの技術での課題解決から学習内容の共有まで広く情報発信されていますが、 特に vSphereのvCLS仮想マシンについてのブログ が必見です。そもそもvCLSとは何なのか、vCLSが有効であるとどんないいことがあるのか、無効にするとどのような影響があるのかを中心に調べてまとめていただきました。 ✨感想ダイジェスト✨ 発信活動に対する心理的ハードルの低下 😓これまで何かを発信した経験がほとんどなかったので、かなり苦戦 💪イベントを通して、自分の中で何となく書き方のようなものがわかるように 📝情報のまとめ方、ブログの書き方への理解度向上 情報調査の深化 マガリフチさん ◆主な業務内容 ・コンテナ構築 ・IaaSクラウド移行作業 ◆趣味 料理・スポーツ観戦 ◆投稿記事 マガリフチさんの記事 AWS Fargateコンテナへのログイン方法やAWS Cloud9の代替サービス比較といった、 AWSを利用する中で多くの方が抱える課題 を中心に記事執筆いただきました。 コンソール画面のスクリーンショットを豊富に掲載し、各操作の意味を丁寧に解説しています。読者の皆様が実際に手を動かしながら理解を深められるように工夫されているのが伝わります。 ✨感想ダイジェスト✨ 曖昧だった知識を整理 ✍️文字に書き起こすことで自分の中の考えを整理しなおし、人に説明できるレベルまでもっていくことができた! アウトプットでスキルアップ 👂自分以外の読み手が何を求めているのかを知ることができた。 🎨サービスの理解だけでなく、相手に読んでもらうブログとしてデザイン力も鍛えることができた。 🗣️指導員フィードバックから、新たな知見を得ることができた。 他部署との交流 👨🏫イベント参加者のブログを読むことで、自然に業務以外のサービスの知識を知ることができた。 ワタナベさん ◆主な業務内容 ・ S-Cred + プラットフォーム 運用 ◆趣味 吹奏楽(クラリネット)・油そばをすすること ◆投稿記事 ワタナベさんの記事 Amazon Bedrockの最新機能やDatadogハンズオン について寄稿いただきました。 特に、re:Invent 2024で発表された 「Amazon Bedrock Multi-Agent Collaboration」を最速で検証したブログ はおすすめです。 教材がない中の独力でのハンズオンのため、エラーを繰り返した苦労も含めていただいたことで、AWS公式記事を見て触ってみる人にとって有用なものになったと思います。 ✨感想ダイジェスト✨ ブログ発信の壁突破 ✍️最初の投稿で先輩からのアシストを受けることで、読みやすいブログ執筆のための作法を知ることができた 🎉イベントとして一定回数の投稿を行うことで投稿の仕方が分かる & 習慣化 指導員レビューからの学び 👀読み手の求めていることを意識した記述(例:ハンズオン所要時間の記載) 🎨視覚的な分かりやすさを意識した記述(図や改行の活用/内容の明瞭性/表現の統一) ノガミさん ◆主な業務内容 ・DB構築(MySQL) ◆趣味 スノーボード・お笑い芸人のYouTubeを見ること ◆投稿記事 ノガミさんの記事 MySQLレプリケーション中心に、業務で得た知識のアウトプット としてブログを作成いただきました。 レプリケーション初学者による初学者向けの解説となっています。MySQLレプリケーション方式の比較検討から、実際の案件における考慮のポイント、さらには、Amazon QuickSightでの集計関数利用時のエラーの共有と対処法まで、実践的なノウハウを発信いただいています。 ✨感想ダイジェスト✨ ブログ発信の壁突破 🤓技術ブログは敷居が高いように感じていたが、自分でも書くことができるという自信につながった アウトプットの場として最適 🧠業務で一度学んだ知識を振り返ることができ、知識が整理された 今後について 🌟知見を広げるための業務知識以外のブログ執筆にもチャレンジしたい! 完走した感想 イベントは、「 アウトプット習慣の育成 」「 組織コミュニケーションの活性化 」「 社外からの評価獲得のきっかけ作り 」という3つの点で、期待以上の成果を上げることができました。 昨年に比べて、新人の皆さんからは多種多様な技術発信をしていただきました。 私自身も、知らなかった技術や知識に触れることができ、大変勉強になりました。 イベントを通じて、参加者同士が互いに刺激を受け、新たな学びを得られた濃密な期間 だったのではないでしょうか。 積極的に参加の声をあげてくださった新人の皆さんに、心から敬意を表します。 また、本イベントの運営にご協力いただいた皆さまにも、この場を借りて感謝申し上げます。ありがとうございました。 本ブログを閲覧された社内の皆様へ 2025年度も「 新人ブログマラソン 」の開催を予定しています。 「参加してみたい」「興味がある」という指導員/新人の方は、私までぜひお気軽にご連絡ください!何卒何卒。
こんにちは、金融ソリューション事業部の孫です。 前編 では、 Unreal Editorを含む Windows コンテナイメージの構築を完了しました。 本記事では、 前編 で構築したコンテナイメージを利用する Amazon EKS(以下EKS)の Windows Node AMIを作成します。 EKSのドキュメント をよると、 AWS はユーザー向けに最適化された EKS optimized WindowsAMI を提供していることがわかりました。 このEKS optimized WindowsAMIにはEKSでの動作可能な ミドルウェア がインストールされていますが、 前編 で構築したコンテナイメージをサポートするには不足している部分がまだ多く存在します。 そのため、この記事では Unreal Editor用のカスタム Windows AMIを構築します。 はじめに Packerについて Packerの特徴と機能: 使用手順 実施手順 1. Packerツールのインストール 2. Packerのテンプレートファイルの作成 Packerテンプレートファイル 3. Windowsイメージのビルドとテスト 終わりに 参考文献 はじめに 本記事では、以下を前提知識として扱います。 AWS の基本操作 EKSの使用経験 コンテナ開発経験 PowerShell スクリプト の作成経験 今回では、HashiCorp社が提供する Packer ツールを使用してAMIを作成します。 また、 AWS が提供するEC2 Image Builderを使用してAMIを作成することも可能ですが、以下の理由でPackerを選定しました。 イメージ作成プロセスを完全に制御したい 今後、既存のCI/CDプロセスに統合する予定がある Packerについて Packerは、HashiCorpによって開発された オープンソース のツールで、異なるプラットフォーム向けにサーバーイメージを自動で作成するためのものです。 開発者やシステム管理者がテンプレートファイルを通じてイメージを定義し、 AWS 、Azure、 Google Cloud Platformなど複数の クラウド サービス向けのイメージを作成できます。 Packerの特徴と機能: イメージの自動作成 : PackerはOSのイメージを自動作成し、手動でのイメージ作成や設定の時間と複雑さを軽減します。 マルチプラットフォーム に対応 :Packerは複数の クラウド プラットフォームと仮想化技術をサポートしており、異なる環境間での一貫性を促進します。 カスタマイズと拡張性 : Packerの設定はシンプルなテンプレートファイルを使用して行われ、ユーザーは具体的なニーズに応じてイメージをカスタマイズできます。さらに、Packerは多くのビルダー、事前に設定されたテンプレート、 プラグイン をサポートしており、機能を拡張できます。 DevOpsツールチェーンとの統合 : Packerは、 Vagrant やTerraformなどの他のDevOpsツールと容易に統合でき、CI/CDのプロセスをサポートします。 使用手順 テンプレートの作成 :ユーザーはまず、イメージの作成方法を定義したテンプレートファイルを作成する必要があります。 ビルドの実行 :Packerの コマンドライン ツールを使用してビルドを実行します。 具体的な作成手順は、次のセクションで詳しく説明します。 実施手順 Packerツールのインストール Packerのテンプレートファイルの作成 Windows イメージのビルドとテストの実行 使用する環境およびソフトウェアのバージョンは以下のとおりです: OS: Windows 11 Pro 22H2 x64 RAM: 32GB CPU: i5-13600K Packer: v1.10.0 eksctl: 0.176.0 AWS CLI : version 2 1. Packerツールのインストール PackerのインストールはTerraformと同様に非常に簡単です。 exeファイルをダウンロードし、 環境変数 に追加するだけでインストールが完了します。 # PackerのダウンロードURL https://developer.hashicorp.com/packer/install # 環境変数の設定 `Control Panel` ⇒ `System` ⇒ `System Settings` ⇒ `Environment Variables`を順に開き、 `System variables`のボックス内で`PATH`変数をダブルクリックして編集画面を開きます。 変数値の最後に実行ファイルの所在Pathを追加します。例:C:\path また、 Chocolatey を使用して Windows ソフトウェアを管理しているユーザーは、以下のコマンドを実行するだけでインストールが完了します。 $ choco install packer ※他のシステムのユーザーは、Packerの インストールガイド を参考にインストールしてください。 インストール完了後、Packerが正しくインストールされているか確認します: # 以下のコマンドを実行し、正しくバージョン情報が表示されればインストール成功 $ packer version Packer v1.10.0 2. Packerのテンプレートファイルの作成 構築する Windows AMIに含める必要があるソフトウェアは以下のとおりです。 今回は、 Windows ノード上で Unreal Editorを含むコンテナイメージを実行する為、 GPU 関連のソフトウェアを含めています。 NVIDIA GPU drivers Vulkan runtime library DirectX shader compiler ※本記事では取り扱いませんが、EKSを活用してコンテナを運用する手順については unrealcontainers を参照してください。 また、 Unreal Editorコンテナの起動速度を向上させるために、 Windows AMI内に事前にキャッシュしておく必要もあります。 次に、テンプレートファイルの作成に取り掛かります。 Packerテンプレートファイル Packerテンプレートのフォーマットと文法はTerraformと同様であり、Terraformの使用経験があるユーザーはすぐに使いこなせるでしょう。 Terraformの使用経験がないユーザーでも心配ありません。テンプレートの定義内容は非常に直感的で、何をしようとしているのかが理解しやすいです。 では、テンプレートファイル(eks-worker-node-ami.pkr.hcl)の作成を開始しましょう。 まず、必要な プラグイン およびそのバージョン情報を定義します。 #ターゲットのクラウドサービスはawsであるため packer { required_plugins { amazon = { version = ">= 1.0.9" source = "github.com/hashicorp/amazon" } } } AMI作成のEC2を定義する この設定は、PackerがEC2 インスタンス を構築し、そこからAMIを作成するために使用するパラメータと設定を指定します。 利用されるPackerのSource名は amazon-ebs です。 主なパラメータには、AMI名、ソースAMI、 インスタンス タイプ、リージョンなどがあります。 ここでは、 AWS が提供する EKS optimized WindowsAMI をベースイメージとして使用し、その上に必要なシステム環境を構築します。 EKS optimized WindowsAMI には、EKSに接続するために必要なOS環境が既に構築されているため、この基盤を使用することでプロセスを簡素化できます。 source "amazon-ebs" "eks-worker-node" { ami_name = "eks-windows-worker-node" # AMI name instance_type = "g4dn.2xlarge" # instancetype region = "ap-northeast-1" # region vpc_id = "vpc-xxxxxxxxxxxxxxxxx" # VPC id subnet_id = "subnet-xxxxxxxxxxxxxx" # Subnet id # base AMI source_ami_filter { filters = { name = "Windows_Server-2022-English-Full-EKS_Optimized-1.28-*" root-device-type = "ebs" virtualization-type = "hvm" } most_recent = true owners = [ "amazon" ] } # Expand the boot disk to 120GB launch_block_device_mappings { device_name = "/dev/sda1" volume_size = 120 volume_type = "gp3" delete_on_termination = true } # Allow S3 access for the VM temporary_iam_instance_profile_policy_document { Version = "2012-10-17" Statement { Action = [ "s3:Get*" , "s3:List*" , "s3:Describe*" , "s3-object-lambda:Get*" , "s3-object-lambda:List*" ] Effect = "Allow" Resource = [ "*" ] } } # Use our startup script to enable SSH access user_data_file = "$ { path.root } /scripts/startup.ps1" # Use SSH for running commands in the VM communicator = "ssh" ssh_username = "Administrator" ssh_timeout = "30m" # Don't automatically stop the instance, since sysprep will perform the shutdown disable_stop_instance = true } ビルドプロセスを作成する ここで、AMI名、参照するソース名(上記で構築したEC2 インスタンス )を設定し、最後に Powershell スクリプト を実行して必要な環境を構築します。 ビルドが完了したAMIは、 AWS コンソールで確認できます。 build { name = "eks-worker-windows-node" sources = [ "source.amazon-ebs.eks-worker-node" ] # Run our setup script provisioner "powershell" { script = "$ { path.root } /scripts/setup_base_eks_optimized_ami.ps1" } # Perform cleanup and shut down the VM provisioner "powershell" { script = "$ { path.root } /scripts/cleanup.ps1" valid_exit_codes = [ 0 , 2300218 ] } } ここまでで、AMI作成のテンプレートファイルの作成が完了しました。 次に、環境を構築するための PowerShell スクリプト を作成します。 ① スタートアップ スクリプト (startup.ps1) この スクリプト の目的は、EC2の SSH を構成し、後続のEC2へのログインおよび構築 スクリプト の実行に使用することです。 EC2のmetaServiceにはIMDSv1とIMDSv2の2つのバージョンがあります。 ご自身のEC2設定に応じて、対応するバージョンのコードを選択してください。 # startup.ps1 <powershell> # Install the OpenSSH server and set the sshd service to start automatically at system startup Add-WindowsCapability -Online -Name OpenSSH.Server~~~~ 0.0.1.0 Set-Service -Name sshd -StartupType 'Automatic' # Create the OpenSSH configuration directory if it doesn't already exist $sshDir = 'C:\ProgramData\ssh' if (( Test-Path -Path $sshDir ) -eq $false ) { New-Item -Path $sshDir -ItemType Directory -Force | Out-Null } # Retrieve the SHH public key from the EC2 metadata service $authorisedKeys = " $sshDir \administrators_authorized_keys" # IMDSv2 #$response = Invoke-WebRequest -Uri "http://169.254.169.254/latest/api/token" -Method PUT -Headers @{"X-aws-ec2-metadata-token-ttl-seconds"="21600"} #$token = $response.Content #$metadata = Invoke-WebRequest -Uri "http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key" -Headers @{"X-aws-ec2-metadata-token"=$token} #$metadata.Content | Out-File -FilePath "$authorisedKeys" # Retrieve the SHH public key from the EC2 metadata service # IMDSv1 curl.exe 'http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key' -o " $authorisedKeys " # Set the required ACLs for the authorised keys file icacls.exe " $authorisedKeys " / inheritance:r / grant "Administrators:F" / grant "SYSTEM:F" # Install the Windows feature for containers, which will require a reboot Install-WindowsFeature -Name Containers -IncludeAllSubFeature # Restart the VM Restart-Computer < / powershell> ② 構築 スクリプト (setup.ps1) まず、使用するバージョン情報およびインストールに使用する一時フォルダーを設定します。 # setup.ps1 # Constants $Containered_Ver = "1.7.11" $eks_optimized_ami_windows_Ver = "1.28.0" $ContainerdPath = "$env:ProgramFiles\containerd" $TempRoot = "C:\TempEKSArtifactDir" $TempPath = "$TempRoot\EKS-Artifacts" # Create each of our directories Write-Host "Create each of our directories" foreach ($dir in @($TempRoot, $TempPath)) { New-Item -Path $dir -ItemType Directory -Force | Out-Null } バージョン選定に関して注意すべき2点は次の通りです: Windows Serverのコンテナランタイムの選定については、 Microsoft公式がcontainerdの使用を推奨しています 。Dockerは現在サポートされておらず、containerdのみが GPU サポートなどの Windows Containerの高度な機能をサポートしています。 Kubernetes で Windows Containerの GPU サポート プラグイン を使用するためには、containerdのバージョンが1.7.0以上である必要があります。 参考: https://github.com/TensorWorks/DirectX-Device-Plugins?tab=readme-ov-file EKS optimized WindowsAMI にキャッシュイメージを追加するためには、 EKS optimized WindowsAMI の構築 Image Builder Component を使用する必要があります。具体的なバージョンは Kubernetes のバージョンに依存しますが、今回は1.28.0バージョンを使用します。 次に、必要なソフトウェアを順にインストールします。 NVIDIA GPU drivers # Install the NVIDIA GPU drivers Write-Host "Install the NVIDIA GPU drivers" $driverBucket = 'ec2-windows-nvidia-drivers' $driver = Get-S3Object -BucketName $driverBucket -KeyPrefix 'latest' -Region 'us-east-1' | Where-Object {$_.Key.Contains('server2022')} Copy-S3Object -BucketName $driverBucket -Key $driver.Key -LocalFile "$TempRoot\driver.exe" -Region 'us-east-1' Start-Process -FilePath "$TempRoot\driver.exe" -ArgumentList @('-s', '-noreboot') -NoNewWindow -Wait Vulkan runtime library # install the Vulkan runtime library Invoke-WebRequest -Uri "https://sdk.lunarg.com/sdk/download/latest/windows/vulkan-runtime-components.zip?u=" -OutFile "$env:TEMP\vulkan-runtime-components.zip" Expand-Archive -Path "$env:TEMP\vulkan-runtime-components.zip" -DestinationPath "$env:TEMP" Copy-Item -Path "*\x64\vulkan-1.dll" -Destination C:\Windows\System32\ DirectX shader compiler # Retrieve the DirectX shader compiler files needed for DirectX Raytracing (DXR) Invoke-WebRequest -Uri "https://github.com/microsoft/DirectXShaderCompiler/releases/download/v1.6.2104/dxc_2021_04-20.zip" -OutFile "$env:TEMP\dxc.zip" Expand-Archive -Path "$env:TEMP\dxc.zip" -DestinationPath "$env:TEMP" Copy-Item -Path "$env:TEMP\bin\x64\dxcompiler.dll" C:\Windows\System32\ Copy-Item -Path "$env:TEMP\bin\x64\dxil.dll" C:\Windows\System32\ # Clean up any temp files generated during prerequisite installation Remove-Item -LiteralPath "$env:TEMP" -Recurse -Force New-Item -Type directory -Path "$env:TEMP" そして、 EKS optimized WindowsAMI に含まれているContainerdのバージョンを更新します(1.6.18⇒1.7.1) # TEMPORARY UNTIL EKS ADDS SUPPORT FOR CONTAINERD v1.7.11: # Download and extract the containerd 1.711 release build Write-Host "Download and extract the containerd 1.7.11 release build" $webClient = New-Object System.Net.WebClient $containerdTarball = " $TempPath \containerd- $Containered_Ver .tar.gz" $containerdFiles = " $TempPath \containerd- $Containered_Ver " $webClient .DownloadFile( "https://github.com/containerd/containerd/releases/download/v $Containered_Ver /containerd- $Containered_Ver -windows-amd64.tar.gz" , $containerdTarball ) New-Item -Path " $containerdFiles " -ItemType Directory -Force | Out-Null tar.exe -xvzf " $containerdTarball " -C " $containerdFiles " # Stop containerd service Stop-Service -Name "containerd" -Force # Upgrade container version from 1.6.18 to 1.7.11 Write-Host "Upgrade container version from 1.6.18 to 1.7.11" Move-Item -Path " $containerdFiles \bin\containerd.exe" -Destination " $ContainerdPath \containerd.exe" -Force Move-Item -Path " $containerdFiles \bin\containerd-shim-runhcs-v1.exe" -Destination " $ContainerdPath \containerd-shim-runhcs-v1.exe" -Force Move-Item -Path " $containerdFiles \bin\ctr.exe" -Destination " $ContainerdPath \ctr.exe" -Force # restart containerd service Start-Service -Name containerd # Clean up the containerd intermediate files Write-Host "Clean up the containerd intermediate files" Remove-Item -Path " $containerdFiles " -Recurse -Force Remove-Item -Path " $containerdTarball " -Force 最後に、 EKS optimized WindowsAMI のImage Builder コンポーネント を使用して、前編で作成したコンテナイメージをキャッシュイメージとして追加します。 # Download the EKS artifacts archive Write-Host "Download the EKS artifacts archive" $webClient .DownloadFile( "https://ec2imagebuilder-managed-resources-us-east-1-prod.s3.amazonaws.com/components/eks-optimized-ami-windows/ $eks_optimized_ami_windows_Ver /EKS-Artifacts.zip" , "C:\EKS-Artifacts.zip" ) # Extract the EKS artifacts archive Write-Host "Extract the EKS artifacts archive" Expand-Archive -Path "C:\EKS-Artifacts.zip" -DestinationPath $TempRoot Remove-Item -Path "C:\EKS-Artifacts.zip" -Force # Add the unreal-engine-dev-windows-5.1:latest to the list of images to pre-pull Write-Host "Add the unreal-engine-dev-windows-5.1:latest image" $baseLayersFile = " $TempPath \eks.baselayers.config" $baseLayers = Get-Content -Path $baseLayersFile -Raw | ConvertFrom-Json $baseLayers .ue += "unreal-engine-dev-windows-5.1:latest" $patchedJson = ConvertTo-Json -Depth 100 -InputObject $baseLayers Set-Content -Path $baseLayersFile -Value $patchedJson -NoNewline # Get added new BaseLayers Write-Host "Perform EKS worker node setup" Push-Location $TempPath .\ Get-EKSBaseLayers .ps1 -ConfigFile eks.baselayers.config -ContainerRuntime containerd Pop-Location # Perform cleanup Write-Host "Perform cleanup" Remove-Item -Path " $TempRoot " -Recurse -Force ③ クリーン スクリプト (cleanup.ps1) この スクリプト の目的は、スタートアップ スクリプト (startup.ps1)で設定した SSH 環境を削除し、sysprep(システム準備)を開始することです。 # cleanup.ps1 # Perform cleanup Set-Service -Name sshd -StartupType 'Manual' Remove-Item -Path 'C:\ProgramData\ssh\administrators_authorized_keys' -Force # Remove the file for this script, since Packer won't have a chance to perform its own cleanup Remove-Item -Path $PSCommandPath -Force # Perform sysprep and shut down the VM # Need delete edge account for sysprep & " $Env:ProgramFiles \Amazon\EC2Launch\EC2Launch.exe" sysprep --shutdown = true 3. Windows イメージのビルドとテスト テンプレートファイルに対してPackerコマンドを実行し、 Windows AMIのビルドを開始します。 ビルドコマンド $ packer build .\eks-worker-node-ami.pkr.hcl ...出力ログ... ==> Wait completed after 52 minutes 42 seconds ==> Builds finished. ビルド完了の確認 AWS Console ⇒ EC2 ⇒ イメージ ⇒ AMI で作成されたAMIを確認できます。 Windows AMIのテスト AMIをテストするために、eksctlを使用してEKSを作成します。 以下の yaml ファイルでは、2つのnodegroupを含む Kubernetes クラスタ ーを定義しています。 # test_windows_node_eksctl.yaml apiVersion : eksctl.io/v1alpha5 kind : ClusterConfig metadata : name : test-windows-node-cluster region : ap-northeast-1 version : '1.28' nodeGroups : - name : windows-ng instanceType : g4dn.2xlarge ami : [ 作成したAMI id, ami-xxxxx ] amiFamily : WindowsServer2022FullContainer volumeSize : 120 minSize : 1 maxSize : 1 - name : linux-ng amiFamily : AmazonLinux2 minSize : 1 maxSize : 1 EKSの作成を開始します: $ eksctl create cluster -f test_windows_node_eksctl.yaml 完了確認 eksctlのコマンド実行により、 AWS はCloudFormationを呼び出してリソースを作成します。 CloudFormationでの確認 EKS管理コンソールでの確認 クラスタ ーの確認 ノードグループの確認 Session Manager を使用して Windows ノードにログインし、ソフトウェアのインストールおよびイメージのキャッシュを確認 containerdのバージョンが1.7.11であることを確認 NVIDIA GPU ドライバーを確認 Vulkanと DirectX を確認 unreal -engine-dev- windows -5.1:latestがキャッシュされていることを確認 終わりに 本記事を読むことで、UEアプリ用のカスタム Windows Node AMIの作成方法について理解していただけたと思います。 もちろん、この記事で作成した スクリプト は Unreal Editorの動作要件に基づいていますが、ビルドテンプレートファイルは共通のものです。 今後、読者は AWS 提供の EKS optimized WindowsAMI がご自身のプロジェクト要件を満たさないと感じた場合、この記事を参考にして スクリプト を置き換えて独自の Windows AMIを作成できます。 この記事では、 Windows Containerでの GPU 利用要件について言及しました。これに興味を持たれる方もいるでしょう。 次回の記事では、今回作成した Windows ノードを使用して、 Unreal Engine のPixel Streamingプロジェクトを実現する方法について説明します。 どうぞお楽しみに。 現在、 電通 総研は web3領域のグループ横断組織 を立ち上げ、Web3および メタバース 領域のR&Dを行っております(カテゴリー「3DCG」の記事は こちら )。 もし本領域にご興味のある方や、一緒にチャレンジしていきたい方は、ぜひお気軽にご連絡ください! 私たちと同じチームで働いてくれる仲間をお待ちしております! 電通総研の採用ページ 参考文献 Amazon EKS EKS optimized WindowsAMI Packer amazon-ebs Windows install-the-container-runtime DirectX-Device-Plugins 執筆: @chen.sun 、レビュー: 寺山 輝 (@terayama.akira) ( Shodo で執筆されました )
この記事は、イベント 【 PERSOL(パーソル)グループ Tech Talk #3 - 技術負債との向き合い方 - 】を開催しました。 の発表内容です。 パーソルホールディングスの岩田と申します。パーソルホールディングスはパーソルグループのホールディングス会社で、各グループ会社に共通のIT基盤などを提供しています。 早速、発表の方に移らせていただきます。 「リファクタリングを繰り返してOSS化した話」というタイトルで発表をする予定だったんですが、ちょっとタイトルを最後で変えました。 「技術的負債を負債では終わらせない。OSS化による悪あがきと、目指したいエンジニア環境」ということで、本日は発表させていただきたいと思います。
動画
該当するコンテンツが見つかりませんでした
書籍
該当するコンテンツが見つかりませんでした











