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

GitHub ActionsからTerraform Planするお話

GitHub ActionsからTerraform Planするお話

Avatar for Kohei Kojima

Kohei Kojima

May 27, 2025
Tweet

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 ͷࢦఆͰ࢖༻Մೳ