Upgrade to Pro — share decks privately, control downloads, hide ads and more …

GitHub ActionsからTerraform Planするお話

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

GitHub ActionsからTerraform Planするお話

Avatar for Kohei Kojima

Kohei Kojima

May 27, 2025
Tweet

More Decks by Kohei Kojima

Other Decks in Technology

Transcript

  1. c$0/'*%&/5*"-  ࣮ߦ؀ڥͷઃఆ (JU)VC"DUJPOT͔Β5FSSBGPSN1MBO͢Δ͓࿩ c$*Ͱ1MBO͢ΔͨΊͷઃఆ • 5FSSBGPSN • AIBTIJDPSQTFUVQUFSSBGPSNAͷ"DUJPOTͰΠϯετʔϧՄೳ •

    όʔδϣϯͷࢦఆ͸͓޷ΈͰʜ • EFUBJMFEFYJUDPEFͷΦϓγϣϯͱͷ૬ੑ͕ѱ͍Α͏ͳͷͰ UFSSBGPSN@XSBQQFS͸GBMTFʹ - uses: hashicorp/setup-terraform@v3 with: terraform_wrapper: 'false'
  2. c$0/'*%&/5*"-  ೝূͷઃఆ (JU)VC"DUJPOT͔Β5FSSBGPSN1MBO͢Δ͓࿩ c$*Ͱ1MBO͢ΔͨΊͷઃఆ • "84 • ABXTBDUJPOTDPOGJHVSFBXTDSFEFOUJBMTA ͷ"DUJPOΛ࢖༻͠

    0*%$ʹΑΔೝূΛ࢖༻ • 8PSLGMPXʹ͓͚ΔQFSNJTTJPOTʹɺJEUPLFOXSJUFΛઃఆ͢Δ͜ͱ • NBTLBXTBDDPVOUJEΛUSVFʹ͢ΔͱΞΧ΢ϯτ൪߸ΛӅͯ͘͠ΕΔ - uses: aws-actions/configure-aws-credentials@v4 with: aws-region: 'us-east-1' role-to-assume: ${{ secrets.AWS_TERRAFORM_PLANNER_ROLE }} role-session-name: 'TerraformCheck' mask-aws-account-id: true retry-max-attempts: 3
  3. c$0/'*%&/5*"-  ೝূͷઃఆ (JU)VC"DUJPOT͔Β5FSSBGPSN1MBO͢Δ͓࿩ c$*Ͱ1MBO͢ΔͨΊͷઃఆ • (PPHMF$MPVE • AHPPHMFHJUIVCBDUJPOTBVUIAͷ"DUJPOΛ࢖༻͠0*%$ʹΑΔೝূΛ࢖༻ •

    8PSLGMPXʹ͓͚ΔQFSNJTTJPOTʹɺJEUPLFOXSJUFΛઃఆ͢Δ͜ͱ • QSPKFDU*EΛӅ͍ͨ͠৔߹͸(JU)VC"DUJPOTͷ4FDSFUTʹొ࿥ͷ্ɺ 8PSLGMPXͷதͰ 4FDSFUΛࢀর͢Δඞཁ͕͋Δ • $IFDLPVUͨ͠௚Լʹೝূ༻ͷϑΝΠϧΛ࡞੒͢ΔͷͰ஫ҙ HIBDSFET DCKTPOͷΑ͏ͳϑΝΠϧ • ͜ͷϑΝΠϧ͕࿙Εͯ΋௚ͪʹӨڹ͕͋ΔΘ͚Ͱ͸ͳ͍ • ίϛοτࢦఆͳϑΝΠϧ͕૿͑ΔͷͰHJUEJGGͳͲͰҾ͔͔ͬΔ͜ͱ͕͋Δ - uses: google-github-actions/auth@v2 with: workload_identity_provider: ${{secrets.GOOGLE_CLOUD_IDENTITY_PROVIDER}} service_account: ${{secrets.GOOGLE_CLOUD_TERRAFORM_PLANNER_SERVICE_ACCOUNT}}
  4. c$0/'*%&/5*"-  ೝূͷઃఆ (JU)VC"DUJPOT͔Β5FSSBGPSN1MBO͢Δ͓࿩ c$*Ͱ1MBO͢ΔͨΊͷઃఆ • (JU)VC • ABDUJPOTDSFBUFHJUIVCBQQUPLFOAͷ"DUJPOΛ࢖༻͠"QQ*EͱൿີݤͰ5PLFOΛ࡞੒ •

    3FQPTJUPSZ΍0SHBOJ[BUJPOͷઃఆΛ͍ͨ͠ࡍʹ࢖༻͢Δ • "DUJPOTͷ4FDSFU΍&OWJSPONFOUͳͲ • 5FSSBGPSNଆͷ1SPWJEFSͷઃఆͰ"QQΛ࢖͏ઃఆʹ΋Ͱ͖Δ͕ɺJOTUBMMBUJPOJE͕ඞཁ ͳͷͰ஫ҙ - id: generate-token uses: actions/create-github-app-token@v2 with: app-id: ${{ steps.get-secrets.outputs.app_id }} # from Secret Manager private-key: ${{ steps.get-secrets.outputs.pem }} # from Secret Manager owner: ${{ github.repository_owner }}
  5. c$0/'*%&/5*"-  ೝূͷઃఆ (JU)VC"DUJPOT͔Β5FSSBGPSN1MBO͢Δ͓࿩ c$*Ͱ1MBO͢ΔͨΊͷઃఆ • ଞ • αʔϏεʹΑͬͯҟͳΔ͕ɺ"1*,FZͳͲΛઃఆ •

    "1* ,FZ͸"DUJPOTͷ4FDSFU΍ɺΫϥ΢υͷ4FDSFU.BOBHFSͳͲ͔Β࣋ͬͯ͘Δ ͜ͱʹͳΓͦ͏ • "84ʹอଘ͍ͯ͠Ε͹ɺFQIFNFSBM CMPDLͰҾͬு͖ͬͯͯɺ1SPWJEFSͷઃఆʹ࢖༻ ͢Δ͜ͱ΋Ͱ͖Δ • (PPHMF $MPVEͷ4FDSFU.BOBHFS͸FQIFNFSBM SFTPVSDFͷ࣮૷͕ͳ͍ʜ ephemeral "aws_ssm_parameter" "cloudflare_token" { arn = local.cloudflare_token_arn } provider "cloudflare" { api_token = ephemeral.aws_ssm_parameter.cloudflare_token.value }
  6. c$0/'*%&/5*"-  ݖݶͷઃఆ (JU)VC"DUJPOT͔Β5FSSBGPSN1MBO͢Δ͓࿩ c$*Ͱ1MBO͢ΔͨΊͷઃఆ • ඞཁͳݖݶ • 4UBUFϑΝΠϧͷಡΈࠐΈॻ͖ࠐΈͷݖݶ •

    "QQMZ͢ΔͳΒॻ͖ࠐΈ͕ඞਢɻ1MBO͚ͩͳΒಡΈࠐΈͰ0, • ,.4Ͱ҉߸Խ͍ͯ͠ΔͳΒͦͷؔ࿈΋ඞཁ • -PDLʹؔ͢Δݖݶ • 1MBO࣌ʹ-PDL͠ͳ͍ MPDLGBMTF ͳΒෆཁ • ॻ͖ࠐΈͷݖݶͰ͋Δ͜ͱ͕ଟ͍ • "84ͳΒ4͔%ZOBNP%# • (PPHMF $MPVEͳΒ$MPVE4UPSBHF • 1MBO͢ΔϦιʔεʹؔ͢Δݖݶ
  7. c$0/'*%&/5*"-  ݖݶͷઃఆ (JU)VC"DUJPOT͔Β5FSSBGPSN1MBO͢Δ͓࿩ c$*Ͱ1MBO͢ΔͨΊͷઃఆ • 1MBO͢ΔϦιʔεʹؔ͢Δݖݶ • ࠷খݖݶͷݪଇΛकΕΔͷͰ͋Ε͹ͦΕ͕Ұ൪ •

    ϚωʔδυͳݖݶΛઃఆ͢Δͷ͕؆୯ ΞΫηεͤͨ͘͞ͳ͍΋ͷ͸%FOZ͢ΔͳͲ • "84ͳΒ3FBE0OMZ"DDFTTͷϙϦγʔ • 44.1BSBNFUFSͷ಺༰͕ಡΊΔͷͰ஫ҙ • (PPHMF$MPVEͳΒӾཡऀͷϩʔϧ • ͲͪΒ΋4FDSFU.BOBHFSͷ಺༰͸ಡΊͳ͍ • ࣮ࡍʹ࢖͏ࡍʹ͸Α͘ௐ͔ࠪͯ͠Β
  8. c$0/'*%&/5*"-  UFSSBGPSNJOJU (JU)VC"DUJPOT͔Β5FSSBGPSN1MBO͢Δ͓࿩ c1MBO࣮ߦͷྲྀΕ • 1SPWJEFSΛμ΢ϯϩʔυ͍ͯ͘͠ • ਺ඦ.#͋ΔͷͰɺ௨৴ྔʹ͸ؾΛ෇͚Δ •

    4FMG)PTUFE3VOOFSͷ৔߹ͳͲ • 1SPWJEFSΛΩϟογϡ͢Δͱμ΢ϯϩʔυճ਺͕ݮΔ • 5'@1-6(*/@$"$)&@%*3 ͷࢦఆͰ࢖༻Մೳ