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

IaCを使って楽々構築、IaCとお友達になろう

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

 IaCを使って楽々構築、IaCとお友達になろう

IaCを使って楽々構築、IaCとお友達になろう

Avatar for Kota Sasaki

Kota Sasaki

October 07, 2024
Tweet

More Decks by Kota Sasaki

Other Decks in Technology

Transcript

  1. © NEC Corporation 2024 NEC Group Internal Use Only 2

    自己紹介 ◼ 佐々木 航太(Kota Sasaki) NECソリューションイノベータ株式会社 普段の業務 AWSの導入支援からSaaSの開発など幅広く対応してます。 AWS Ambassador 2024 Japan AWS TopEnginer 2024/2022/2021 Japan AWS All Certifications 2024 好きなAWSサービス:Lambda、CloudFormation #40歳 #稚内出身 #野球 #AWS歴10年 #ネットワーク #セキュリティ #新製品好き #Soracom
  2. © NEC Corporation 2024 NEC Group Internal Use Only 3

    IaCを使って楽々構築、IaCとお友達になろう
  3. © NEC Corporation 2024 NEC Group Internal Use Only 4

    まずは質問 普段業務でCloudFormationを使って開発してる人
  4. © NEC Corporation 2024 NEC Group Internal Use Only 5

    まずは質問 普段業務でAWS CDKを使って開発してる人
  5. © NEC Corporation 2024 NEC Group Internal Use Only 6

    IaC(Infrastructure as Code)とは
  6. © NEC Corporation 2024 NEC Group Internal Use Only 7

    IaC(Infrastructure as Code)とは? コードにて、インフラの管理や作成を行うプロセスこと Amazon Elastic Compute Cloud (Amazon EC2) Amazon Bedrock Amazon API Gateway AWS Step Functions
  7. © NEC Corporation 2024 NEC Group Internal Use Only 8

    マネージメントコンソール(IaCを導入しない場合)の課題 ・現状の状態を把握することが困難である。 ・人による作業が必要なので、操作ミスをいうリスクが伴う ・再現性がない ・マネージメントコンソールのアップデートが行われ、 手順書の作り直しが必要
  8. © NEC Corporation 2024 NEC Group Internal Use Only 9

    IaC導入のメリット ・IaCに書かれている内容を確認すれば環境の確認ができる。 →マネコンから設定変更してたらどうするの?
  9. © NEC Corporation 2024 NEC Group Internal Use Only 10

    IaC導入のメリット ・デプロイ時間の削減 →ご飯食べる前に流して、ご飯食べたら完成 ・削除するときも一括で削除 →手順書を逆になぞらなくても大丈夫 ・同じ構成を何回でもデプロイできる →AWSはベストプラクティスをよく使う。Web3層でDockerで あっこの前使ったので行けるかも。
  10. © NEC Corporation 2024 NEC Group Internal Use Only 11

    IaC導入のメリット ・人的ミスの排除 →ミスをしない人はいません。 ・CI/CDやバージョン管理も可能 →この前どんな変更したかも一目瞭然
  11. © NEC Corporation 2024 NEC Group Internal Use Only 12

    CloudFormationとAWS CDKの概要
  12. © NEC Corporation 2024 NEC Group Internal Use Only 13

    AWS CloudFormation ・追加料金なしで利用可能(作成されたリソースについては課金されます) ・記述はJSONとYAMLで記載できるがYAMLの方がおすすめ →コメントがかける ・リリースされたばかりのものなどは作成できないこともある。 →CLI→CloudFormation→CDK AWS CloudFormation Stack Amazon Elastic Compute Cloud (Amazon EC2) Amazon Bedrock Amazon API Gateway AWS Step Functions
  13. © NEC Corporation 2024 NEC Group Internal Use Only 14

    AWS CloudFormation ・作成したいリソースがCloudFormationに対応していない・・・ →そんな時にはカスタムリソースが使えます。CloudFormationからLambdaを呼び出すことで、 CLIとかSDKでしか対応してないものにも対応できます。 ただし・・・作成してから数日でCloudFormationが対応することもよくあります。私は1ヶ月以内 に対応したのが3回ほど。あんなに頑張ったのに・・・と。
  14. © NEC Corporation 2024 NEC Group Internal Use Only 15

    AWS CloudFormation ・拡張機能というのがあります。標準機能に加えて特定の機能を付け足すことができます。 ーAWS::Include →S3に置いた、別のCloudFormationテンプレートを読み込むことができます。 ーAWS::Serverless-2016-10-31 →サーバレス系のリソースを作成するのに便利な拡張。私はLambdaをデプロイする時は、 これを使ってます。ローカルのパス指定したものをzipにしてS3においてコードの参照先を 格納したS3のパスにしてくれます。 ーAWS::LanguageExtensions →例えば配列のやJSON変換などが可能です。 ーAWS::CloudFormation::Macro ーAWS::CodeDeployBlueGreen 他にもあるので探してみてください。
  15. © NEC Corporation 2024 NEC Group Internal Use Only 16

    AWS CloudFormation Resources: WebServerInstance: Type: AWS::EC2::Instance #(...) Properties: ImageId: xxxxxx #(...) UserData: !Base64 Fn::Sub: | #!/bin/bash yum -y install aws-cfn-bootstrap ここにインストールしたいもの /opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource xxxx --region ${AWS::Region} /opt/aws/bin/cfn-signal -e $? --stack ${AWS::StackName} --resource xxxxx --region ${AWS::Region} CreationPolicy: ResourceSignal: Timeout: PT15M ・EC2しか使ってません。パッケージのインストールどうするの??
  16. © NEC Corporation 2024 NEC Group Internal Use Only 17

    なぜAWS CDKを作成したか https://www.youtube.com/watch?v=AYYTrDaEwLs ・複数のチームが独立して開発・デプロイ可能に するためにモジュール化したい ・繰り返し複雑なものを作成することを避けるために 抽象化したい。 ・JSONやYAMLよりも慣れ親しんだ言語で記述したい。
  17. © NEC Corporation 2024 NEC Group Internal Use Only 18

    AWS CDK https://www.youtube.com/watch?v=BmCpa44rAXI&t=8s
  18. © NEC Corporation 2024 NEC Group Internal Use Only 19

    AWS CDK https://www.youtube.com/watch?v=BmCpa44rAXI&t=8s
  19. © NEC Corporation 2024 NEC Group Internal Use Only 20

    AWS CDK https://www.youtube.com/watch?v=BmCpa44rAXI&t=8s
  20. © NEC Corporation 2024 NEC Group Internal Use Only 21

    AWS CDK https://cloud.nri-net.com/reports/aws-cdk-report-2404/
  21. © NEC Corporation 2024 NEC Group Internal Use Only 22

    AWS CDK https://cloud.nri-net.com/reports/aws-cdk-report-2404/
  22. © NEC Corporation 2024 NEC Group Internal Use Only 23

    AWS CDK https://cloud.nri-net.com/reports/aws-cdk-report-2404/
  23. © NEC Corporation 2024 NEC Group Internal Use Only 24

    AWS CDKのメリット CDK何がいいのかは、YAMLを直接記述するよりも記述量が減る Ssequence: Type: AWS::DynamoDB::Table Properties: TableName: xxxx BillingMode: PAY_PER_REQUEST AttributeDefinitions: - AttributeName: id AttributeType: S KeySchema: - AttributeName: name KeyType: HASH StreamSpecification: StreamViewType: NEW_AND_OLD_IMAGES PointInTimeRecoverySpecification: PointInTimeRecoveryEnabled: true Muser: Type: AWS::DynamoDB::Table Properties: TableName: yyyy BillingMode: PAY_PER_REQUEST AttributeDefinitions: - AttributeName: id AttributeType: S KeySchema: - AttributeName: name KeyType: HASH StreamSpecification: StreamViewType: NEW_AND_OLD_IMAGES PointInTimeRecoverySpecification: PointInTimeRecoveryEnabled: true Muser: Type: AWS::DynamoDB::Table Properties: TableName: tttt BillingMode: PAY_PER_REQUEST AttributeDefinitions: - AttributeName: id AttributeType: S KeySchema: - AttributeName: name KeyType: HASH StreamSpecification: StreamViewType: NEW_AND_OLD_IMAGES PointInTimeRecoverySpecification: PointInTimeRecoveryEnabled: true Muser: Type: AWS::DynamoDB::Table Properties: TableName: zzzz BillingMode: PAY_PER_REQUEST AttributeDefinitions: - AttributeName: id AttributeType: S KeySchema: - AttributeName: name KeyType: HASH StreamSpecification: StreamViewType: NEW_AND_OLD_IMAGES PointInTimeRecoverySpecification: PointInTimeRecoveryEnabled: true 4つのDynamoDBを作成するYAML for(const name of [”xxxx”, ”yyyy”, “tttt”, ”zzzz”]) new dynamodb.Table(this, 'Sample-table', { tableName: "samble-table", partitionKey: { name: 'id’, type: dynamodb.AttributeType.STRING, }, sortKey: { name: 'name’, type: dynamodb.AttributeType.STRING, }, billingMode: dynamodb.BillingMode.PAY_PER_REQUEST, pointInTimeRecovery: true, timeToLiveAttribute: 'expired', removalPolicy: cdk.RemovalPolicy.DESTROY, }); } 同じ処理をCDKだとこれぐらい
  24. © NEC Corporation 2024 NEC Group Internal Use Only 25

    AWS CDKのメリット CloudFormationでS3を削除する場合 new aws_s3.Bucket(this, 'MyBucket', { bucketName: `test-bucket`, removalPolicy: RemovalPolicy.DESTROY, autoDeleteObjects: true, }); AWS CDKの場合 Amazon Simple Storage Service (Amazon S3) コンソールかCLI からオブジェク トを削除 AWS CloudFormation Stack Stackを削除する この記述だけあれば cdk destoryで自動でオ ブジェクトを削除して くれる。 仕組みはさっき登場し たCloudFormationのカ スタムリソース
  25. © NEC Corporation 2024 NEC Group Internal Use Only 26

    実際のプロジェクトではどうしてるか?
  26. © NEC Corporation 2024 NEC Group Internal Use Only 27

    実際のデプロイ構成例 Client
  27. © NEC Corporation 2024 NEC Group Internal Use Only 28

    CloudFormationとAWS CDK使う時の家訓
  28. © NEC Corporation 2024 NEC Group Internal Use Only 29

    家訓1 特に最初に作成するときは、パラメータを指定する 作業があるのと、一つもリソースが作成されない場 合は、一度削除して再度作成が必要になります。 失敗しにくいリソースはSNS! 確実に作成できるものだけに絞って流す方が、 後戻りは少ない。 「石橋は叩いて渡る」
  29. © NEC Corporation 2024 NEC Group Internal Use Only 30

    家訓2 RDSなどは作成に30分程度かかる。作成された後に、 APサーバを作って・・・エラーになってロールバック 削除にも30分かかり、やり直してトータル2時間・・・ 着実に一つづつ進んでいく方が効率がいいです。 「急がば回れ」
  30. © NEC Corporation 2024 NEC Group Internal Use Only 31

    家訓3 着実に進んできて出来上がったら一度削除を。 構築する順序性などで、本番環境作成しよう とそのまま実行するとエラーに。 家訓1、2を守った場合は、壊して再作成! 「一気通貫」
  31. © NEC Corporation 2024 NEC Group Internal Use Only 32

    家訓4 CloudFormationにはスタック間で値を参照できる ExportValueとImportValueという機能がありま すが、便利だと思い多用すると痛い目に、 ImportValueされている値は参照元で変更できな くなります。このような場合は ImportValueを やめて参照してる値を直接書いて更新して、 ExportValueしているリソースを修正して、元に 戻してー使う場合は変更がないもの(VPCとか) に限定する方が苦労することは少ないかと。AWS CDKはExportValueとImportValue になるパター ンが多いので注意してください! 「ご利用は計画的に」
  32. © NEC Corporation 2024 NEC Group Internal Use Only 33

    家訓5 Lambdaのバージョン全然あげてなかったなー最 新にしよう。あれーエラーになったけどロールバ ックがうまくいかない・・・ 現状のLambdaが新規作成対象外のバージョンの 場合はロールバックできずにどうしようもなくな ります。一度削除して再作成が必要に・・・ 「後の祭り」
  33. © NEC Corporation 2024 NEC Group Internal Use Only 34

    家訓6 よく設定内容分からないという場合は、一度マネ ージメントコンソールから設定してみましょう( 特にClooudWatch、StepFunctionもかな)。設定 した後、CLIで設定内容をとると大体同じ内容設 定になってるのでなんの設定入れたらいいかわか りやすいです。 「・・・・」 AWS Management Console
  34. © NEC Corporation 2024 NEC Group Internal Use Only 35

    家訓7 最後の最後はサポートに連絡です。 丁寧に何が問題か、または修正してくれるでし ょう。 「神様、仏様、サポート様」
  35. © NEC Corporation 2024 NEC Group Internal Use Only 36

    生成系AIを使うことでさらに効率化
  36. © NEC Corporation 2024 NEC Group Internal Use Only 37

    生成系AIの活用 AmazonQといいたいですが、まだ東京リージョンに来てないので Bedrockで
  37. © NEC Corporation 2024 NEC Group Internal Use Only 40

    まとめ ・IaCを活用することで、効率化、コストダウン、作業ミス軽減 に繋がる。 ・使うコツがあるので注意して使おう。 ・生成系AIを活用したら、さらに効率的!