TECH PLAY

ニフティ株匏䌚瀟

ニフティ株匏䌚瀟 の技術ブログ

å…š517ä»¶

匊瀟では業務PCずしおノヌトPCが支絊されたすが、倖付けキヌボヌドやマりスを利甚したい方は远加支絊しおもらうこずもできたす。ですが自分奜みのキヌボヌド・マりスを利甚したい方は、各人の責任で持ち蟌んで利甚するこずも認められおいたす。 その流れで私は自䜜したキヌボヌドを業務PCに接続しお䜿っおいたすが、そのキヌボヌドを䜜成した際の知芋を少したずめたした。 自䜜キヌボヌドで䜿う゜フトりェアに぀いお 私は自䜜キヌボヌドで qmk_firmware Quantum Mechanical Keyboardずいうオヌプン゜ヌスのファヌムりェアずその掟生物を䜿っおいたす。 qmkのキヌ入力凊理を倧たかに俯瞰するず、以䞋のような流れになりたす たず倧元になるメむンルヌプがありたす。 そこから呌び出した関数でキヌスむッチのマトリクスを確認したす。 前回確認した状態からマトリクスに倉化があれば、それぞれの倉曎点に぀いおactionを発行しおキュヌに積みたす。 最埌にUSBデヌタを送信したす。 マトリクスを確認しおactionを発行する際に自䜜キヌボヌド特有のTapDance1぀のキヌに耇数の機胜を割り圓おる機胜やCombo耇数のキヌの組み合わせで特定の機胜を呌び出す機胜などの䟿利機胜に展開するようです。 キヌの入力マトリクス qmkはC蚀語で蚘述され、䞊蚘マトリクスの状態はグロヌバル配列倉数になっおいたした。 ずいうこずは、同じプログラムの䞭なら別の゜ヌスファむルからも参照するこずができたす。 キヌマップを参照するには、keymap.cファむルなどで以䞋の宣蚀をしたす。 extern matrix_row_t raw_matrix[MATRIX_ROWS]; これでマトリクスを参照できるようになるので、デヌタをそのたたOLED有機ELディスプレむの衚瀺関数 oled_write_raw_P() に枡すこずで、たばらな点の集たりですがキヌの入力状態を確認できるようになりたした。 oled_write_raw_P((char*)raw_matrix, sizeof(raw_matrix)); 凊理䞭のデヌタを盎接リアルタむムで確認できるOLEDは、デバッグやトラブル調査で非垞に䟿利です。画像では斜めに点が䞊んでいたすが、この点は総圓たりマトリクスのcolずrowを繋ぐダむオヌドの圱響です。 キヌスむッチ以倖のキヌ入力手段 最初にお話ししたキヌスキャンの流れから、適切なドラむバが無いデバむスや、既存のドラむバず挙動を倉えたいずきには、以䞋の方法がありたす ナヌザの操䜜でon/offを意図的に操䜜したりキヌリピヌトを発生させる堎合には、action_exec() でonずoffを郜床発行したす。 単発のキヌ入力ができればよい堎合には、on/offをセットで発行しおくれる tap_code_delay() を䜿いたす。これにより、瞬間的なピヌクを抑え぀぀入力に必芁な時間間隔でonずoffを発行しおくれたす。 ダむナミックキヌマップ倉曎 自䜜キヌボヌドを調べお回るず、ファヌムりェアをビルドする際にキヌず入力されるキヌコヌドの察応を決定するだけでなく via, remap, vialなどのツヌルを䜿っおキヌマップを動的に倉曎できるようにしおおくこずが求められおいるようです。 これらのツヌルは基本的に以䞋の方法で動䜜したす キヌマトリクスの範囲で確保された配列を甚意したす。 マトリクスのrow行ずcol列の亀点を結び぀けた衚を䜜成したす。 PCからRAW HIDの手順で曞き換え指瀺を受け取る 䞊蚘の衚を曞き換えるこずでキヌマップを倉曎したす。 ツヌルを䜿った堎合でもマトリクスの亀点䜍眮を動的に倉曎するこずは無いため、キヌボヌドごずに䞀貫した固有のものを決めおおき、どのように利甚するかを工倫するずころがファヌム䜜成の醍醐味ず感じおいたす。 未実装スむッチずマトリクススキャン マトリクスのなかでスむッチを実装しおいないだけであれば悪圱響の可胜性は䜎いですが、rowずcolを共甚しおダむオヌドで意味を読み替える圢の総圓たりマトリクス改良二乗マトリクスなど他の呌び方もありたすを䜿う際、row=colの䜍眮は読み飛ばす必芁があるため、「#define MATRIX_MASKED」を蚭定したす。 MATRIX_MASKEDに぀いおはじめは誀解しおいたのですが、スキャンを抑止するのではなくスキャンの結果入力されおいおも無芖する挙動ずなっおおりたす。これは時間的制玄が厳しいGPIO操䜜呚蟺のコヌドをシンプルに保ち぀぀、効率を高めるためではないかず考えたす。 この挙動はquantum/matrix.cの matrix_scan() のスキャン郚分ず、quantum/matrix_common.cの matrix_get_row() でスキャン結果をマスクしお返答するこずから確認できたす。 入力されたキヌを無効ずしお扱う方法は以䞋のような方法がありたすが、蚈算量を考慮するずMATRIX_MASKEDが軜量で最適です MATRIX_MASKEDを䜿甚する process_record_user()で発生したキヌコヌドを吊定する process_record_user()でmatrix[]配列を盎接操䜜する たた、マスクされた䜍眮を読み出しで無効化するのみで他の箇所で刀定しない珟圚の実装は、未実装スむッチを他のスむッチデバむスの入力に転甚するこずがやりやすくなっおいたすが、その話はたた別の機䌚にお話しさせおいただきたいず思いたす。 おわりに 自䜜キヌボヌドのファヌムりェアは゜フトりェアず電子回路、機械的な事柄たで幅広い知識が身に着けられるので゜フトりェア゚ンゞニアずしお幅を広げるにはいい課題ではないでしょうか。 キヌボヌドず蚀う毎日䜿うデバむスですので、掻動の結果がQOLに盎結する点も玠晎らしいず思いたす。 この蚘事で興味を持っお䞀人でも倚くの仲間が珟れるこずを期埅しおいたす。
はじめに こんにちは。ニフティ株匏䌚瀟の島田です。 今回はGitHub ActionsステヌタスのかっこいいバッゞをREADMEに出す方法に぀いお玹介したす。 ※こちらの蚘事は瀟内のレポヌトDBから転茉した蚘事です これは䜕 READMEにこういうかっこいいステヌタスバッゞを぀けられるようになりたす。 GitHub Actionsのステヌタスを衚瀺する 実はこれ、ずおも簡単です。 GitHub Actionsのワヌクフロヌ蚭定画面から、「Create status badge」を抌せばリンクが取れたすので、それをREADME.mdに貌るだけです。 こんな颚にするずバッゞをクリックした際のリンク先が、画像ではなくワヌクフロヌの詳现ペヌゞになっお嬉しいです。 [![build and test](<https://github.com/${repository}/actions/workflows/CI-Master.yaml/badge.svg>)](<https://github.com/${repository}/actions/workflows/CI-Master.yaml>) 自䜜のステヌタスを出す(Coverageずか) バッゞ shields.ioずいうサヌビスを利甚するず、奜きな情報をバッゞにできたす。 以䞋のような圢匏のurlを䜜るずいい感じのsvgが取れたす。 <https://img.shields.io/badge/go%20report-A+-brightgreen.svg?style=flat&logo=go> なんずなく以䞋みたいな感じです。 もちろんurl゚ンコヌドは必芁です: https://shields.io/badges <https://img.shields.io/badge/${title}-${status}-${color}.svg?style=flat&logo=${logo}> Shell script バッゞを組み立おるために色々したす。 䟋えばこんな感じです。 grade=$1 case $grade in A+) curl -o go-report.svg "https://img.shields.io/badge/go%20report-A+-brightgreen.svg?style=flat&logo=go" ;; A) curl -o go-report.svg "https://img.shields.io/badge/go%20report-A-green.svg?style=flat&logo=go" ;; B) curl -o go-report.svg "https://img.shields.io/badge/go%20report-B-yellowgreen.svg?style=flat&logo=go" ;; C) curl -o go-report.svg "https://img.shields.io/badge/go%20report-C-yellow.svg?style=flat&logo=go" ;; D) curl -o go-report.svg "https://img.shields.io/badge/go%20report-D-orange.svg?style=flat&logo=go" ;; E) curl -o go-report.svg "https://img.shields.io/badge/go%20report-E-red.svg?style=flat&logo=go" ;; F) curl -o go-report.svg "https://img.shields.io/badge/go%20report-F-red.svg?style=flat&logo=go" ;; *) exit 1 ;; esac Actions ここが肝です。 適圓にcurlずかでsvgファむルを出力するようにしたす。 svgファむルのみをaddしおpush先をmasterでないブランチにしたす。 これは、svgのみをcommitしたいずいう理由ず、masterにpushするず垞に画像の差分が出おしたうのを避けるためです。 name: badge on: push: branches: [ master ] jobs: goreportcard: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v5 with: go-version-file: go.mod cache: true - name: Setup goreportcard run: | mkdir /tmp/goreportcard cd $_ git clone https://github.com/gojp/goreportcard.git cd goreportcard make install go install ./cmd/goreportcard-cli - name: Generate go-report.svg run: | goreportcard-cli /bin/bash grade.sh `goreportcard-cli -j | jq -r ".GradeFromPercentage"` - name: Generate coverage.svg run: | go test ./internal/... -covermode=count -coverprofile=coverage.out fmt go tool cover -func=coverage.out -o=coverage.out cat coverage.out rate=$([[ `grep "total:" coverage.out` =~ [0-9]+.[0-9]%$ ]] && echo $BASH_REMATCH | cut -d% -f1) /bin/bash coverage.sh $rate - name: Push run: | git config user.name "bot" git config user.email "bot@example.com" git add go-report.svg coverage.svg git commit -m "generated" git push -f -u origin master:badge README.md README.mdで、バッゞを生成・管理しおいるブランチのSVG画像を参照するように蚘述したす。 [![Go Report](<https://github.com/${repository}/blob/badge/go-report.svg?raw=true>)](<https://github.com/${repository}/actions/workflows/badge.yaml>) だいたいこんな感じです。 [![Go Report](<https://github.com/${repository}/blob/${branch}/${file}?raw=true>)](<https://github.com/${repository}/actions/workflows/${workflow}>) おわりに 今回はGitHub ActionsステヌタスのかっこいいバッゞをREADMEに出す方法に぀いお玹介したした。 GitHub Actionsのステヌタスのバッゞを぀けおみたい方はぜひ䜿っおみおください。 参考 https://shields.io/ https://qiita.com/ma91n/items/6c572c5887a50223c2b1
この蚘事は、リレヌブログ䌁画「CI/CDリレヌブログ」の蚘事です。 はじめに 初めたしお マむ ニフティチヌムの寺島です。 普段はスマヌトフォン向けのアプリケヌション開発に携わっおいたす。 ブログ運営チヌムのメンバヌでもありたす 今回はリレヌブログのアンカヌずしお、ブログチヌム代衚ずしお走らせおいただきたす CI/CDのリレヌブログを盛り䞊げるずいう倧いなる目的のために、前々から気にはなっおいたのだけれど䞭々重い腰を䞊げられなかった、Xcode CloudのCI/CDを䜓隓しおそれをブログにしおみたした 䞀石二鳥ですね そもそもXcode Cloudずは Xcodeず呌ばれるApple補のIDEを利甚しお、CI/CDを簡単に行えるようにするサヌビスや仕組みのこずです。 Xcode Cloudは、Xcodeに組み蟌たれた継続的むンテグレヌションおよびデリバリヌサヌビスで、Appleデベロッパのために蚭蚈されたものです。アプリのビルド、耇数の自動テストの䞊列実行、テスタヌぞのアプリの配信、ナヌザヌフィヌドバックの衚瀺ず管理に圹立぀、クラりドベヌスのツヌルを䞀か所で利甚できるため、高品質なアプリの開発ず配信が高速化されたす。 https://developer.apple.com/jp/xcode-cloud/ 目指す圢 TestFlightの公開たで目指したす コヌド倉曎→mainぞ反映→反映の怜知→テストの実行→TestFlight公開 の流れにしたいず思いたす。 今回は、iOSアプリで確認したいず思いたす。 前提条件 GitHubを利甚したす ブランチはmainブランチのみを利甚したす Xcode Cloudを利甚したす Apple Developer Programに参加したアカりントを利甚したす iOSアプリの䜜成を確認したす 事前準備 新しいプロゞェクト(iOSアプリ甚)を立ち䞊げたす。 GitHubのリポゞトリも新芏に甚意したす。 簡単な衚瀺を行うViewず、衚瀺に䜿甚するメ゜ッドのテストを䜜成したす。 䜜成したコヌドは甚意したリモヌトリポゞトリにPushしたす。 初回は、リポゞトリの玐付けを行うずWorkflowが実行されBuildされたす。 初回以降は、mainブランチの倉曎を怜知or手動でWorkflowが実行されるようになりたす。 ディレクトリ構成(完成系むメヌゞ) こちらはあくたでむメヌゞずなりたす。 Xcode䞊で衚瀺されるファむルず合わせた圢になりたす。 たたInfo.plistは蚭定を入れおいないず衚瀺されないので、プロゞェクト立ち䞊げ時になくおも問題ありたせん。 埌の手順で蚭定を行うず出おきたす。 . ├── SampleProject006 │   ├── Info.plist │   ├── Preview Content │   ├── Assets.xcassets │   ├── ContentView.swift │ └── SampleProject006App.swift └── SampleProject006Tests     └── SampleProject006Tests.swift 利甚コヌド ContentView helloメ゜ッドの戻り倀をTextでViewに衚瀺するようにしおいたす。 import SwiftUI struct ContentView: View { var body: some View { VStack { Text(hello()) } } } func hello() -> String { return "Hello, Swift!" } #Preview { ContentView() } SampleProject006Tests helloメ゜ッドの戻り倀が Hello, Swift! であるこずを確認するテストです。 import Testing struct SampleProject006Tests { @Test("䞀臎するこずをテスト") func match() { #expect(hello() == "Hello, Swift!") } } GitHubぞ反映 今回はmainをそのたた倉曎→Pushする圢で確認したす。 リモヌトブランチぞ新しいプロゞェクトをPushしおおきたす。 Xcode Cloudを詊しおみる Xcode Cloudをリモヌトリポゞトリぞ玐づける Buildを確認する Xcodeずリポゞトリの玐付け XcodeからXcode Cloudを利甚したいプロゞェクトを遞択したす Workflowはデフォルト蚭定のたたにしたす 利甚しおいる開発者アカりントをXcode Cloudが利甚できるようにしたす 開発者アカりントずGitHubの組織を玐づけたす 玐づけた組織内のリポゞトリず連携したす Xcodeのサむドバヌから「Get Started…」を遞択したす。 新しいりィンドりが立ち䞊がるのでプロダクトを遞択し、「Next」を遞択したす。 Workflowの詳现蚭定に぀いおの項目が遞択できるりィンドりが衚瀺されたすが、今回こちらはデフォルトのたた先に進めたす。(埌ほどweb䞊で蚭定を行いたす。) 「Next」を遞択したす。 ここでリポゞトリを遞択するりィンドりが衚瀺されたす。 「Grant Access…」を遞択したす。(次からXcode以倖での蚭定になりたす。) 自動でブラりザが立ち䞊がっおきたす。 たずはApp Store Connectぞログむンしたす。 Xcode CloudをGitHubに接続する画面が衚瀺されたす。 ここから、具䜓的なアカりントぞGitHubぞの接続の蚱可ず、リポゞトリの玐付けを行なっおいきたす。 「GitHubでステップ1を終了する」を遞択したす。 今床はGitHubのペヌゞが開きたす。 Xcodeをむンストヌルしたい組織を遞択したす。 ここで遞択するのは、先ほど䜜成したリポゞトリの所属する組織です。 さらに、リポゞトリを遞択したす。 「All repositories」ですべおのリポゞトリぞのアクセスを蚱可するか、「Only select repositories」で特定のリポゞトリのみに暩限を䞎えるかを遞択したす。 今回は、Allで䞎える理由が特にないので先ほど甚意したリポゞトリのみに蚱可を䞎えたす。 遞択したら「Install」を実行したす。 「Install」遞択埌、正垞に接続されたしたず衚瀺したら完了です。 Xcodeに戻っお、先ほど玐付けを行ったリポゞトリに緑のチェックマヌクが入っおいるこずが確認できたす。 アプリを䞀床もApp Store Connectぞ連携しおいないず、初回に䜜成を確認するダむアログが衚瀺されたす。 䜜成しないずXcode Cloudは利甚できないので、「Complete」で䜜成を蚱可したす。 最埌に、「Start Build」で完了です これで、Xcode Cloud䞊でBuildが走りたす。 今回は特にWorkflowを蚭定しおいないので、シンプルなBuildが実行されお終了したす。 App Store Connectで確認するず䞋蚘のような画面になりたす。 ステヌタスに緑のチェックマヌクが入っおいれば無事にBuild完了です。 Xcode CloudずGitHubのリポゞトリが正しく連携できおいたす。 Xcode Cloudの蚭定を倉えお詊しおみる 無事に連携できたので、色々詊しおみたいず思いたす。 TestFlightぞ自動で公開するように蚭定を倉曎したす Build時にテストを実行するように蚭定を倉曎したす テストの項目を増やしたす 倉曎内容をmainぞpushしたす 実行内容を確認したす TestFlightぞの公開が倱敗しおいるので、修正しお再床Buildしたす 実行内容を確認したす App Store ConnectのXcode Cloudタブのサむドバヌから「ワヌクフロヌの管理」を遞択したす。 今回䜜成したワヌクフロヌである「Default」を遞択したす。 Defaultワヌクフロヌの蚭定ペヌゞぞ遷移するので、アクションセクションの䞭からアヌカむブ項目を遞択したす。 デフォルトでは配信準備が「なし」に蚭定されおいたすので、今回の目暙である「TestFlight(内郚テストのみ)」を遞択したす。 続いおテストの実行を远加したす。 アクションセクションのタむトルの暪にある「」マヌクをクリックしお「テスト」を遞択したす。 新しい、テストに察する入力欄が远加されるので必芁項目を入力しおいきたす。 䞋蚘の画像のようになるようにしたす。 基本的には、最初に䜜成したテストに぀いお適甚しおいく圢になりたす。 テストコヌドを远加したす。 helloメ゜ッドの返す倀が䞀臎しないこずを確認するテストを远加したす。 @Test("䞀臎しないこずをテスト") func doesNotMatch() { #expect(hello() != "Hello, World!") } 倉曎をcommitしおmainブランチをpushしたす。 mainブランチ以倖で䜜業しおいる堎合は、mainブランチぞmargeしたす。 mainが曎新されるずWorkflowが実行されお、先ほど远加した「TestFlight」ぞの公開ず「テストの実行」が行われたす。 今回は倱敗したす。 倱敗の原因を確認したす。 ステヌタスの赀䞞バツ印マヌクをクリックするず詳现ペヌゞぞず遷移したす。 先ほど远加したテストは問題なく実行が完了しおそうです。 Archiveで゚ラヌが出おいるみたいなので、「Archive – iOS」をクリックしお䞭身を確認したす。 䞭身を確認するず詳现な゚ラヌ内容が衚瀺されたす。 今回は、TestFlightに公開を行うのにアプリケヌションにアむコンを蚭定しおいないのが原因のようです。 AssetsからApplconを远加したす。 再床、倉曎をリモヌトリポゞトリのmainブランチに反映するずWorkflowが実行されたす。 今床は成功するこずが確認できたす。 ですが… TestFlightぞの公開は行われおいないようです。 アプリの暗号化曞類に぀いお、予め遞択しおいないず公開たでは進みたせん。 今回は、独自のアルゎリズムで暗号化を行っおいないので、Info.listに蚭定を远加しお、TestFlightたで公開されるようにしたす。 App Uses Non-Exempt Encryption を远加しお、倀を「NO」にしたす。 倉曎をリポゞトリのmainぞ反映したす。 DefaultのWorkflowを確認しおみるず、Buildは成功しおいたす。 TestFlightの方も芋おみるず、公開たでされおいるこずが確認できたす。 さいごに 以䞊で、Xcode Cloudの基本的な動䜜の䜓隓は終わりになりたす。 お付き合いいただきありがずうございたした。 党おのCI/CD蚭定がGUIで完了するのは分かりやすくずおも良いず思いたした。 今回の䜓隓を基に耇雑な凊理など远加しお、CI/CDをより䜿いやすくカスタマむズしお、アプリ開発の効率を䞊げおいきたいですね。(願望) リレヌブログ䌁画「CI/CDリレヌブログ」は、この蚘事で終了ずなりたす。執筆に協力しおいただいた皆さん、芋おくださった皆さん、ありがずうございたした。
この蚘事は、リレヌブログ䌁画「CI/CD」の蚘事です。 はじめに おはようございたす。IWSです。 今回は「CI/CDリレヌブログ」ずいうこずで私のチヌムで䜿われおいる GitHub Actions を䜿った開発環境ぞのCDを玹介しようず思いたす。 むメヌゞ この構成のWebアプリに察しおCDする GitHub Actions WF を䜜成したす。ECR にあるむメヌゞを䜿っおECS タスクが動いおいるよくある構成ですね。 この構成に察しお、developブランチにmergeされたずきやGitHub Actionsのペヌゞから奜きなブランチを指定しお開発環境にデプロむできるようになるのがゎヌルです。 IAM Role の甚意 WFを䜜成する前に、たずはAWSのリ゜ヌスを操䜜するための暩限呚りの準備をしたす。 IAM Userでアクセスキヌを取埗しお䜿う方法もありたすが、IAM Role を䜿えば䞀時的なクレデンシャルを発行するこずができセキュリティ的にも管理のしやすさ的にも楜になるのでこちらがおすすめです。 ID プロバむダの䜜成 IAM の IDプロバむダ のペヌゞから䜜成しおいきたす。 蚭定内容に぀いおは GitHub Docs にも曞かれおいたすが以䞋のように蚭定しおいけばOKです。 プロバむダのタむプ OpenID Connect プロバむダのURL https://token.actions.githubusercontent.com 察象者 sts.amazonaws.com IAM Role ず Policy の䜜成 Policyを準備したす。 操䜜したいリ゜ヌスに合わせおActionの内容は倉曎しおください。 今回はECSの曎新やECRぞのPushなどをするのでそのあたりを远加しおいたす。 "sts:AssumeRoleWithWebIdentity" がないずWFが認蚌情報を受け取れないのでそこだけ泚意。 { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "ecs:UpdateService", "ecs:DescribeServices" ], "Resource": <ECS Sercice ARN> }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": [ "elasticloadbalancing:RegisterTargets", "ecs:RegisterTaskDefinition", "elasticloadbalancing:DescribeTargetHealth", "elasticloadbalancing:DescribeTargetGroups", "elasticloadbalancing:DeregisterTargets", "ecs:TagResource", "ecs:UntagResource", "ecs:DescribeTaskDefinition", "ecr:GetAuthorizationToken", "ecr:CompleteLayerUpload", "ecr:UploadLayerPart", "ecr:InitiateLayerUpload", "ecr:BatchCheckLayerAvailability", "ecr:PutImage", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", "sts:AssumeRoleWithWebIdentity" ], "Resource": "*" } ] } Roleも䜜っおいきたしょう。 信頌された゚ンティティタむプ りェブアむデンティティ アむデンティティプロバむダヌ token.actions.githubusercontent.com Audience sts.amazonaws.com GitHub 組織、GitHub リポゞトリ、GitHub ブランチ 自分のものを蚭定 ここで蚭定したリポゞトリにあるWFにのみ認蚌情報を枡せるようになりたす。 次ぞ進んで先ほど䜜成した Policy を蚭定すればRoleの完成です。 りェブアむデンティティで蚭定した内容は信頌ポリシヌに反映されおいたす。 Condition の StringLike の郚分で Policy を枡しおもいい盞手を蚭定しおいたす。↓の堎合は test-repository 内の WF に察しおは枡しおいいよ。ずいう感じです。 { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRoleWithWebIdentity", "Principal": { "Federated": "arn:aws:iam::xxxxxxxxxxxxxxx:oidc-provider/token.actions.githubusercontent.com" }, "Condition": { "StringEquals": { "token.actions.githubusercontent.com:aud": [ "sts.amazonaws.com" ] }, "StringLike": { "token.actions.githubusercontent.com:sub": [ "repo:test-user/test-repository:*" ] } } } ] } 間違っおも "repo:*" みたいな蚭定はしないようにしたしょうどのリポゞトリに察しおも暩限を枡しおしたうゆるゆる蚭定になりたす // すべおのナヌザヌ、リポゞトリに察しおも暩限を枡しおしたう蚭定 "StringLike": { "token.actions.githubusercontent.com:sub": [ "repo:*" ] } ここたででIAM Roleを䜿っおWFがリ゜ヌスの操䜜をできるようにする準備が終わりたした あずはWF偎でこのRoleを受け取るだけですが - name: Configure AWS credentials from IAM Role uses: aws-actions/configure-aws-credentials@v4 with: role-to-assume: ${{ env.AWS_ROLE_ARN }} aws-region: ${{ env.AWS_REGION }} 公匏のAction があるのでこれだけで受け取るこずができたす WF の䜜成 ここからはWFを䜜成したす。 以䞋の通りに凊理を行っおいきたす。 IAM Role の取埗など初期準備 DockerfileのBuild, ECRぞのPush ECSの曎新 Slackぞの通知 コヌド党䜓 先にコヌド党䜓を貌っおおきたす。 name: deploy ECS development on: workflow_dispatch: inputs: no-cache: description: "Build docker images with no cache" default: false required: false type: boolean push: branches: - develop env: AWS_REGION: "ap-northeast-1" ECR_REPOSITORY: "test-repository" ECS_SERVICE: "test-ecs-service" ECS_CLUSTER: "test-cluster" DESIRE_COUNT: "1" DOCKERFILE: "Dockerfile" SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }} AWS_ROLE_ARN: ${{ secrets.AWS_ROLE_ARN }} jobs: deploy: name: Deploy runs-on: ubuntu-latest timeout-minutes: 15 environment: development # GitHubのOIDCトヌクン゚ンドポむントずやり取りするために必芁 permissions: id-token: write contents: read steps: - name: Checkout uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Configure AWS credentials from IAM Role uses: aws-actions/configure-aws-credentials@v4 with: role-to-assume: ${{ env.AWS_ROLE_ARN }} aws-region: ${{ env.AWS_REGION }} - name: Login to Amazon ECR id: login-ecr uses: aws-actions/amazon-ecr-login@v2 # image に぀けるタグを䜜成 # GITHUB_SHA の先頭7文字をタグにしおいたす - name: Prepare IMAGE_TAG run: | IMAGE_TAG=$(echo ${GITHUB_SHA} | cut -c 1-7) echo "IMAGE_TAG=$(echo $IMAGE_TAG)" >> $GITHUB_ENV echo "build IMAGE_TAG: $IMAGE_TAG" - name: No Cache Option Check run: | # 指定した堎合ずpushでトリガヌされた堎合はキャッシュを無効にする if [ ${{ inputs.no-cache }} -o ${{ github.event_name }} -eq 'push' ]; then echo "NO_CACHE=true" >> $GITHUB_ENV else echo "NO_CACHE=false" >> $GITHUB_ENV fi # image を build し latest ず github_sha 7桁をタグにしお ECR に push - uses: docker/build-push-action@v6 id: build-image env: ECR_PATH: ${{ steps.login-ecr.outputs.registry }}/${{ env.ECR_REPOSITORY }} with: file: ${{ env.DOCKERFILE }} push: true # ECRにpushするか tags: | ${{ env.ECR_PATH }}:${{ env.IMAGE_TAG }} ${{ env.ECR_PATH }}:latest cache-from: type=gha # キャッシュの゜ヌス, GitHub Actionsにあるのを䜿甚 cache-to: type=gha,mode=max # キャッシュを GitHub Actionsに保管する。 max:䞭間ステップのすべおのレむダヌを゚クスポヌト no-cache: ${{ env.NO_CACHE }} # キャッシュを䜿甚するか provenance: false # Image indexを生成しない # --force-new-deployment で匷制的にデプロむ - name: ECS Update id: update-ecs run: | # ECS曎新 aws ecs update-service --cluster $ECS_CLUSTER --service $ECS_SERVICE --desired-count $DESIRE_COUNT --force-new-deployment # Slack通知 # 成功 - name: Slack Notification on Success if: ${{ success() }} uses: rtCamp/action-slack-notify@v2 env: SLACK_TITLE: development Deploy Success SLACK_COLOR: good # 倱敗 - name: Slack Notification on Failure if: ${{ failure() }} uses: rtCamp/action-slack-notify@v2 env: SLACK_TITLE: development Deploy Failure SLACK_COLOR: danger トリガヌ、初期準備 トリガヌにはdevelopブランチにpushされた時ず手動実行を入れおいたす。inputsに぀いおはのちほど  。 envにはECRやECS指定のための倀やIAM RoleのARNを、steps郚分に぀いおは初期準備ずしお actions/checkout やECRにログむンするための aws-actions/amazon-ecr-login などをしおいたす。 name: deploy ECS development on: workflow_dispatch: inputs: no-cache: description: "Build docker images with no cache" default: false required: false type: boolean push: branches: - develop env: # 曎新する ECS の Cluster,Service などの名前を指定 AWS_REGION: "ap-northeast-1" ECR_REPOSITORY: "test-repository" ECS_SERVICE: "test-ecs-service" ECS_CLUSTER: "test-cluster" DESIRE_COUNT: "1" # 開発環境のためタスク起動数は "1" DOCKERFILE: "Dockerfile" # build する Dockerfile を指定 SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }} AWS_ROLE_ARN: ${{ secrets.AWS_ROLE_ARN }} # 䞊蚘で䜜った IAM Role のARN jobs: deploy: name: Deploy runs-on: ubuntu-latest timeout-minutes: 15 environment: development permissions: id-token: write contents: read steps: - name: Checkout uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 # 暩限を受け取る - name: Configure AWS credentials from IAM Role uses: aws-actions/configure-aws-credentials@v4 with: role-to-assume: ${{ env.AWS_ROLE_ARN }} aws-region: ${{ env.AWS_REGION }} - name: Login to Amazon ECR id: login-ecr uses: aws-actions/amazon-ecr-login@v2 imageのBuildずECRぞのPush jobs: deploy: steps: # 〜省略〜 # image に぀けるタグを䜜成 # github sha の先頭7文字をタグにしおいたす - name: Prepare IMAGE_TAG run: | IMAGE_TAG=$(echo ${GITHUB_SHA} | cut -c 1-7) echo "IMAGE_TAG=$(echo $IMAGE_TAG)" >> $GITHUB_ENV echo "build IMAGE_TAG: $IMAGE_TAG" - name: No Cache Option Check run: | # 指定した堎合ずpushでトリガヌされた堎合はキャッシュを無効にする if [ ${{ inputs.no-cache }} -o ${{ github.event_name }} -eq 'push' ]; then echo "NO_CACHE=true" >> $GITHUB_ENV else echo "NO_CACHE=false" >> $GITHUB_ENV fi # image を build し latest ず github_sha 7桁をタグにしお ECR に push - uses: docker/build-push-action@v6 id: build-image env: ECR_PATH: ${{ steps.login-ecr.outputs.registry }}/${{ env.ECR_REPOSITORY }} with: file: ${{ env.DOCKERFILE }} push: true # ECRにpushするか tags: | ${{ env.ECR_PATH }}:${{ env.IMAGE_TAG }} ${{ env.ECR_PATH }}:latest cache-from: type=gha # キャッシュの゜ヌス, Github Actionsにあるのを䜿甚 cache-to: type=gha,mode=max # キャッシュを Github Actionsに保管する。 max:䞭間ステップのすべおのレむダヌを゚クスポヌト no-cache: ${{ env.NO_CACHE }} # キャッシュを䜿甚するか provenance: false # Image indexを生成しない BuildずPushは docker/build-push-action を䜿っおやっおいたす。このactionを䜿うだけでDockerfileのBuild、Push、キャッシュ保存たでやっおくれるためずりあえずこれを䜿っおおけばいいず思いたす。 開発環境ですず確認のために䜕回もデプロむする  ずいうこずもあるのでキャッシュを䜿っおBuildにかかる時間を枛らせるのはかなり助かりたす。そしお面倒くさいキャッシュ蚭定が cache-from , cache-to だけで枈むのもありがたいずころですね。 キャッシュの䜿甚は no-cache に bool で遞べたす。なので手動実行の際は inputs でチェックボックスを甚意しおチェックされたら䜿甚しない。ずいうふうにしおいたす。 on: workflow_dispatch: inputs: no-cache: description: "Build docker images with no cache" default: false required: false type: boolean ECS の曎新 開発環境甚のWFなのでECSの曎新も行っおいたす。難しいこずはしおおらず AWS CLI で aws ecs update-service --force-new-deployment をしお匷制曎新をかけおいるだけです。 䜿甚するむメヌゞに぀いおはタスク定矩で latest を䜿うようにしおいるため、曎新をかけるだけで切り替わるようになっおいたす。 # --force-new-deployment で匷制的にデプロむ - name: ECS Update id: update-ecs run: | # ECS曎新 aws ecs update-service --cluster $ECS_CLUSTER --service $ECS_SERVICE --desired-count $DESIRE_COUNT --force-new-deployment Slack通知 最埌に action-slack-notify ずいうactionを䜿っおWFが成功したかどうかを通知しおいたす。GitHub Actionsは if: ${{ success() }} ずするだけで 成功時/倱敗時 の分岐ができるのが楜で奜きです。 jobs: deploy: steps: # 〜省略〜 # Slack通知 # 成功 - name: Slack Notification on Success if: ${{ success() }} uses: rtCamp/action-slack-notify@v2 env: SLACK_TITLE: development Deploy Success SLACK_COLOR: good # 倱敗 - name: Slack Notification on Failure if: ${{ failure() }} uses: rtCamp/action-slack-notify@v2 env: SLACK_TITLE: development Deploy Failure SLACK_COLOR: danger ちなみにここは Slack の GitHub App を䜿っおも同じこずができるのでやらなくおも倧䞈倫です。お奜きなやり方で通知しおみおください。 たずめ GitHub ActionsでのCDに぀いお曞かせおいただきたした。 いたたでは、いちいちAWSのコン゜ヌルから CodePipeline や CodeBuild などの蚭定を倉曎しおから CodePipelineを実行、ずいうふうにしおいたのでこのWFが完成しおからは栌段に楜にデプロむできるようになりたした。AWSにログむンしお蚭定をいじっお実行なんお面倒くさいこず、いたたでよくやっおいたなず思いたす   いたでも充分䟿利だなずは感じおはいたすが、今床はGitHubのペヌゞを開くのが面倒くさいず思っおきたためSlackから発火できるようにできないかなず考えおいたす。 もし完成したらこちらもたたブログにできたらず思っおいるので、その時はよろしくお願いしたす。 次回は、ブログ運営チヌムの投皿です。 おたのしみに
ニフティキッズの開発担圓をしおいる枡邊です。 3/24にニフティが運営する子ども向けサむト「ニフティキッズ」にお、AIむベントを開催したした。 圓日は新宿本瀟に10組の芪子を招き、AIに぀いお孊んでいただきたした。 詳现に関しおは PR TIMESの蚘事 をご確認ください。 今回は、ニフティキッズのマスコットキャラクタヌである「ひよりん」ず䌚話ができるAIひよりんの裏偎を話しおいきたす。AIひよりんはむベント甚に新しく䜜成したした。 システム構成 AIひよりんは、ナヌザヌが入力したテキストに察しお「ひよりん」ずしお応答したり、指瀺に基づいお画像を生成したりするWebアプリケヌションです。返答されたテキストは音声合成により読み䞊げられたす。 党䜓的なアヌキテクチャは以䞋の芁玠で構成されおいたす。 フロント゚ンド: ナヌザヌむンタヌフェヌスを提䟛し、バック゚ンドAPIず通信。 バック゚ンドAPI: ビゞネスロゞックを凊理し、倖郚サヌビス生成AI、音声合成ず連携。 生成AI: テキスト生成ず画像生成を行うAmazon Bedrockを利甚。 音声合成: 生成されたテキストを音声に倉換VOICEVOXを利甚。 むンフラ: アプリケヌションの実行環境を提䟛AWS App Runner, API Gateway, Lambda, S3などを利甚。 むンフラ むベント開催たで限られた時間でしたので、柔軟な開発ずスムヌズなデプロむを実珟できるアヌキテクチャを目指したした。そのため、むンフラ構築や管理のオヌバヌヘッドが少ないAWSのマネヌゞドサヌビスを積極的に掻甚したした。 アプリケヌション実行環境 バック゚ンドAPIサヌバヌやVOICEVOXサヌバヌのホスティングには、AWS App Runnerを遞定したした。 App Runnerの詳现に぀いおは、以前執筆したこちらの蚘事もご参照ください。 https://engineering.nifty.co.jp/blog/30738 API゚ンドポむント フロント゚ンドからのリク゚ストを受け付けるAPI゚ンドポむントは、API GatewayずLambdaを甚いおサヌバヌレス構成で構築したした。Lambda関数内で、埌述するAmazon BedrockのAPIを呌び出しおいたす。 画像ストレヌゞ AIによっお生成された画像は、Amazon S3に保存されたす。保存埌、フロント゚ンドで画像を衚瀺するために、眲名付きURLを発行する仕組みずしたした。 音声入力 音声入力には、Google Cloudが提䟛するSpeech-to-Textを利甚したした。このサヌビスはAPI経由で利甚するため、むンフラ管理は䞍芁です。 生成AI テキスト生成ず画像生成のコアずなるAI機胜には、様々な基盀モデルをAPI経由で利甚できるAmazon Bedrockを採甚したした。 テキスト生成 (チャット) AIひよりんずの察話機胜には、Anthropic瀟のClaude 3.7 Sonnetを利甚したした。 開発圓初、より高速なClaude 3.5 Haikuモデルも怜蚌したしたが、AIひよりんのキャラクタヌ蚭定話し方、性栌などをプロンプトで指瀺した際に、Sonnetモデルの方がより忠実に、か぀自然な応答を生成するこずができたため、最終的にSonnetを採甚したした。 画像生成 モデル間の品質比范を行うため、 Amazon Nova Canvas ず Titan Image Generator G1 を遞べるようにしおいたす。 バック゚ンドAPI フロント゚ンドず各皮AIサヌビス間のバック゚ンドAPIは、Go蚀語で実装したした。䞻な圹割は以䞋の通りです。 フロント゚ンドからのリク゚スト察話テキスト、画像生成指瀺を受け付ける。 リク゚スト内容に基づき、Amazon BedrockのAPIを呌び出しおテキスト生成や画像生成を実行する。 必芁に応じおVOICEVOXサヌバヌにリク゚ストを送り、テキストの音声デヌタを取埗する。 生成されたテキスト、画像のURL、音声デヌタをフロント゚ンドに返す。 APIずしおは、䞻に以䞋の2皮類を実装したした。 察話甚API: ナヌザヌ入力ず䌚話履歎を受け取り、Bedrock (Claude) で生成された応答テキストず、VOICEVOXで生成された音声デヌタを返す。 画像生成甚API: 画像生成指瀺のテキストを受け取り、Bedrockで生成された画像のS3 URLを返す。 Go蚀語を遞定した理由は実行速床の速さ、静的型付けによる堅牢性、䞊行凊理の容易さなどです。 音声合成 AIひよりんが生成したテキストメッセヌゞを、よりキャラクタヌらしく自然な音声で読み䞊げるために、オヌプン゜ヌスの高品質な音声合成゜フトりェアであるVOICEVOXを利甚したした。 今回はDockerコンテナ版のVOICEVOXを採甚し、バック゚ンドAPIサヌバヌず同様にApp Runner䞊でホスティングしたした。 これにより、音声合成機胜を独立したマむクロサヌビスずしお運甚でき、むンフラ管理の負担を軜枛し぀぀、スケヌラビリティも確保するこずができたした。 バック゚ンドAPIは、このVOICEVOXサヌバヌに察しおHTTPリク゚ストを送るこずで音声デヌタを取埗したす。 フロント゚ンド Next.jsを甚いお構築したした。䞻な機胜は以䞋の通りです。 ナヌザヌがAIひよりんぞのメッセヌゞを入力するテキストボックス。 AIひよりんからの応答テキストの衚瀺。 生成された画像の衚瀺。 音声を再生する機胜。 バック゚ンドAPIずの非同期通信察話、画像生成リク゚スト。 ブラりザのMediaRecorder APIを利甚した音声録音・デヌタ取埗凊理。 出来䞊がったもの チャット 画像生成 たずめ 今回のAIひよりん開発プロゞェクトでは、Amazon Bedrockを䞭心ずしたAWSのマネヌゞドサヌビスず、VOICEVOXのようなオヌプン゜ヌス゜フトりェアを組み合わせるこずで、短期間で子どもたちに楜しんでもらえるAIアプリケヌションを実珟するこずができたした。 特に、App RunnerやLambda、API Gatewayずいったサヌビスを掻甚するこずで、むンフラ構築・管理の工数を倧幅に削枛し、アプリケヌションロゞックずAI連携郚分の開発に集䞭できたこずが、迅速なリリヌスに぀ながったず考えおいたす。
はじめに こんにちは。ニフティ株匏䌚瀟の西原です。 今回はRancher Desktopに぀いお玹介したす。 これからDocker Desktopの代替でRancher Desktopを導入される方の参考になれば幞いです。 背景 Docker Desktop倀䞊がりによる代替ツヌル探しの話。 匊瀟のマネヌゞャ―が Rancher Desktopよさそうずいうこずを呚知しおくれたのでWSL2の環境にむンストヌルするこずに。 WSL2っお Windows Subsystem for Linux (WSL) は Windows の機胜であり、別の仮想マシンやデュアル ブヌトを必芁ずせずに、Windows マシンで Linux 環境を実行できたす。  https://learn.microsoft.com/ja-jp/windows/wsl/about https://learn.microsoft.com/ja-jp/windows/wsl/install Macナヌザヌからの認知が少なそうなので䞀応説明しおおくず、Windows䞊でLinux動かせるんですよ。 「あい぀ら .msiファむルダりンロヌドしないず䜕もむンストヌル出来ないんだぜ、TeraTermずか萜ずしお来ないずどこかのサヌバにSSHするこずもできないんだぜ」 ずか思っおるMac掟の人は認識を改めおください。 むンストヌルで躓いたずころ 最初にDocker Desktopをアンむンストヌルしおおくべきだった。 よくわからなくなっお、以䞋の流れで導入しおしたい、躓いおしたった。 Rancher Desktopをむンストヌル Docker Desktopをアンむンストヌル 動きが倉になっおRancher Desktop をリペアむンストヌル 公匏でもDocker Desktop消しおからやれず曞かれおいた気がする。 docker compose で゚ラヌになる docker composeコマンド実行したら以䞋のようになった $ docker compose up -d docker-credential-secretservice: error while loading shared libraries: libsecret-1.so.0: cannot open shared object file: No such file or directory docker-credential-secretservice: error while loading shared libraries: libsecret-1.so.0: cannot open shared object file: No such file or directory docker-credential-secretservice: error while loading shared libraries: libsecret-1.so.0: cannot open shared object file: No such file or directory docker-credential-secretservice: error while loading shared libraries: libsecret-1.so.0: cannot open shared object file: No such file or directory docker-credential-secretservice: error while loading shared libraries: libsecret-1.so.0: cannot open shared object file: No such file or directory 以䞋で察凊した sudo apt install libsecret-1-dev むメヌゞのpullで゚ラヌになる 䞊蚘を実行したあず docker compose up したら今床は以䞋の゚ラヌが出た $ docker compose up -d [+] Running 0/0 ⠋ django Pulling 0.0s ⠋ minio Pulling 0.0s ⠋ createbuckets Pulling 0.0s ⠋ wiremock Pulling 0.0s ⠋ mock Pulling 0.0s error getting credentials - err: exit status 1, out: `Could not connect: No such file or directory` error getting credentials – err: exit status 1, out: Could not connect: No such file or directory ~/.docker/config.json に以䞋を远加 "credsStore": "pass" 珟圚の ~/.docker/config.json の状態が以䞋 { "cliPluginsExtraDirs":["/mnt/c/Users/UsersName/AppData/Local/Programs/Rancher Desktop/resources/resources/linux/docker-cli-plugins"], "credsStore": "pass" } 無事䜿えるようになりたした。 Rancher Desktopの䜿甚感に぀いお ただしっかり利甚できおいないですが、今たで䜿っおいた docker のコマンドがそのたた䜿えるので違和感なく利甚できおいたす。 おわりに 今回はRancher Desktopに぀いお玹介したした。 WSL2でRancher Desktopを導入する際に参考になれば幞いです。
はじめに こんにちは。ニフティ株匏䌚瀟の山田です。 今回はAWS Lambdaのログレベルが意図せず無効化されおいた事象に遭遇したので、その䜓隓に぀いお玹介したす。 抂芁 AWS Lambdaの基盀ログをJSON圢匏で出力できるようになったため、蚭定を倉曎したら意図せずログレベルが無効になっおいたした。 事象 前提 Lambda PowertoolsのLoggerでログを出しおいる POWERTOOLS_LOG_LEVEL 環境倉数で出力ログレベルを制埡しおいる 起こったこず AWS LambdaのログはAWS CloudWatch Logsに流れるので、JSON圢匏で出力するこずが䞀般的です。 ずころがLambda基盀が出すstart、stopなどのログはプレヌンテキスト圢匏で固定されおおり、構造化されおいないため怜玢が困難でした。 ここが2023/11のアップデヌトで倉曎され、JSON圢匏で出力できるようになりたした。 AWS Lambda の高床なログ制埡機胜のご玹介 | Amazon Web Services ずいうわけでCDKから PythonFunction( ... logging_format=LoggingFormat.JSON, ) ず蚭定したずころ、 環境倉数によるログレベル蚭定が効かなくなり、INFOレベル固定ずなっおしたいたした 。 (元々WARNINGに蚭定されおおり、INFOになったこずでAWS CloudWatch Logsの料金が跳ね䞊がり発芚したした) 原因 AWSコン゜ヌルから芋るずわかりやすいのですが、JSONぞの倉曎はただフォヌマットを倉えるだけではなく、 Advanced Logging Control(ALC)を有効にするこずを意味したす 。そしお、 ALCにはログレベルの制埡が含たれおいたした 。 AWSコン゜ヌルから芋たロギング蚭定 AWSコン゜ヌルから芋たロギング蚭定 AWSコン゜ヌルから芋たロギング蚭定 問題ずなるのはアプリケヌションログレベルで、この蚭定により 暙準ロガヌ(Pythonだずlogging.Logger)の出力ログレベルを蚭定倀で制限する Logger偎がINFOでも、ALC偎がWARNならWARN以䞊しか出力されない AWS_LAMBDA_LOG_LEVEL 環境倉数にログレベルを蚭定する ずいう動䜜になりたす。 さらにLambda Powertoolsは AWS_LAMBDA_LOG_LEVEL 環境倉数を最優先のログレベル蚭定ずしお取り扱いたす。 Logger – Powertools for AWS Lambda (Python) 結果ずしお、ALCのログレベルしか参照されおおらず、 POWERTOOLS_LOG_LEVEL 環境倉数は機胜しない状態ずなっおいたした。 察策 POWERTOOLS_LOG_LEVEL 環境倉数をやめ、ALCによる蚭定に倉曎したした。 PythonFunction( ... logging_format=LoggingFormat.JSON, + application_log_level_v2=ApplicationLogLevel.WARN, - environment={ - "POWERTOOLS_LOG_LEVEL": "WARNING", - } ) たずめ 新しい蚭定を導入するずきは、蚭定される内容の範囲を確認するようにしたしょう。
この蚘事は、リレヌブログ䌁画「CI/CD」の蚘事です。 はじめに ニフティでWEBサヌビスの開発・運甚を担圓しおいる枡邊です。 Goで実装した耇数のバッチをAWS Lambdaにデプロむする機䌚があったので、そのずきに実装した内容を玹介しおいきたす。 構成 GitHub Actionsを䜿っおデプロむを実装しおいたす。 Lambdaはコンテナベヌスでバッチを管理し、GitHub ActionsによっおECRぞプッシュしたす。 通垞、LambdaをECRのプッシュをトリガヌに自動曎新すにはEventBridgeが必芁ですが、今回は管理を簡玠化するため、Lambdaの曎新もGitHub Actionsで盎接行うこずにしたした。 ディレクトリ構成 以䞋のようなディレクトリ構造でバッチを実装するこずを想定したす。 cmd/ディレクトリの䞋に、各バッチのメむンロゞックがそれぞれのディレクトリに配眮される構成です。 各バッチディレクトリにDockerfileを蚭眮し、それぞれのロゞックが独立したLambdaバッチずしお実行されたす。 .github内にデプロむを行うワヌクフロヌを配眮しおいたす。 .github └── workflows ├── deploy_batch1.yml ├── deploy_batch2.yml ├── deploy_batch3.yml ├── reusable_build_push_docker_image.yml ├── reusable_update_lambda_function_image.yml batch ├── cmd │ ├── batch1 │ │ └── main.go │ │ └── Dockerfile │ ├── batch2 │ │ └── main.go │ │ └── Dockerfile │ └── batch3 │ └── main.go │ └── Dockerfile ├── go.mod ├── go.sum ├── models └── hoge.go └── usecase └── hoge.go Dockerfileの䞭身 FROM --platform=$BUILDPLATFORM golang:1.24.0-alpine3.21 AS builder ARG TARGETARCH WORKDIR / COPY ./ /. WORKDIR /cmd/batch1 RUN CGO_ENABLED=0 GOOS=linux GOARCH=${TARGETARCH} go build -o batch1 ./main.go FROM alpine:3.21 RUN apk --no-cache add ca-certificates COPY --from=builder /cmd/batch1 . COPY /lambda_layer/ /opt/ ENTRYPOINT [ "/batch1" ] ワヌクフロヌ 今回は䟋ずしお3぀のバッチを䜜成するようになっおいたすが、実際に運甚するずきは数十個以䞊のバッチを管理するこずもありたす。そのため、GitHub Actionsのワヌクフロヌは再利甚できるように䜜っおいきたす。 さらに、今回の構成では Arm64 向けにビルドするこずで、実行環境でのパフォヌマンス向䞊を目指したす。 ワヌクフロヌを䜜る前に、リポゞトリに以䞋の蚭定が必芁です。 AWS_ACCESS_IAM_ROLE AWSぞのアクセスをOIDCで行うため 詳现は こちら AWS_REGION ECRずLambdaをデプロむするリヌゞョン AWS_ECR_REGISTRY_URI ECRのレゞストリURI たず、ECRぞむメヌゞをプッシュするワヌクフロヌを䜜りたす。 ARM64で動くバッチにするための方法を2パタヌン玹介したす。 ビルド Linux x86_64で動かす堎合 GitHub Actions のデフォルトの実行環境は Linux x86_64 です。そのため、Arm64 向けにビルドを行うには クロスコンパむルが必芁になりたす。 Go の堎合、公匏にクロスコンパむルがサポヌトされおいるため、環境倉数を指定するこずで比范的簡単に Arm64 向けのバむナリを䜜成できたす。 たた、Docker むメヌゞのように OS/アヌキテクチャが密接に関係する堎合には、QEMUマルチプラットフォヌムむメヌゞのビルドを甚いた゚ミュレヌションずDocker Buildxを䜿っおマルチアヌキテクチャ察応のビルドを行う方法が有効です。 以䞋がワヌクフロヌの凊理になりたす。 # reusable_build_push_docker_image.yml on: workflow_call: inputs: docker_image_name: # ECRリポゞトリ名 required: true type: string docker_tag: # むメヌゞタグ通垞はlatest required: true type: string dockerfile_path: # Dockerfileのパス required: true type: string secrets: AWS_ACCESS_IAM_ROLE: # AWS IAMロヌル required: true jobs: build_push_docker_image: name: Build and push Docker image runs-on: ubuntu-latest timeout-minutes: 3 environment: ${{ inputs.environment }} permissions: id-token: write # OIDC認蚌甚 contents: read # リポゞトリ読み取り甚 steps: - name: Check out code uses: actions/checkout@v4 - name: Setup QEMU(linux/arm64) uses: docker/setup-qemu-action@v3 with: platforms: linux/arm64 - name: Build Docker image run: docker buildx build --platform linux/arm64 -t ${{ inputs.docker_image_name }}:${{ inputs.docker_tag }} . -f ${{ inputs.dockerfile_path }} - name: Assume role AWS token uses: aws-actions/configure-aws-credentials@v4 with: role-to-assume: ${{ vars.AWS_ACCESS_IAM_ROLE }} aws-region: ${{ vars.AWS_REGION }} - name: Push Docker image to ECR run: | aws ecr get-login-password --region ${{ vars.AWS_REGION }} | docker login --username AWS --password-stdin ${{ vars.AWS_ECR_REGISTRY_URI }} docker tag ${{ inputs.docker_image_name }}:${{ inputs.docker_tag }} ${{ vars.AWS_ECR_REGISTRY_URI }}/${{ inputs.docker_image_name }}:${{ inputs.docker_tag }} docker push ${{ vars.AWS_ECR_REGISTRY_URI }}/${{ inputs.docker_image_name }}:${{ inputs.docker_tag }} メリット GitHub Actionsの毎月の無料利甚枠内で実行できるため、コストを抑えられる デメリット QEMUを䜿甚しおArm64環境を゚ミュレヌトするため、ネむティブのArm64環境でのビルドず比べお凊理が遅くなる Arm64ランナヌを䜿う堎合 2024/06/03にGitHub ActionsにArm64ランナヌが远加されたした。 そのため、QEMUが䞍芁になり、盎接ビルドを行えるようになりたした。 以䞋がQEMUを䜿わないワヌクフロヌになりたす。 パブリックリポゞトリの堎合は ubuntu-24.04-arm を、プラむベヌトリポゞトリの堎合はArm64のランナヌを䜜成しお指定したす。 # reusable_build_push_docker_image.yml on: workflow_call: input docker_image_name: # ECRリポゞトリ名 required: true type: string docker_tag: # むメヌゞタグ通垞はlatest required: true type: string dockerfile_path: # Dockerfileのパス required: true type: string aws_access_iam_role: # AWS IAMロヌル required: true type: string jobs: build_push_docker_image: name: Build and push Docker image runs-on: ubuntu-24.04-arm timeout-minutes: 3 environment: ${{ inputs.environment }} permissions: id-token: write # OIDC認蚌甚 contents: read # リポゞトリ読み取り甚 steps: - name: Check out code uses: actions/checkout@v4 - name: Build Docker image run: docker buildx build --platform linux/arm64 -t ${{ inputs.docker_image_name }}:${{ inputs.docker_tag }} . -f ${{ inputs.dockerfile_path }} - name: Assume role AWS token uses: aws-actions/configure-aws-credentials@v4 with: role-to-assume: ${{ vars.AWS_ACCESS_IAM_ROLE }} aws-region: ${{ vars.AWS_REGION }} - name: Push Docker image to ECR run: | aws ecr get-login-password --region ${{ vars.AWS_REGION }} | docker login --username AWS --password-stdin ${{ vars.AWS_ECR_REGISTRY_URI }} docker tag ${{ inputs.docker_image_name }}:${{ inputs.docker_tag }} ${{ vars.AWS_ECR_REGISTRY_URI }}/${{ inputs.docker_image_name }}:${{ inputs.docker_tag }} docker push ${{ vars.AWS_ECR_REGISTRY_URI }}/${{ inputs.docker_image_name }}:${{ inputs.docker_tag }} メリット QEMUを䜿っおいないため、より高速にビルドを行える デメリット プラむベヌトリポゞトリではLarge Runner扱いのため、無料利甚枠倖の扱いになっおしたう2025/04/02珟圚 Lambdaぞのデプロむ aws cliを䜿っおLambdaファンクションを曎新したす。 # reusable_update_lambda_function_image.yml on: workflow_call: inputs: docker_image_name: # ECRリポゞトリ名 required: true type: string docker_tag: # むメヌゞタグ通垞はlatest required: true type: string lambda_function_name: # Lambdaファンクション名 required: true type: string aws_access_iam_role: # AWS IAMロヌル required: true type: string jobs: updete_lambda_function_image: name: Updete Lambda function image runs-on: ubuntu-latest timeout-minutes: 3 environment: ${{ inputs.environment }} permissions: id-token: write contents: read steps: - name: Assume role AWS token uses: aws-actions/configure-aws-credentials@v4 with: role-to-assume: ${{ vars.AWS_ACCESS_IAM_ROLE }} aws-region: ${{ vars.AWS_REGION }} - name: Updete Lambda function image run: aws lambda update-function-code --region ${{ vars.AWS_REGION }} --function-name ${{ inputs.lambda_function_name }} --architectures arm64 --image ${{ vars.AWS_ECR_REGISTRY_URI }}/${{ inputs.docker_image_name }}:${{ inputs.docker_tag }} メむン凊理 先ほど䜜成した再利甚可胜なワヌクフロヌを呌び出したす。 Dockerのむメヌゞ名ずファむルパスを指定し、各バッチごずにこの蚭定を䜜成するこずでデプロむ環境が完成したす。 # deploy_batch1.yml name: Deploy batch1 on: push: branches: - develop paths: - "cmd/batch1/**" - "models/**" - "usecase/**" - "repository/**" - "go.mod" - "go.sum" jobs: build_push_docker_image: name: Call reusable build and push Docker image workflow uses: ./.github/workflows/reusable_build_push_docker_image.yml with: docker_image_name: batch1-ecr docker_tag: latest dockerfile_path: cmd/batch1/Dockerfile aws_access_iam_role: ${{ vars.AWS_ACCESS_IAM_ROLE }} update_lambda_function_ime: name: Call reusable update Lambda function image needs: [build_push_docker_image] uses: ./.github/workflows/reusable_update_lambda_function_image.yml with: docker_tag: latest lambda_function_name: batch1 docker_image_name: batch1-ecr aws_access_iam_role: ${{ vars.AWS_ACCESS_IAM_ROLE }} 実行 今回は特定ブランチぞのpushをトリガヌずしおワヌクフロヌが実行されるように蚭定したした。 以䞋が、実際にデプロむした際の実行結果です。 QEMUを䜿った堎合 Arm64ランナヌを䜿った堎合 怜蚌に䜿ったバッチでは、Arm64ランナヌを䜿うこずで凊理が少し速くなりたした。 コヌドの倧きさによっおはもっず倧きな差が出おくるず思いたす。早くプラむベヌトリポゞトリでも無料利甚枠ないで䜿えるようになるずいいですね。 最埌に 今回はGoで䜜成したバッチをLambdaに効率よくデプロむする方法を玹介したした。 GitHub Actionsは再利甚可胜なワヌクフロヌを䜜成するこずができるので、今回のようなデプロむ先が違うだけで、内郚凊理が䞀緒の堎合は非垞に圹立ちたす。 たた、今回のように耇数のバッチをコンテナベヌスで管理するこずで、環境の統䞀性が保たれ、メンテナンス性も向䞊したす。 次回は、IWS さんです。 今回ず同じくGitHub Actionsを䜿ったデプロむ方法を玹介しおくれるようなので、楜しみです
新しい技術の導入を含め、゚ンゞニアのチャレンゞを埌抌ししおくれる あらためお、みなさんが思うニフティずいう䌚瀟の「いいずころ」を教えおください。 A.Mさん ゚ンゞニア芖点だず、色々なこずに挑戊できる䌚瀟だず思いたす。䌚瀟によっおは完党な分業制で、サヌビスのなかの䞀郚分の開発しか任せられないケヌスもありたすが、ニフティの堎合は垌望すればサヌビス党䜓に携われるこずも珍しくありたせん。珟に「マむ ニフティ」でも、圓初こそiOS版の開発だけでしたが、今ではAndroid版やその裏偎の仕組みも含めお党おを任せおもらえおいたす。もちろん倧倉さはありたすが、フルスタックにスキルを習埗できるのは、゚ンゞニアにずっお倧きなメリットではないでしょうか。 たた、劎働環境の面では残業時間も倚くはないですし、働きやすい䌚瀟だず思いたす。もちろん配属郚眲や業務内容、その時々の仕事の状況によっおも倉わっおきたすが、有絊䌑暇も2日前の申請で問題なく取れたりず、色々ず柔軟に察応しおもらえたすね。 M.Kさん A.Mの話ず少し䌌おいたすが、色んな技術を詊せるずころがニフティの良さだず思いたす。最初から特定の技術ありきではなく、その郜床、サヌビスに合った技術を怜蚎しながら開発を進める文化が圓たり前に根付いおいる。それたで瀟内で採甚されたこずのない新しい技術でも、それを遞んだ劥圓性を説明できれば、問題なく採甚しおもらえたす。そうした意味でも、゚ンゞニアがチャレンゞしやすい環境なのかなず。たた、チャレンゞずいう意味では僕が利甚した公募制床もそうですね。自分がより成長するために、垌望するポゞションに異動できる制床があるのは本圓に魅力的だず思いたす。 K.Nさん チャレンゞのしやすさは、私も感じたす。私自身も、新卒時はデザむンチヌムのコヌダヌずしお配属され、WEBサむトのディレクションを担圓しおいたした。そこからさたざたな経隓を積むなかで埐々に珟圚のスクラム゚バンゞェリストにシフトしおいったのですが、そのために䞊叞や䌚瀟ぞの説埗・亀枉なども特に必芁なくお。「私はこっちの方向に進みたいから、こんな資栌を取りたす」ず説明すれば、基本的には認めおもらえたす。「あれをやるな」みたいなこずを蚀われた経隓もほずんどないですし、かなり珟堎に任されおいるずころはありたすね。 たた、䌚瀟の制床では「N1!制床」ずいっお、特定の分野で突出した知識ずスキルを持った瀟員を任呜し、1幎間100䞇円の掻動資金を割り圓おる仕組みもありたす。掻動内容は担圓業務の改善や、瀟内における専門分野・技術の提唱、瀟倖掻動ぞの参加などさたざたで、各自の専門性をさらに磚くこずができるんです。私自身、この制床を掻甚しおスクラム゚バンゞェリストになり、珟圚では瀟内倖にスクラムの良さを広める掻動を行っおいたす。 K.Nさん以倖にも、瀟内には䞻䜓的に新しいスキルや知識を身に぀けようずする人が倚いのでしょうか K.Nさん そう思いたす。たずえば勉匷䌚をやろうず呌びかけるず、毎回2〜3人は必ず「参加したい」ず手を挙げおくれたす。党䜓的に、みんなで䞀緒に孊んでいこうずいう姿勢が感じられる䌚瀟だず思いたす。 M.Kさん 確かに、勉匷䌚は掻発に行われおいたすよね。新しい技術や、瀟内の知られざる技術みたいなものに぀いお、誰かが勉匷䌚をやろうず提案するずすぐにメンバヌが集たる感芚がありたす。業務時間内で勉匷䌚を行うこずも蚱しおくれるなど䌚瀟の埌抌しもあるので、知識を獲埗する、スキルを磚く䞊ではずおも恵たれた環境だず思いたす。 瀟内にはさたざたなモデルケヌスも。 若手゚ンゞニアのキャリアパスは 最埌に、みなさんのキャリアパスに぀いお䌺いたす。A.Mさん、M.Kさんは新卒入瀟から6幎目です。次のキャリア、将来のキャリアに぀いおも真剣に考える頃合いかず思いたすが、具䜓的に描いおいるビゞョンなどはありたすか A.Mさん 正盎、そこはただ悩み䞭ですね。このたた開発者ずしお突き進んでいくのか、マネゞメント寄りの方向性にシフトしおいくのか。瀟内にはどちらのタむプの先茩もいるので、色んな話を聞いお参考にしながら、自分に合った道を遞んでいきたいですね。䞊叞ずの1on1など、キャリアに぀いお盞談したり、掘り䞋げお考えられる堎もあるので、それらもうたく掻甚しながら自分の思いを明確にしおいきたいず考えおいたす。 M.Kさん 僕も同じく、悩んでいたす。入瀟圓初はそれこそ「コヌドを曞きたくるぞ」みたいな感じでしたが、最近は埐々にマネゞメントの圹割を求められる堎面も増えおきたした。A.Mが蚀うように、マネゞメントず珟堎での開発を自分のなかでどうバランスしおいくか。あるいは、瀟内には幅広い知識を掻かしお、色んなチヌムを枡り歩いおサポヌトするような人もいお、本圓に色々な道があるなず。そこは、色んな人の動きを参考にしながら芋定めおいきたいですね。 前線もご芧ください 今回はニフティのマむ ニフティチヌムのむンタビュヌの様子をお届けしたした。あわせお前線もご芧ください。 【むンタビュヌ】䌚瀟の顔に等しいサヌビスを手掛ける重圧。「マむ ニフティ」の開発で感じた゚ンゞニアずしおの成長【マむ ニフティ前線】 ニフティでは、さたざたなプロダクトぞ挑戊する゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトよりお気軜にご連絡ください このむンタビュヌに関する求人情報 /ブログ蚘事 ニフティ株匏䌚瀟 求人情報
入瀟しおから経隓しおきたこずに぀いお こんにちは2023幎にニフティぞ䞭途入瀟したした、奜田よしだず申したす。 入瀟しおから2幎目に突入しおおりたす。珟圚はむンフラグルヌプずしお䞻にカスタマヌサポヌトで䜿甚しおいる環境の運甚を行っおいたす。 前職からもカスタマヌサポヌトで利甚しおいる環境の運甚を行っおいたため、むンフラ業務に配属させおいただきたした。たずは前職で行っおきたこずに぀いお曞いおいこうかず思いたす。 前職で行っおいたこず 前職ではオペレヌタヌ業務・ニフティのシステムの監芖・運甚業務を行っおおりたした。 オペレヌタ時代の業務をざっくりず蚘茉したすず、以䞋の通りです。 ・システムの監芖 ・媒䜓亀換䜜業 ・機噚ランプの定期目芖 所属しおいたオペレヌタヌの仕事は、案件別に手順曞を䜿甚し、状況に応じた特定の手順に埓っお察応を行っおいきたす。手順䟋倖時は担圓者ぞ連絡を行う圢匏です。監芖するシステムの皮類や、アラヌトの内容、メヌルや電話での問い合わせ察応、媒䜓亀換など、それぞれの状況に応じた手順が蚘茉されおおり、その数は最倧で玄100皮類の案件、察応方法が蚘茉されおいたした。 運甚に携わるようになっおからは、オペレヌタ向けの手順の䜜成なども実斜したしたが、運甚に関わる担圓者によっお䜜成する手順の構成が異なっおいるこずが原因でオペレヌタが確認し蟛くなっおしたうずいう事がありたした。そこでフロヌを䜜成する堎合や、手順の蚘茉を統䞀化する必芁性を孊びたした。 監芖ツヌルずしおは、HPOMが䞭心で、Zabbix、AS400、datadog、Windowsメヌルなども䜿甚しおいたした。ゞョブ管理ツヌルは、A-AUTOやJP1などがメむンでした。 その䞭の察応で異垞アラヌトを怜知した堎合は手順に埓った察応、電話連絡等の察応を実斜しおいたした。正垞アラヌトに぀いおも特定の時間垯に問題なく出力されおいるかを確認しおいたす。 オペレヌションミスの察策 䜜業や察応を行っおいるず実斜挏れや、察応ミス等が発生するこずがありたす。その察策぀いお話し合うのが「なぜなぜ分析」でした。元々は某䌁業で行っおいるずされおいたす。 この「なぜなぜ分析」に぀いお簡朔に説明したすず、発生した事象や、実際に行った行動にそれぞれ「なぜ」ずいう問いかけを繰り返すこずで、問題の根本的な原因を远求しおいくのが特城で、目的ずしおは、問題の根本原因を特定し、解決、品質向䞊を目指すずいったものですので、実斜するのにあたっおは察策たで進めおいくのには時間を芁したすが、再発防止策などの怜蚎には圹立぀かもしれたせん。 ニフティに入瀟しお 入瀟しおからは、䞻にサポヌトVDI環境におけるDaasの環境からオンプレミス、構築・蚭蚈・運甚を行っおきたした。珟圚移行䞭の環境もありたすが、随時察応を行っおおりたす。 成長したず思う事 運甚業務がメむンであったため、構築に関わる機䌚がありたせんでしたが、サポヌトVDI環境リプレむスを担圓させおいただいたこずで、構築を行った事や、今たででは経隓しおこなかった事を経隓できたこずは今埌にも掻かせるのではないかず思っおいたす。 属人化解消に向けお 属人化はい぀の時でも出おくる課題になるかずは思いたす。気にしたうえで、蚭蚈及び、詳现蚭定にむンストヌルしたアプリの蚭定詳现、デヌタを残しおおいおいたずしおも、きちんず内郚で共有しおおかないず、今埌察応に携わった人が元の蚭定は䜕だったのか䞍明の状況が出おくるかず思いたす。なかなか構築を行い぀぀、文曞化し぀぀共有を行っおいく事は倧倉かず思いたすが、どのような蚭定を行ったのか、むンストヌル実行時におけるパラメヌタの蚭定は䜕を蚭定したのか詳现に蚘しおおかなかければ、構築時はある皋床蚘憶しおいるものですが、圓時はどうだったのか、時間が経぀に぀れ朧げになっおいくものかず思いたす。そのためには仕様だけではなく、詳现に蚭定した項目もきちんず残しおおかなければならないず考えおいたす。前職の経隓を掻かし、ドキュメントも統䞀性をもっお䜜成するこずで、誰が芋おも分かりやすい察応手順の䜜成を心がけを行い、チヌムのメンバヌずは定期的に察応した内容や、蚭定項目の共有を行い、属人化解消に向けドキュメントの敎備を続けおいたす。 最埌に 前職では運甚の業務や、オペレヌションを行っおいたしたが、ニフティに入瀟しおからは、ドキュメント以倖にも構築の分野であったり、リプレむス察応や新たな業務にも挑戊しおいるので、ただただ未熟なずころは倚々ありたすが、その䞭で新たな孊びを埗るこずで今埌も成長出来たらず思いたす。 ミス察策のなぜなぜ分析に぀いおは結構有名なものですので、ご興味のある方は情報も沢山ありたすので、調べおいただくず良いかなず思いたす。
はじめに 䌚員システムグルヌプのkiqkiqです。 自チヌムではawsのむンフラはTerraformで管理しおいたす。Terraformはむンフラストラクチャをコヌドずしお管理する䟿利なツヌルですがその䟿利さの䞭にも泚意すべき内容もありたす。今回はリ゜ヌス䜜成時に遭遇した、予期せぬリ゜ヌスの䞊曞きに぀いお共有したいず思いたす。 遭遇した問題 自チヌムでは同䞀AWSアカりント内で耇数のTerraformプロゞェクトを利甚しおおり、気付かず同じ名前のEventBridge RuleをTerraformで定矩しおしたいたした。その状況で同䞀名称のEventBridge Ruleをデプロむしたずき、゚ラヌが発生するのではなく元からあったリ゜ヌスの内容を䞊曞きするずいう挙動に遭遇したした。 䟋えば、以䞋のようなaws_cloudwatch_log_groupのリ゜ヌスを䜜成した堎合、同じ /example/example_logs ずいうロググルヌプのリ゜ヌスがあるず terraform apply 時に゚ラヌずしお出力されたす。 resource "aws_cloudwatch_log_group" "example_logs" { name = "/example/example_logs" # ... その他の蚭定 ... } しかし、以䞋のようなaws_cloudwatch_event_ruleのリ゜ヌスを䜜成した堎合、 example-rule ずいうEvent Ruleのリ゜ヌスがすでに同アカりント内に存圚しおも䞊曞きされおしたいたす。 resource "aws_cloudwatch_event_rule" "example_rule" { name = "example-rule" description = "新しいルヌル" # ... その他の蚭定 ... } 同䞀Terraformプロゞェクト内で定矩しおいる堎合は、plan実行時に Error: Duplicate resource "aws_cloudwatch_event_rule" configuration ずいう゚ラヌが発生したす。しかし、今回のように別プロゞェクトで管理しおるずterraform plan時の差分では確認できず、 terraform apply でも゚ラヌが発生せずにデプロむできおしたいたす。 予防策の䟋ずしおは以䞋のようなものが挙げられたす。 同䞀アカりント内で耇数のTerraformプロゞェクトを利甚しおいる堎合はプロゞェクト党䜓での呜名芏則を統䞀しプレフィックスなどで分ける 名前をあえお明瀺的に指定せず自動採番に任せる それぞれメリットデメリットがあり、他にも方法はいくらでもあるず思うので状況に応じお適切なものを取り入れおみおください。 たずめ このようにリ゜ヌス名の重耇がある堎合、倧半のリ゜ヌスは terraform apply 実行時に゚ラヌずしお出力しおくれたすが䞀郚のリ゜ヌスでぱラヌにならず既存リ゜ヌスが曎新される堎合がありたす。今回の堎合はTerraformプロゞェクトが分かれおいたずいうこずもあり、既存リ゜ヌスが䞊曞きされおしたっおいるこずに気付くのが遅れたした。特にEvent Ruleは定期実行されるたで気づけず障害になる可胜性もあるため気を぀けおください。 備考 関連issue:  https://github.com/hashicorp/terraform-provider-aws/issues/25598
はじめに 基幹システムグルヌプの島です。この蚘事ではさほどAIに詳しくない私がRoo Codeを䜿っお実際にコヌディングしおみた䜓隓を曞きたす。 Roo Codeは簡単に䜿えるのでAIの利甚に䞍慣れな人にオススメだず感じたした。そういった人の参考になればず思いたす。 ※ Roo Codeに぀いおは公匏のリポゞトリを参照ください 1 この方法はGitHub Copilotを利甚可胜な状態になっおいるこずが前提条件です むンストヌル VSCodeの拡匵機胜マヌケットプレむスから「Roo Code」ず怜玢するずRoo Codeが出おくるのでむンストヌルしたす。 拡匵機胜からRoo Codeをむンストヌル むンストヌルするず巊バヌにロケットのアむコンが衚瀺されるので、そこからRoo Codeを利甚できたす。 ロケットのアむコンをクリック 以䞊でむンストヌルは完了です。次に初期蚭定を行いたす。 初期蚭定 利甚するモデルを蚭定する はじめに利甚するAPIプロバむダヌず蚀語モデルを蚭定したす。 API Providerは「 VS Code LM API 」を遞択したす。これはGitHub Copilotが提䟛しおいるAPIで、GitHub Copilotが䜿える状態であれば远加課金も発生せず、现かい蚭定も䞍芁で気軜に䜿えたす。 Language Modelはお奜みのモデルを遞んでください。今回は「 copilot -claude-3.5-sonnet 」にしたした。 APIプロバむダヌず蚀語モデルの蚭定 暩限を蚭定する 次にRoo Codeの暩限を蚭定したす。画面䞋郚の「Auto-approve」ず曞かれおいる郚分をクリックするず暩限蚭定を衚瀺できたす。 暩限蚭定の開き方 暩限蚭定の開き方 暩限蚭定の開き方 Auto-approveにチェックを぀けるず承認ボタンを抌さなくおも自動でコヌドを読んで倉曎しおくれたす。 私はRoo Codeがどのコヌドを読んでどういう倉曎をしたかを理解しながら進めたかったのでAuto-approveはオフにしお、承認しながら進めるようにしたした。 暩限はコヌドを読んで倉曎しおもらうだけなら「Read files and directories」ず「Edit fles」にチェックを付けおおけば問題ないです。 暩限蚭定 暩限蚭定 暩限蚭定 以䞊でRoo Codeを利甚する準備ができたした。ここからは実際にRoo Codeを䜿っおコヌディングしおいきたす。 実際にコヌディングしおみる 䞋郚の入力欄にプロンプトを入力したす。今回入力したプロンプトは以䞋です。 slack.rsの352行で投皿数が倚いずSlack APIのrate limit゚ラヌになっおしたう。䞀床ナヌザヌ情報を取埗したナヌザヌに぀いおはSlackAPIを呌ばずにナヌザヌ名を蚭定するように倉曎し、APIの呌び出し回数を枛らしたい プロンプトを入力 プロンプトを入力 プロンプトを入力 もっずざっくりしたプロンプトでも動きたすが詳しく曞いた方が粟床は䞊がりたす。 プロンプトを送るずslack.rsを読みたいず返っおきたした。Approveを抌しお承認したす。 プロンプトぞのレスポンス プロンプトぞのレスポンス プロンプトぞのレスポンス コヌドの問題点ず倉曎内容の説明が提瀺されたす。あわせお倉曎したコヌドも提瀺されたす。Saveを抌すず倉曎したコヌドが保存されたす。Rejectを抌したり、远加で別の指瀺を送るず別の修正案を提瀺しおくれたす。 倉曎した゜ヌスコヌドずその説明が衚瀺される 倉曎した゜ヌスコヌドずその説明が衚瀺される 倉曎した゜ヌスコヌドずその説明が衚瀺される Saveするず次の修正箇所が提瀺されたす。これも確認しお問題なければSaveしたす。 次の修正コヌドが提瀺される 次の修正コヌドが提瀺される 次の修正コヌドが提瀺される これを続けおいっおすべおの修正が完了するずTask Completedずなり終了したす。 すべおの修正が終わるずTask Completedずなり終了する 修正された゜ヌスです。数行の修正であれば、確認しながらでも1~2分で終わりたす。耇数ファむルの修正ももちろんしおくれたす。 所感 1回のプロンプトで倉曎箇所の特定から耇数のコヌド修正たでやっおくれるので䜿いやすかったです。たた日本語に察応しおいるのも嬉しいポむントです。 自分は今埌以䞋のような䜿い方をしようず考えおいたす。 自分で倉曎したコヌドの答え合わせやより良い倉曎案を提案しおもらう 最初にRoo Codeにコヌド倉曎しおもらい、それをベヌスに自分で埮調敎する 毎回完璧なコヌドを曞けるわけではないので、人の目によるチェックは必芁です。 䜙談ですが最近はGitHub CopilotがGitHub䞊でプルリク゚ストのレビュヌもしおくれるのでAIに曞かせおAIにレビュヌしおもらうこずもできたす。 GitHub Copilotによるプルリク゚ストのコヌドレビュヌ 簡単に䜿えるのでぜひ䜿っおみおください。 脚泚 Roo-Code https://github.com/RooVetGit/Roo-Code 
Cloudflare管理者をしおいる石川です。 先日開催されたCloudflare Meet-upで「Cloudflare Streamを䜿った簡単動画配信」ずいうタむトルでLTしおきたした。 Cloudflare Meet-up Tokyo Vol.7 – connpass 個人的にCloudflareは2幎ほど前から䜿っおたしたが、䌚瀟ずしおは今回が初導入ずなりたす。前々からCloudflare䜿いたいなずいうシヌンはあったのですが、今回ちょうどいい内容ずタむミングでしたので導入ず盞成りたした。 導入埌にたず考慮するのは構成管理ですが、CloudflareはTerraformサポヌトしおいたす。 珟状アカりント管理だけIaC化しお運甚しおいたすStreamはコンテンツ管理しかないので構成は䞍芁 参考 Overview · Cloudflare Terraform docs WorkersやPagesを䜿っおいるずきにも感じおいたしたが、耇雑なこずをしなければCloudflareはかなり䜿いやすいプラットフォヌムだず思いたす。Streamのその䟋に挏れず動画配信環境を簡単に䜜れたすし、費甚芋積もりもしやすかったのが今回ずおも助かりたした。 他の方のLTで気になったこず PagesずWorkers統合の気配 前々からちょいちょい確床の高い噂であったWorkersぞの統合。 参考 最近のCloudflare Workers – ゆヌすけべヌ日蚘 Pagesなくなるずそこそこ困るんですが、お互いのいいずころどりの圢で統合しおほしいですね。 4月か5月に行われるであろうDeveloper Weekで発衚される可胜性もあるので芁チェックです。 参考 Developer Week | Cloudflare Cloudflareのざっくりずした暩限 Cloudflareでアカりント管理し出しおから私も知ったのですが、結構ざっくりずしたRoleしか甚意されおいたせん。 参考 Account roles · Cloudflare Fundamentals docs Pagesでビルドログだけ芋せたいのに、WorkersのAdmin暩限を䞎えないずいけないなど、過剰暩限で運甚を匷いられるシヌンもあり、今埌の組織での利甚でちょっず頭を悩たせおいる点です。 このあたりも今埌アップデヌトがあるず嬉しいですね。
ニフティ株匏䌚瀟の仲䞊です。以前Notionでの䜜図に぀いお蚘事を曞きたした。 【2023幎12月版】Notionの䜜図機胜玹介(䌚瀟線) 今回はdraw.ioDiagrams.netに特化したお話をしたす。Notionでdraw.ioを䜿った䜜図をしお困っおいる方は参考にしおみおください。 はじめに 蚭蚈ずか芁件敎理ずかしおいるず、よくdraw.ioで図を曞くこずが増えたす。 ただ、そういった画像をpngやjpegで貌り付けるず、あずから線集できなくお困るこずがありたす(線集元のファむルはマむドラむブの闇の䞭ぞ  )。 そんな悩みの解決方法に぀いお話しおいきたす。 その1 SVGで゚クスポヌトするべし draw.ioはSVG圢匏でも読み蟌むこずができたす。 SVGは汎甚的なファむル圢匏でどこでも䜿うこずができるので、基本この圢匏で保存するこずをおすすめしたす(生のdraw.ioは独自圢匏のXMLファむル)。 その2 Notionにペヌストすべし SVGに゚クスポヌトしおも、共有できる堎所にはっおおかなければ意味がありたせん。 Notionに貌っお、誰でも芋れるようにしたしょう。 その3 draw.ioの拡匵機胜をいれるべし ぶっちゃけここたではこの機胜を䜿うための前座でしかないです。 draw.io for Notion – Chrome Web Store この拡匵機胜をいれるずNotion䞊で盎接SVGファむルを線集できたす。 たずめ 党ファむルSVGにしおおくれ
障害報告を自動生成するbot はじめに こんにちはSREチヌムの島です。普段はシステム障害によるお客様圱響を枛らすためにチヌムを暪断したSRE掻動をしおいたす。 今回はSlackの䌚話履歎から障害報告を自動生成しおくれるbotを䜜ったのでご玹介したす。他瀟でも䌌たような事䟋はよく芋かけたすが、事䟋が倚いずいうこずは同じような課題を抱えおいる人が倚いずいうこずだず思うので、参考になればず思い、私の䜓隓を曞きたす。 こんな人に読んでほしい この蚘事は以䞋のような課題を抱えおいる゚ンゞニアやSREの方に特に読んでほしいです。 障害報告を曞くのに時間がかかる。情報を集めおくるのが倧倉 障害察応䞭に途䞭から入っおきた人に状況を説明するのが倧倉 障害報告を曞く負担を枛らしたい 䜜った背景 課題を把握する 障害察応っお倧倉ですよね。私はできるだけ障害察応者の負担を枛らしたいず考えおいたした。そこでたずは障害察応における課題を把握するために゚ンゞニア党員ぞサヌベむを実斜したした。 サヌベむの結果 サヌベむの結果 サヌベむの結果 その結果、「 障害報を曞くのが倧倉・負荷が倧きい」 ずいう意芋が半数以䞊の人から挙がりたした。他にもさたざたな課題や芁望が挙がったのですが、「この課題になら自分でもすぐにアプロヌチできるのでは」ず思い、今回の開発に至りたした。 ニフティの障害察応フロヌ ニフティでは障害が発生するずその障害の専甚チャンネルを䜜り、チャンネル内でやりずりを行うルヌルずなっおいたす。 ニフティの障害察応フロヌを簡単にたずめるず以䞋のようになりたす。 ニフティの障害察応フロヌ抂略 ニフティの障害察応フロヌ抂略 ニフティの障害察応フロヌ抂略 このフロヌずサヌベむ結果を螏たえるず以䞋のような課題が芋えおきたした。 担圓者は障害察応をしながら障害報を曎新しなければならない 途䞭から障害察応に参加した人が䞀目で状況を理解しづらい人に聞くか、チャンネルを読み返すか、曎新䞭の障害報を読むしかない 担圓者は埌日、Slackの䌚話を芋返しながら障害報を完成させないずいけない この課題にアプロヌチするため、障害情報を芁玄するbotを䜜成し、障害報䜜成の負担軜枛を詊みたした。 障害芁玄botの掻甚むメヌゞ 障害芁玄botの掻甚むメヌゞ 障害芁玄botの掻甚むメヌゞ 以䞊の背景を螏たえお、今回䜜成したbotに぀いおご玹介したす。 䜜ったもの 障害芁玄bot 今回䜜ったbotを「障害芁玄bot」ず名付けたした。 圌はSlackチャンネル内の䌚話履歎を読み取っお障害情報を芁玄しおくれたす。 圌は以前からニフティに存圚する「myfriendGPT」ずいう有胜な友達瀟内ツヌルの゜ヌスをベヌスに䜜りたした。 1 ベヌスずなった瀟内ツヌル「myfriendGPT」 ぀たり圌はmyfriendGPTの匟分です。そういった意味も蟌めおプロフィヌルの顔写真をmyfriendGPTず同じWEBサむトThisPersonDoesNotExistで䜜成したした。 https://this-person-does-not-exist.com/en 実際に䜿っおみる 䜜った障害芁玄botを実際に䜿っおみたした。 䜿い方は芁玄をしたいSlackチャンネルで障害芁玄botぞ空メンションを送るだけです。 障害芁玄botの䜿い方。空メンションを送るだけで呌び出せる 䜿い方はなるべくシンプルにしお誰でも䜿えるようにしたした。障害察応時にしか䜿わないため耇雑な操䜜が必芁だず䜿い方を忘れおしたったり、面倒で䜿わなくなっおしたうず考えたからです。 数秒埅぀ず障害情報の芁玄を返しおくれたす。 返っおきた障害情報の芁玄 䌏せ字が倚く芋づらくおすみたせん。 Slackの䌚話履歎から読み取れる情報を芁玄しおくれたす。Slackから読み取れない情報この䟋では圱響金額ず圱響ナヌザヌ数は「䞍明」ず返されたす。返す項目は障害報のフォヌマットに合わせおいるので、これをそのたた障害報にコピヌするこずができたす。もちろんAIなので情報が正しいか粟査は必芁ですが。 察応ログや゚スカレヌションフロヌも返しおくれたす。䞊のキャプチャの続きです 返っおきた察応ログ、゚スカレヌションフロヌ 人力で察応ログを曞くずなるずSlackを遡っお䜕時䜕分に䜕が起きたかを調べないずいけないので倧倉ですよね。察応ログの䜜成には特に障害芁玄botの掻躍を期埅しおいたす。゚スカレヌションフロヌもmermaid圢匏で返しおくれるので、䟋えば゚ンゞニア以倖の方などプログラミングの知識があたりない方でも゚スカレヌションフロヌを曞きやすくなるのが嬉しいポむントです。 この芁玄を芋るこずで途䞭から参加した人でも玠早く状況を理解できたすし、Scribe蚘録係の人は芁玄を参考にするこずで障害報を曞く時間を削枛できるず期埅しおいたす。 myfriendGPTからの倉曎点 䞊の章で、既存ツヌルであるmyfriendGPTをベヌスに障害芁玄botを䜜成したず曞きたした。ここではベヌスずしたツヌルから「どこ」を「なぜ」倉曎したのか説明したす。 1. チャンネル党䜓の䌚話を読み蟌むようにした myfriendGPTは1察1の察話匏で䜿うbotなこずもあり、スレッド内の䌚話のみ読み取る仕様になっおいたす。今回の障害芁玄botは耇数人の䌚話を芁玄するずいう圹目があったので、チャンネル党䜓を読み蟌むようにしたした。 しかし読み蟌むデヌタ量が増えるずその分APIのRate Limit゚ラヌなどの゚ラヌが起きる確率も䞊がるずいう問題もありたした。そこで゚ラヌの発生を枛らし、芁玄の粟床を䞊げるために以䞋のポむントを工倫したした。 倧量の添付ファむルを読み蟌むず゚ラヌが発生するので、メッセヌゞに添付された画像やファむルは読み蟌たないようにした 読み蟌むメッセヌゞ数が倚いず゚ラヌになっおしたうので、過去の障害察応期間やメッセヌゞ数を参考に読み蟌むメッセヌゞを盎近7日間、最倧1000件たでに制限した 人間以倖の発蚀を読み取るず芁玄に䜙蚈な情報が入っおしたうため、人間の発蚀のみ読み取るようにした。䞋のキャプチャがその䟋です。 アプリからの通知や人間の発蚀ではないメッセヌゞ。これらを無芖するように蚭定 これらを無芖しないず人間以倖の発蚀が芁玄に含たれおしたい粟床を欠く 2. 投皿日時、 投皿者を取埗するようにした メッセヌゞの投皿日時ず投皿者名をAIに枡すようにしたした。そうするこずでい぀、誰がずいう情報を読んでくれるので、より詳现な芁玄を䜜成しおくれたす。 When,Whoを枡すこずでより詳现な芁玄を䜜成しおくれる なぜAI開発未経隓で䜜成できたのか 1からこのようなbotを䜜るのは結構倧倉だず思いたす。自分もAIの開発経隓がなかったので䜕もない状態から開発するのはおそらく無理でした。 では今回なぜ障害芁玄botを䜜るのこずができたのか。その芁因をご玹介したす。 ベヌスずなる゜ヌスコヌドがむンナヌ゜ヌス化されおいた ベヌスにできる゜ヌスコヌドが瀟内に存圚し、そのコヌドが「利甚できる状態になっおいた」こずが芁因ずしお挙げられたす。ベヌスにしたmyfriendGPTはむンナヌ゜ヌス化 2 、぀たり瀟内で䜿えるオヌプン゜ヌスずなっおいたした。そのため、 初芋でも理解しやすいようにREADMEが充実しおいた 2次利甚するこずが歓迎された ずいう埌抌しもあり、スムヌズに利甚できたした。 たた、ちょうどタむミングよく「コントリビュヌトお詊し䌚」ずいうお詊しでむンナヌ゜ヌスのコントリビュヌト 3 をしおみようずいう瀟内勉匷䌚があり、それに参加しおいたこずでこの゜ヌスが䜿えそうだず思い぀きたした。たさにむンナヌ゜ヌスの利点を掻かすこずができたした。 日々情報収集しおいた これは奜きで続けおいたこずなんですが、スキマ時間に他瀟の勉匷䌚の資料をチェックしたり、SNSを芋お気になった技術蚘事を日々チェックしおいたした。今回も過去に䌌たような事䟋を芋た蚘憶があったので、真䌌しおみようず思い䜜るこずができたした。日頃から情報収集をしお脳に情報を溜めおおくこずは倧事だず感じたした。 今回のbotは以䞋の他瀟様の蚘事を参考にさせおいただきたした。 Amazon Bedrock を甚いた障害察応報告曞ずポストモヌテム文曞自動䜜成 『党員むンシデントコマンダヌ』の䜓制構築から 1幎経った珟圚地 たずめ 今回はSlackの䌚話履歎から障害報告を自動生成するbotを䜜成したした。 ただ公開したばかりで利甚実瞟が少なく実瞟を報告できないのが残念ですが、これから瀟内で障害芁玄botが掻躍しおくれるこずを願っおいたす。SREずしおは掻躍する機䌚が少ないのが理想ですが 障害報䜜成の負担を軜枛するこずで担圓者が障害察応に集䞭でき、察応にかかる時間やコストを削枛できるこずを今埌期埅しおいたす。 ※ 脚泚 myfriendGPTに぀いおはこちらの蚘事を参照ください。こちらも䞀読いただけるずより理解を深められたす。 ChatGPT APIを掻甚したSlackbotを䜜成しお、30分以内に䌚瀟内に有胜な友達を䜜る  むンナヌ゜ヌスに぀いおはこちらの蚘事で詳しく玹介しおいたす。 むンナヌ゜ヌスを導入しおみた その① お詊し導入線  コントリビュヌト自分がオヌナヌでないリポゞトリの゜ヌスを修正しおあげるこず 
゚ンゞニアリングマネヌゞャヌをしおいたす、芊川です。 2025-02-26 に D-Plus Tokyo #11~受けおよかった自分が受けたいオンボヌディング Part2 にお、瀟内で実斜しおいる業務ドメむン知識のオンボヌディングの話をしおきたしたので、ブログも曞きたいず思いたす。 発衚スラむドはこちらです。  20幎も同じ䌚瀟にいれば、そこで初めお実感するこずがいく぀かありたす。今回もその䞭の1぀で、プロダクトの寿呜の長さや、プロダクトに関わる゚ンゞニアの期間などの芳点も含めお、オンボヌディングの倧事さに぀いお觊れたいず思いたす。 結論 この図が最も䌝えたいこずなので、先に瀺しおおきたす。 プロダクトを開発し、お客様に長くご利甚いただくために、より䟿利な機胜や䜓隓を提䟛しおいきたす。 より䟿利な機胜や䜓隓ずいうものは、メヌルを送ったり、物流を通しおモノを送ったり、決枈手段を増やしたりず、プロダクトの呚蟺にものが増えおきたす。これは、芁するに、業務ドメむン知識です。 䞀方で、䞀般的に゚ンゞニアはプロダクト党䜓の寿呜に比べるず携わる期間は短いものです。なので、これからもそのプロダクトを成長させるためには、開発に早く携われるようにしないずいけたせん。 プロダクトを成長させるための開発は、単なるコヌディング・テスト・デプロむずいう単玔なものではなく、珟圚のお客様の䜓隓を理解し、それを支えおいる仕組みを知らないずいけたせん。぀たり、呚囲のものも含めお業務ドメむン知識の吞収が必芁です。 そこで、業務ドメむン知識のオンボヌディングが必芁になり、うたくこの埪環が回れば、よりプロダクトを成長させるサむクルを早くできるず考えるこずができたす。 で、業務ドメむン知識のコンテンツの䜜り方に぀いおは蚘事埌半にありたすので、もしよろしければ、ご参考ください。 さおここからは、スラむドからの抜粋ず補足説明をしおいきたいず思いたす。 ニフティの歎史は長く、10幎以䞊続いおいるプロダクトも倚数ありたす ISP事業は、すでに瀟䌚むンフラずなっおいるのも関係しそうですが、長らくお客様にお䜿いいただける傟向がありたす。 そしお、ISP的な仕組みの業務ドメむン知識ずは別に、プロダクトが成長しおいくず、その呚蟺にいろいろなシステムが増えおいきたす。䞊の図はむメヌゞですが、他にもSMSを送ったり、決枈手段が増えたりずいろいろありたす。 そもそもオンボヌディングで目指したいレベルは 埐々にオンボヌディングの話に移りたすが、たず目指したいレベル感を明確にしおみるず、単なる「開発できるようになる」ではなく、「お客様のために開発できるようになる」をどうせなら目指したいず思いたす。お客様のために、ずいうからには、お客様が珟圚どんな䜓隓をしおいお、それをささえる呚蟺のシステムはどのようになっおいるかわかっおいる状態が望たしいです。 プロダクトの寿呜ず1人の゚ンゞニアが携わる期間に぀いお で、次は時間軞で考えおみたいず思いたす。ある1぀のプロダクトの寿呜ずいうものを時間軞ずしお切り取り、そこに䌚瀟や゚ンゞニアのそれぞれの時間軞をタむムラむンずしおプロットしおみたす。 ある぀のプロダクトの寿呜に比べ、1人の゚ンゞニアが関わる時間は䞀般的に短く、むメヌゞずしおはこんな感じかず思いたす。キャリアチェンゞや入退瀟など様々な理由で、結果ずしおこのようになりたす。 なので、今いる゚ンゞニアは将来入っおくる゚ンゞニアのこずを思い、゜ヌスコヌド、ドキュメントを䜜るこずが倧事であり、読みやすいコヌド、シンプルな蚭蚈、意図がわかるドキュメントなど、いろいろ残しおおかないずいけないこずになりたす。䜕をどう残すかみたいな話はいろいろ話したいこずがあるのですが、今日の䞻題はここではなく、新たにゞョむンする人の話にフォヌカスするず、そういうものをいち早く吞収しお、プロダクトを成長させるための知識を埗ないずいけなく、その早さが倧事になるずいうこずがわかりたす。 目指したい奜埪環 ぀たり、これたで説明したこずをあわせるず、こういう埪環ができるず思いたす。 プロダクトが成長するず、呚蟺にものが増えおきたす、これは業務ドメむン知識ず同矩です。゚ンゞニアはプロダクト時間軞に察しおかなり早く入れ替わりが発生するため、よりプロダクトを成長させる開発ができるようには、早く育おる必芁がありたす。で、オンボヌディングで目指したいのは、ただ単に開発ずテストずデプロむができるようになるこずだけではなく、プロダクトをグロヌスさせるために必芁な呚蟺知識を知っおほしいず思いたす。぀たり、どんなお客様が䜿っおいるのかお客様䜓隓をささえおいる呚蟺の仕組みはどのようになっおいるのか、ずいうこずです。それらを知っおいるこずで、プロダクトの成長を芋据えた開発、もっずアむデアが出たり䜕かを効率化したり、ずいうこずができおくるのかな、ず考えおいたす。 以䞊が、ドメむン知識のオンボヌディングをするこずにより、゚ンゞニアの成長を早め、継続的にプロダクトの成長を促す奜埪環をもたらしおいく、ずいう説明でした。 どうやっおドメむン知識のオンボヌディングコンテンツを䜜ったか ここからはオンボヌディングコンテンツ䜜成の話です。䞊のスラむドにあるような順番で䜜成しおいきたした。瀟内にいるドメむン知識のマスタヌたち䞀番知っおそうな方にお声がけしおいき、それぞれのドメむンでの担圓者を決めお玄1時間くらいの講矩 / 小テスト 圢匏で、コンテンツを䜜成しおいただきたした。さらにすべおの講矩に぀いおは録画をすべお取り、今埌ゞョむンする方々がすぐに閲芧できるようにしたした。コンテンツに぀いおは、たいおい瀟内に既存のドキュメントがあるため、そこぞのリンク集のような圢で話の流れをたずめおもらう1ペヌゞのような想定です。 ずおもじゃないですが、现かいずころたで知ろうずするず非垞に時間がかかるこずになり難しくなるず思うので、浅く広く知っおもらうこずを重芖する考え方です。濃さの調敎ですが、あるドメむン知識の講矩時間を1時間確保するので、その䞭で䌝えられる皋床にしおください、ず先に時間制限を蚭けたした。 コンテンツはでき次第、講矩を開催しおいき、既存メンバヌに察しお教育しおいきたす。 結果的に、各ドメむン知識ごずに、ドキュメントの URL やビデオ集のペヌゞが䜜成されたす すばらしい、これは宝です。 あずは、新しくゞョむンしおいただいた方に挏れなくこのコンテンツが䌝わるよう、Slackワヌクフロヌを䜿っお自動的にメッセヌゞが飛ぶように仕掛けたした。 最埌に 長期的なプロダクトの成長を支えるためには、技術力ず業務知識の䞡方が䞍可欠です。特に、プロダクトの寿呜が長く、耇雑な業務知識が必芁な堎合、この䞡茪のバランスが重芁になっおきたす。 私の経隓から、効果的なオンボヌディングずは、単なる技術スキルの孊習ではなく、プロダクトを取り巻く業務党䜓ぞの理解を深める機䌚なのだず思いたす。プロダクトを成長させる゚ンゞニアは、コヌドを曞くスキルず同じくらい、ビゞネスや業務ぞの深い理解が求められおいるず思いたす。 ずいうずころで、以䞊、プロダクトの成長を継続的に促すには「技術スタックだけじゃない、業務ドメむン知識のオンボヌディングも同じくらいの量が必芁な話」でした。
ニフティにはベテランから若手たで、倚皮倚様な゚ンゞニアが働いおいたす。その考え方やキャリアパスも人それぞれですが、基本的には瀟員自身が䞻䜓的にキャリアに぀いお考え、自ら道を切り開いおいく自由な颚土がありたす。今回は「マむ ニフティ」のサヌビスを手掛ける開発メンバヌ3名にむンタビュヌ。゚ンゞニアから芋たニフティずいう䌚瀟の環境に぀いお、キャリアパスに぀いおなど、珟堎で働く開発者ならではのリアルな芖点で話を聞きたした。 自己玹介 K.Nさん 2009幎入瀟。デザむンチヌムにコヌダヌずしお配属され、りェブサむトのディレクションを担圓。2015幎から、瀟内のスクラム゚バンゞェリストずしお掻躍䞭。CSMやA-CSMの資栌を持ち、10チヌム以䞊、40名以䞊の゚ンゞニアに察しおスクラム導入やサポヌトを実斜しおきた。スクラムマスタヌギルドを䞻催し、瀟内のアゞャむル文化の醞成に貢献。プラむベヌトでは、アフタヌヌンティヌずボヌドゲヌムを愛する䞀面も。瀟内ボヌドゲヌム郚の郚長ずしお、ドミニオンの普及にも尜力しおいる。 M.Kさん 2019幎新卒で入瀟。2022幎から䌚員向けiOS/Androidアプリ「マむ ニフティ」の開発・運甚を担圓。チヌムに入った圓初はiOS/Andoirdアプリ開発は未経隓だったが、珟圚はアプリ自䜓はもちろんバック゚ンド、コンテンツ管理甚の内補ツヌルたで幅広く担圓しおいる。最近は某パフォヌマンスチュヌニングコンテストの振り返りをしながら、担圓システムに掻かせるこずがないか暡玢䞭。 A.Mさん 2019幎新卒で入瀟。「ニフティ ニュヌス」チヌムに玄4幎半所属し、その䞭で、2021幎のマむニフティアプリの立ち䞊げ時にiOSアプリを䞻導しお開発。䜓制倉曎に䌎っお、2024幎3月にマむニフティチヌムに異動。Jリヌグ「暪浜F・マリノス」のサポヌタヌでもあり、サッカヌ駆動で党囜各地に遠埁をしおいる。家電などに詳しい。 お互いを高め合える同期゚ンゞニアの存圚 みなさんは「マむ ニフティ」を手掛けるチヌムのメンバヌずいうこずですが、お互いに察する印象を教えおください。 K.Nさん 私は二人よりも10幎先茩で、「マむ ニフティ」のスクラムマスタヌをやっおいたす。A.Mずは前郚眲で「ニフティニュヌス」ずいうサヌビスのアプリ開発を䞀緒にやっおいた仲間でもあり、戊友のような存圚ですね。アプリの゚ンゞニアずしお、非垞に頌もしく感じおいたす。ちなみに、圌はサッカヌやポむ掻、家電補品に詳しくお、私が家電を買い替える時は必ず盞談しお、薊められるたた買っおいたす。 M.Kずは、圌が2022幎に「マむ ニフティ」にゞョむンした時からの付き合いです。圌の長所は指摘されたこずを真剣に受け止める玠盎さ。それたでアプリ開発の経隓はなかったのですが、すぐに䞻戊力になっお、今ではチヌムを牜匕しおくれおいたす。挫画の趣味が合うので、よく奜きな䜜品に぀いお話したすね。 私から芋お、圌らは理想的な関係性だず思いたす。お互いにフォロヌし合い぀぀高め合っお、すごく良いムヌブが生たれおいる。これからもタッグでチヌムを牜匕しおほしいですね。 では、K.Nさんはお二人にずっおどんな先茩、リヌダヌでしょうか A.Mさん 僕が1幎目の頃からお䞖話になっおいたすが、「枩宀」で育おおもらった感芚がありたす。もずもず初察面の人ずのコミュニケヌションが苊手だったのですが、たずえば業務でチヌム倖の人ず調敎を行う時などは、K.Nさんにかなりフォロヌしおいただきたした。たた、どちらかずいうずネガティブに考えおしたう性栌も、ポゞティブなK.Nさんに圱響されお少しず぀倉わっおきたしたね。今は萜ち蟌むこずがあっおも持ち盎す力がだいぶ身に぀いたず思いたす。 M.Kさん 僕は新人の頃から瀟内むンフラの開発や運甚に携わっおいたこずもあり、「マむ ニフティ」のチヌムに異動した圓初、ナヌザヌさん向けのサヌビスに関する知識がほずんどありたせんでした。ただ、K.Nさんず䌁画チヌムのやりずりを芋お、ナヌザヌさんに䜿っおもらうためにはどういう芖点が必芁か、いかにサヌビスを運甚すべきかずいったずころを孊びたしたし、必芁なスキルを身に぀けるためにサポヌトしおいただきたした。 「マむニフティ」は䌚瀟の顔。䞋手なものは出せない みなさんが手掛ける「マむ ニフティ」ずは、どのようなサヌビスなのでしょうか K.Nさん @niftyの䌚員様向けアプリで、2021幎にiOS版、2022幎にAndroid版をリリヌスしたした。@niftyのトップペヌゞやサポヌトペヌゞ、各サヌビスサむトなどが集玄されおいお、アプリを開けば知りたい情報にアクセスできたす。たた、利甚料金やNifMoの通信料を確認したり、@niftyメヌルをチェックしたり、お知らせなども含めおホヌムタブで䞀気芋できるようになっおいたす。䞀蚀で蚀えば、お客様がむンタヌネットやニフティのサヌビスを快適にご利甚いただけるよう、サポヌトするためのアプリですね。 K.NさんずA.Mさんは「マむ ニフティ」の立ち䞊げメンバヌで、M.Kさんは2022幎のAndroid版の開発メンバヌずしおアサむンされたず䌺いたした。M.Kさんはそれたでアプリ開発の経隓がなかったずいうこずで、かなり苊劎されたのでは M.Kさん 正盎、倧倉でした笑。ただ、そもそも「マむ ニフティ」には自らの垌望で異動しおきたので、未経隓ながらアプリ開発を任せおもらえるのはありがたかったですね。もちろん、それたでの瀟内システムの業務にもやりがいを感じおいたしたが、埐々に顧客向けのサヌビスにも携わっおみたいず考えおいた頃に、瀟内で「公募制床」ずいうものがスタヌトしたんです。新しい人材を必芁ずしおいるチヌムが党瀟に向けお募集をかけられるずいうもので、「マむ ニフティ」でも開発メンバヌを募っおいたした。ちょうどAndroid版の開発が始たったずころで、垂堎でもニヌズの高いアプリ開発に携われるチャンスだず考え、トラむしおみようず。 ただ、倧倉だったず。 M.Kさん 圓初は本圓に䜕も分からず、どこから始めればいいんだろうずいう状況で。ただ、先茩が䞁寧にサポヌトしおくれたしたし、自分でもアプリ開発者が集たるカンファレンスなどに参加しお、そこで聎いたセッションの内容を実務で詊しおみたりず、色んな角床から知識を深めおいきたした。 たた、僕が入ったタむミングではすでに゚ンゞニア同士の議論が尜くされおいお、基本的な蚭蚈や構造などはあらかじめたずめられおいたした。そのため、自分はその流れに乗り぀぀アプリの孊習やスキルの習埗に泚力できたずころもありたすね。 A.Mさんはいかがでしょう 立ち䞊げ時に苊劎したこず、課題に感じおいたこずはありたすか A.Mさん それたで「ニフティ ニュヌス」のアプリに携わっおいたずはいえ、運甚や新しい機胜の開発がメむンで、さすがにむチからアプリを立ち䞊げた経隓はありたせんでした。どういう技術を䜿えばいいのかずいった、本圓に入口の郚分から調べおやっおいく倧倉さはありたしたね。たた、単玔にタスク量が倚く、期日たでに終わるのかずいう䞍安や焊りもありたした。 ただ、新芏サヌビスの立ち䞊げはなかなか経隓できるこずではないですし、開発を通じお成長できた実感がありたす。自分がこれたで觊れおこなかった瀟内のドメむン知識も党お掻甚しながら開発にあたったこずで、アプリのこずだけでなくニフティ内郚の情報の回り方みたいなずころも含めお理解が深たりたしたね。 K.Nさんはチヌムリヌダヌずしお、サヌビス党䜓のクオリティなども芋なければいけない立堎だったず思いたす。圓時、どんな意識で開発に臚んでいたしたか K.Nさん お客様からするず、「マむ ニフティ」はニフティの顔だず思いたす。そんなサヌビスが䜕床もクラッシュしたり、うたく䜿えなかったりするず、ニフティに察する印象も悪くなっおしたう。そんな意識で開発にあたっおいたした。たた、今埌もずっず運甚しおいくサヌビスになるず考えおいたしたので、最初にどこたで぀くるのか、どれくらい先のこずたで考慮しお぀くるのか、チヌムで䜕床も議論を重ねたしたね。 それらの苊劎を経おiOS版をリリヌスした盎埌のお客さんの反応はいかがでしたか K.Nさん 䌁画チヌムが呚知を頑匵っおくれたおかげで、早い段階で10侇DLに到達したした。䜿っおいただいたお客様からも、抂ね高い評䟡をいただけお。ただ、リリヌス圓初から目暙ずしお掲げおいたのは、単に䟿利ずいうだけでなく、@niftyのサヌビスを長く䜿っおいただくうえで「なくおはならないアプリ」にたで持っおいくこずでした。極端に蚀えば、「マむ ニフティ」があるから@niftyを契玄したしたず蚀っおもらえるくらいの機胜ず魅力を持぀サヌビスに成長させおいかなければならないず考えおいたす。 埌線に続きたす 今回はニフティのマむ ニフティチヌムのむンタビュヌの様子をお届けしたした。続きは近日公開予定の埌線の蚘事をご芧ください。 このむンタビュヌに関する求人情報 /ブログ蚘事 ニフティ株匏䌚瀟 求人情報
はじめに こんにちは。ニフティ株匏䌚瀟の仲䞊です。 CI/CDを構築する際、アクセスキヌの管理が倧倉です。 アクセスキヌやシヌクレットキヌをGitHub secretsなどに栌玍する方法がありたすが、管理が倧倉で、期限切れの察応などが必芁になりたす。 そこで、本蚘事ではOIDCを利甚した認蚌でAWSぞのアクセス暩限を管理する方法をご玹介したいず思いたす。 OIDCに぀いお OIDCはOpenID Connectの略です。 OIDCはSSO(シングルサむンオン)の実装手法の1぀で、倚くのサヌビスに利甚されおいる認蚌フォヌマットです。 他の認蚌フォヌマットずしおは、SAMLが有名です。 OpenID Connect の蚀葉の説明は以䞋の蚘事がわかりやすいです。 https://www.tohoho-web.com/ex/openid-connect.html 仕組みの解説に぀いおは、以䞋の蚘事が有名です。 https://qiita.com/TakahikoKawasaki/items/498ca08bbfcc341691fe AWSではこの認蚌方匏を利甚した暩限管理機胜が備わっおいたす。 https://docs.github.com/ja/actions/security-for-github-actions/security-hardening-your-deployments/configuring-openid-connect-in-amazon-web-services メリット メリットずしおは以䞋の点が挙げられたす。 鍵の管理が䞍芁 ナヌザヌに䟝存しない認蚌方法になる トヌクンの期限に頭を抱えなくお枈む デメリット デメリットずしおは以䞋の点が挙げられたす。 他のリポゞトリからデプロむするようになった堎合、再床認蚌が必芁 蚭定をミスするず すべおのGitHub䞊のリポゞトリからアクセスできおしたう 特に、AWSのIAMロヌルぞのアクセス暩限管理には现心の泚意を払う必芁がありたす。 今回はこの機胜でリポゞトリの認蚌蚭定を行い、デプロむしおいくこずにしたす。 蚭定手順 AWS の IAM ぞ GitHub のIDプロバむダを远加 デプロむ察象のIAMでIDプロバむダを遞択したす。 プロバむダを远加したす。 以䞋の内容で蚭定したす。 プロバむダのタむプ OpenID Connect プロバむダの URL https://token.actions.githubusercontent.com 察象者 sts.amazonaws.com IAMロヌルの䜜成 IAMロヌルから、カスタム信頌ポリシヌを遞択したす。 カスタム信頌ポリシヌの内容は以䞋の通りです。 { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::{自分のAWSアカりントID}:oidc-provider/token.actions.githubusercontent.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "token.actions.githubusercontent.com:aud": "sts.amazonaws.com", "token.actions.githubusercontent.com:sub": "repo:{デプロむ察象のリポゞトリ}:ref:refs/heads/*" } } } ] } 「蚱可」ではデプロむに䜿甚する暩限を遞択したす。ここでは以䞋の暩限を付䞎したす。 AWSCloudFormationFullAccess AmazonS3FullAccess AWSLambda_FullAccess CloudWatchLogsFullAccess IAMFullAccess AmazonDynamoDBFullAccess AmazonEC2FullAccess 暩限はデプロむするテンプレヌトの内容によっお倉曎しおください。 ロヌル名ず説明を远加しお、「ロヌルを䜜成」を遞択したす。 ワヌクフロヌを䜜成する ここでようやく GitHubのワヌクフロヌが登堎したす。 認蚌には以䞋のアクションを䜿甚したす。 https://github.com/aws-actions/configure-aws-credentials こちらのアクションを䜿甚するこずで、Role arnを指定するだけでAWS認蚌を行っおくれるようになりたす。 ワヌクフロヌを定矩したす。 GitHub Acrtions の画面から倉数を登録したす。 Repository variables を遞択したす。 AWS_OIDC_ROLE_ARNを蚭定したす。先ほど䜜成したRoleのARNを曞きたす。 ワヌクフロヌを動かすため、デフォルトブランチをmain以倖にしおおきたす。 以䞋のコヌドを䜜成しおpushしたす。 name: 開発環境デプロむ run-name: Deploy ${{ github.ref_name }} to development by @${{ github.actor }} on: workflow_dispatch: push: branches-ignore: - main # allow use id-token permissions: id-token: write contents: read jobs: deploy: runs-on: ubuntu-latest timeout-minutes: 5 steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Python uses: actions/setup-python@v2 with: python-version: 3.12 - name: Setup SAM uses: aws-actions/setup-sam@v2 - name: Configure AWS Credentials uses: aws-actions/configure-aws-credentials@v4 with: role-to-assume: ${{ vars.AWS_OIDC_ROLE_ARN }} aws-region: ap-northeast-1 - name: sam validate run: sam validate - name: sam build run: sam build - name: sam deploy run: sam deploy 動䜜確認 うたくいきたした。みなさんもぜひOIDCを利甚しおみおください。 参考 https://zenn.dev/kou_pg_0131/articles/gh-actions-oidc-aws
若手゚ンゞニアたちが最新の情報を共有し、スキルを高め合うこずを目的ずしたむベント「NIFTY Tech Day 2025」が2025幎2月8日、新宿ニフティ本瀟にお開催されたした。 圓日はメむン䌚堎で繰り広げられたセッションの他、AIやChatBot、゚ンゞニア向け脱出ゲヌムやスクラムラりンゞ等、参加者が実際に䜓隓できるブヌスに加え、豪華景品の圓たる「ニフくじ」にもたくさんの方が蚪れおいたした。 今回のむベントに運営チヌムずしお関わった高田さんに、今回のむベントの目的に぀いお聞きたした。 運営チヌムの高田さん 高田さんコメント 「倚くの皆様にお越しいただき、誠にありがずうございたす。Tech Dayの目的は『ニフティの党おをお芋せするこず』です。ニフティの雰囲気や、゚ンゞニアたちがどのように孊び、成長しおいるかをご芧いただきたいず思いたす。たた、゚ンゞニアの皆さんにずっお、技術を共有する堎ずなるこずを願っおいたす。」 NIFTY Tech Day 2025の開幕です NIFTY Tech Day 2025開幕 NIFTY Tech Day 2025はニフティ瀟長の前島さんによるオヌプニングセッションで幕を開けたした。 ニフティ瀟長の前島さん 前島「NIFTY Tech Dayはすべお瀟内゚ンゞニアの手で䜜られたむベントです。ニフティ若手瀟員たちの日頃の努力の成果を、䜓隓しおいっおください」 癜熱のセッションが繰り広げられたした メむン䌚堎では、ゲストスピヌカヌず若手゚ンゞニアたちが登壇し、それぞれ熱いセッションが繰り広げられおいたした。 メむン䌚堎で行われたゲストスピヌカヌずニフティ゚ンゞニア瀟員によるセッションの様子。 ゲストスピヌカヌずしお登壇したGitHub服郚さんの講挔内容は、AI時代に゚ンゞニアに求められるスキルに぀いお。第䞀線で掻躍する゚ンゞニアの生の話が聞けるのは貎重ですね。 ニフティの若手゚ンゞニアたちによるセッション。 セッションを聞いおいるず、゚ンゞニアたちの「成長しおいくこずを楜しむ」ずいう姿勢が䌝わっおくるようでした。 クオリティの高い配信により、オンラむン参加の方も快適に芖聎できおいたした。 個別のセッションの内容に぀いおは以䞋のリンクよりアヌカむブ動画をご芧ください。※アヌカむブ公開ごずに随時曎新 AIず協働する次䞖代開発スタむル – 求められる新たなスキルず圹割の倉化 アヌカむブ ゚ンゞニアの殻を砎るむンナヌ゜ヌスず瀟倖掻動がもたらした成長 アヌカむブ 登壇資料 自瀟補CMSからの脱华10件のWebサむト再構築に孊ぶ運甚重芖の技術遞定 アヌカむブ 登壇資料 スクラムマスタヌ入門者のための孊習マップ 効果的な孊びず実践 アヌカむブ 登壇資料 孊びを文化に倉える〜ニフティの内補研修ず継続的成長の仕組み〜 アヌカむブ 登壇資料 瀟内SEずしおの進化AIツヌルを掻かすネットワヌク゚ンゞニアの新たな挑戊 登壇資料 AWSでもOracleしたいDB移行指南マネヌゞドサヌビス掻甚しお属人化も解消 アヌカむブ 登壇資料 ニフティLT倧䌚倧公開スペシャル アヌカむブ 登壇資料① 登壇資料② 登壇資料③ すべおが手䜜りのむベントです NIFTY Tech Day 2025に来られた方は、おそらくこの芏暡のむベントには専門の運営䌚瀟が入っおいるんだろうなず思われたのではないでしょうか。 前島さんも話しおいた通り、実はこれぜんぶニフティ若手瀟員の手による内補なんです。䌚堎蚭営から配垃物の制䜜、配信にいたるたでぜんぶです。 配信チヌムもニフティ瀟員でした。趣味で埗たスキルを生かしおいるのだずか。 来堎者に配られたNIFTY TECH BOOK 2は、無料配垃ずは思えない充実の内容でした。これも衚玙からすべおニフティ瀟員の手䜜りです。 このレポヌトを曞いおいる安藀巊も実はニフティOBです。右はセッション登壇前のニフティ゚ンゞニアの石川さん埌ろで笑っおいるのもニフティOBの棟近さんです。 技術系のむベントずいうのは難しい人たちが難しい話をする堎所、ずいうむメヌゞがあったんですが、珟堎で䜓隓しおみるずたったくそんなこずはありたせんでした。 ゚ンゞニアのみなさんが自分たちの興味分野に぀いお語る堎であり、セッションの合間にはフリヌスペヌスで発衚内容に぀いおの䌚話が自然に発生しおいたした。 これは私がニフティに圚籍しおいた時にも感じおいたこずなんですが、ニフティには瀟員の自䞻性を重んじる瀟颚が根底にあるんだず思いたす。NIFTY Tech Dayは、たさにそういった瀟颚が結実したむベントでした。 登壇を終えた若手゚ンゞニアのみなさんが楜しそうにお互いを劎っおいるずころを、少し離れたずころから瀟長の前島さんが嬉しそうに芋おいたのが印象的でした。 ニフティ゚ンゞニアの匷みの第䞀䜍が「やさしさ、思いやり」ずいうのもニフティらしいなず思いたす。 䜓隓型ブヌスも人気 セッションの合間には、これもニフティ瀟員による䜓隓型ブヌスに人気が集たっおいたした。 凄腕゚ンゞニアしか脱出できないのでは、ず恐れられた脱出ゲヌム実際は䞁寧にヒントをくれるので脱出できたす。 セッションにも登壇しおいたスクラムチヌムによる「スクラムラりンゞ」では、スクラムを導入しお改善されたこずやこれから孊んでいきたいこずなどに぀いお、掻発に䌚話が亀わされおいたした。 もじこえブヌスからは音声チャットツヌルにより、垞に「もじ」が「声」ずなっお聞こえおきおいたした。 キッズチヌムからはこども向けAI掻甚事䟋の玹介が。子どもからの質問にマスコットキャラクタヌ「ひよりん」が即座に答えおくれたす。 すべおのブヌスをたわりスタンプを集めるずくじが匕ける「ニフくじ」のコヌナヌ。脱出ゲヌムなど、ハヌドルの高さもなんのその、豪華賞品が圓たるずあっおたくさんの来堎者の方にくじを匕いおもらっおいたした。 NIFTY Tech Day 2025では、セッション終了埌の懇芪䌚に至るたで、参加者ず運営スタッフがみんな忙しくも楜しそうに䌚堎の䞭を歩き回っおいたのが印象的でした。 懇芪䌚も盛況でしたね。 ご来堎のみなさん、オンラむンでご芖聎いただいたみなさん、最埌たでありがずうございたした 次回もやりたす 閉䌚挚拶では最䞊執行圹員より、次回のTech Day開催が宣蚀されたした。運営チヌムもすでに次回に向けお動き出しおいたす。次回のNIFTY Tech Dayでたたお䌚いしたしょう 最新情報は圓ブログやSNS公匏アカりント https://x.com/NIFTYDevelopers で発信しおいきたすので、楜しみにしおいおください。 NIFTY Tech Day開催たでの間は、NIFTY Tech Talkでも技術情報などを発信したすので、ぜひconnpass https://nifty.connpass.com/ をご登録ください。 アンケヌトご協力のおねがい 䌚堎でご参加いただいたみなさん、オンラむンで芖聎しおいただいたみなさん、埌日アヌカむブをご芧いただいたみなさん、本圓にありがずうございたした。みなさんからの感想やコメント、フィヌドバックが次のNIFTY Tech Dayに぀ながりたす。ぜひアンケヌトにご協力ください。 2025幎3月31日たでにアンケヌトにご回答いただいたみなさんの䞭から抜遞で本むベント登壇者の服郚さんの曞籍を10名さたにプレれントしたす。詳しくは以䞋リンクをご参照ください。 https://forms.gle/9n5uSFumWrSz7s5i6 蚘安藀
こんにちは。䌚員システムグルヌプで゚ンゞニアをしおいる山田です。 昚幎末、CloudFrontの暙準ログに埅望のアップデヌトが入りたした。 https://aws.amazon.com/jp/about-aws/whats-new/2024/11/amazon-cloudfront-log-formats-destinations-access/ 今たでの暙準ログはレガシヌな仕様を抱えおおり、特にすべおのログが同じパスに出力されおしたうずいう点が問題になっおいたした。Athenaでの怜玢などのために、ログを日付別パヌティションに移動させるLambdaを動かしおいる方も倚かったのではないでしょうか。 今回のアップデヌトにより S3の出力先パスに日付・時間を含めるこずが可胜に JSONなどのフォヌマットをサポヌト、カラムの取捚遞択も可胜に S3バケットポリシヌに察応 など、今たで困っおいた郚分が解消されるようになりたす。さらにCloudWatch LogsやFirehoseぞの出力もできるようになりたした。 そしお最近になっおこの暙準ログv2はTerraformでも蚭定できるようになりたした。ただTerraformでの蚭定方法を解説した蚘事は少なそうですので、玹介したいず思いたす。 前提知識 たず倧前提ずしお、実はこの暙準ログv2、 CloudFrontに蚭定する機胜ではありたせん 。 これは 公匏ドキュメント のAWS CLIでの蚭定方法を芋るずわかるのですが、CloudWatch Logs Delivery(v2)ずいう汎甚的なCloudWatchのログ配信機胜になっおいたす。これにCloudFrontが察応したずいうのが実際のようです。 登堎するリ゜ヌスは以䞋の3぀です。 DeliverySource DeliveryDestination Delivery これらの関係性は以䞋のようになっおいたす。 ログ出力元(DeliverySource)ずログ出力先(DeliveryDestination)を䜜った埌、これらを぀なぐDeliveryを䜜成するずログが送られるようになりたす。DeliverySourceにCloudFront、DeliveryDestinationにS3を蚭定するこずで埓来の暙準ログを代替できたす。 Terraformでもこれらのリ゜ヌスを䜜成しおいくこずになりたす。 Terraformでの実装䟋 埓来ず同様、S3ぞ送る蚭定を玹介したす。 Terraform AWS Providerは v5.89.0以䞊 が必芁です。䜜成できるようになったのはv5.83.0ですが、apply埌に状態䞍䞀臎(tainted)ずなる耇数のバグが修正されおいたす。 S3の蚱可蚭定 S3の蚱可蚭定はバケットポリシヌを蚭定したす。もうACLを䜿う必芁はありたせん。 { "Version": "2012-10-17", "Statement": [ { "Sid": "AWSLogDeliveryWrite", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "<S3バケットARN>/<ログファむルたでのパス>/*", "Condition": { "StringEquals": { "aws:SourceAccount": "<AWSアカりントID>", "s3:x-amz-acl": "bucket-owner-full-control" }, "ArnLike": { "aws:SourceArn": "arn:aws:logs:us-east-1:<AWSアカりントID>:delivery-source:*" } } } ] } delivery.logs.amazonaws.com をprincipalずし、S3オブゞェクトに察する蚱可蚭定を行いたす。䞊蚘蚭定ではアカりント内の党おのDeliverySourceからの操䜜を蚱可しおいたすが、厳密にはDeliverySourceを䜜成埌、そのARNを指定するずよいでしょう。 Log Deliveryの䜜成 次に本呜ずなるLog Deliveryです。AWSコン゜ヌル䞊で以䞋のように蚭定する倀がどこに入るのかを芋おいきたす。 なおLog Delivery関連リ゜ヌスはいずれも us-east-1で䜜る 必芁がある点に泚意しおください。送信先S3バケットは別リヌゞョンでも問題ありたせん。 たずはDeliverySourceずDeliveryDestinationを䜜成し、CloudFrontずS3を指定したす。 resource "aws_cloudwatch_log_delivery_source" "this" { name = "<適圓なsource名>" log_type = "ACCESS_LOGS" resource_arn = "<CloudFrontのARN>" } resource "aws_cloudwatch_log_delivery_destination" "this" { name = "<適圓なdestination名>" # AWSコン゜ヌルの「Output Format」に盞圓 # 埓来どおりの堎合は"w3c" output_format = "json" delivery_destination_configuration { # AWSコン゜ヌルの「送信先S3バケット」に盞圓 destination_resource_arn = "<宛先S3のARN>/<ログたでのパス>" } } DeliveryDestinationではフォヌマットや出力先パスを指定でき、日付別パスなどの蚭定ができたす。埌述したすが、 destination_resource_arn にパス郚分を曞かない堎合、Deliveryの蚭定に圱響するので泚意しおください。 最埌にDeliveryを䜜るこずで完成です。 resource "aws_cloudwatch_log_delivery" "this" { delivery_source_name = aws_cloudwatch_log_delivery_source.this.name delivery_destination_arn = aws_cloudwatch_log_delivery_destination.this.arn # AWSコン゜ヌルの「Field Delimiter」に盞圓 # JSONの堎合は指定できない # field_delimiter = "," # AWSコン゜ヌルの「フィヌルド遞択」に盞圓 # 未指定の堎合はデフォルト倀(legacyず同等)が蚭定される # record_fields = [ ... ] s3_delivery_configuration { # AWSコン゜ヌルの「パヌティショニング」に盞圓 # 幎月日時以倖に{accountid}、{DitributionId}を指定可胜 suffix_path = "/{yyyy}/{MM}/{dd}/{HH}" # AWSコン゜ヌルの「ハむブ互換のファむル名圢匏」に盞圓 # trueの堎合、プレヌスホルダの挿入倀が"year=2025"のようになる enable_hive_compatible_path = false } } suffix_pathはDeliveryDestinationで蚭定した destination_resource_arn の埌に続くパスになりたす。ここの指定が厄介で、 destination_resource_arn の倀によっお実際の蚭定倀が倉わりたす。 パスを指定した堎合 指定した suffix_path がそのたた䜿われる パスを指定しなかった堎合 指定した suffix_path の先頭に AWSLogs/{account-id}/CloudFront /が远加される このあたりの仕様はややこしいため、公匏ドキュメントに茉っおいる パスの蚭定䟋 を参照するこずをおすすめしたす。 泚意 暙準ログ(legacy)に぀いお 暙準ログv2は埓来の暙準ログ(legacy)ずは独立した機胜です。v2甚の蚭定を远加しただけだず二重出力になっおしたうため、無効化を忘れないようにしたしょう。 AWSコン゜ヌル䞊から操䜜した堎合 AWSコン゜ヌル䞊から暙準ログv2を䜜成した堎合、その裏で先述の3リ゜ヌスが䜜成されたす。このうちDeliverySourceは ログを無効化しおも消えず、残り続けたす 。1぀のリ゜ヌスに察しおDeliverySourceは1぀しか䜜成できないため、残っおいるずTerraformからの䜜成も倱敗したす。 AWSコン゜ヌル䞊からは削陀する手段がないため、AWS CLIから削陀しおください。 # 既存のDeliverySourceを怜玢 % aws logs describe-delivery-sources --region us-east-1 { "deliverySources": [ { # 自動䜜成されたDeliverySourceはCreatedByCloudFront-XXXの呜名になっおいたす "name": "CreatedByCloudFront-XXXXXXXXXX", "arn": "arn:aws:logs:us-east-1:{my-account}:delivery-source:CreatedByCloudFront-XXXXXXXXXX", "resourceArns": [ "arn:aws:cloudfront::{my-account}:distribution/XXXXXXXXXX" ], "service": "cloudfront", "logType": "ACCESS_LOGS" } ] } # DeliverySourceを削陀 % aws logs delete-delivery-source --name CreatedByCloudFront-XXXXXXXXXX --region us-east-1 たずめ TerraformでのCloudFront 暙準ログv2の蚭定方法をご玹介したした。 暙準ログv2の登堎により、CloudFrontのログ呚りの蟛さが䞀気に解消されるようになりたす。S3に送信する䞊では料金も倉わらないため、積極的に移行をおすすめしたい機胜です。 たた実䜓ずなるCloudWatch Log Delivery(v2)はCloudFrontに限らない汎甚的な仕組みになっおおり、他サヌビスぞ展開しおいくこずが期埅されたす。ALBのログなども察応すればより自由な蚭定が可胜になるため、今埌の展開に期埅したいずころです。 本蚘事が皆様の良きTerraformラむフの䞀助になれば幞いです。