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

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

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

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

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を活用したら、さらに効率的!