①Lambda作成

②コードにログ記録機能を追記

③test実行

④日本語を英語に翻訳する Lambda Function を作成

⑤IAMロールで許可ポリシーを付加

⑥「おはようございます」が英語に翻訳されるか確認

⑦英語に翻訳されていることを確認

以上

 

 

 

 

 

 

 

 

①ECRのリポジトリを作成

docker build を実行する

docker push で ECR に作成したコンテナイメージをアップロード

④マネージメントコンソールの画面を確認すると、ECR にイメージがアップロードされている

 

①Dockerfileの作成

 

FROM ubuntu:18.04

# Install dependencies
RUN apt-get update && \
 apt-get -y install apache2

# Install apache and write hello world message
RUN echo 'Hello World!' > /var/www/html/index.html

# Configure apache
RUN echo '. /etc/apache2/envvars' > /root/run_apache.sh && \
 echo 'mkdir -p /var/run/apache2' >> /root/run_apache.sh && \
 echo 'mkdir -p /var/lock/apache2' >> /root/run_apache.sh && \ 
 echo '/usr/sbin/apache2 -D FOREGROUND' >> /root/run_apache.sh && \ 
 chmod 755 /root/run_apache.sh

EXPOSE 80

CMD /root/run_apache.sh

 

  • 作成するコンテナイメージの基となるベースイメージは DockerHub で公開されている Ubuntu 18.04
  • Web サーバーとして Apache HTTP Server をインストール
  • 実際の Web ページに表示するために index.html を作成
  • EXPOSE で、このコンテナは 80 ポート(HTTP) を利用することを宣言

 

②docker build でコンテナイメージ作成

 

③作成されたことを確認するために、DockerImage の一覧を確認

 

④Cloud9 の環境で、コンテナを動かす

  • -p : Cloud9 の Linux 環境の 8080 ポートを、コンテナ側の 80 番ポートと接続する指定。これによって、Cloud9 の画面上から、動かしているコンテナにアクセスするのが簡単になる
  • -d : バックグラウンド実行
  • --name : 名前の指定

⑤コンテナが稼働していることを確認

⑥curlコマンドでコンテナにアクセス

  • hello-world というタグが付いているコンテナイメージが稼働している
  • 一番最後の NAMES に表示されているものを確認
  • docker exec コマンドを実行して、コンテナの中身を確認可能

  • NAMES で確認した名前を指定
  • Dockerfile で指定した内容が反映されているか確認可能

⑦ファイルの中を確認

①Cloud9でRDS作成用のymlを記述

 

AWSTemplateFormatVersion: 2010-09-09
Description: Hands-on template for RDS

Parameters:
  VPCStack:
    Type: String
    Default: handson-cfn
  DBUser:
    Type: String
    Default: dbmaster
  DBPassword:
    Type: String
    Default: H&ppyHands0n
    NoEcho: true

  
Resources:
  DBInstance:
    Type: AWS::RDS::DBInstance
    DeletionPolicy: Delete
    Properties:
      DBInstanceClass: db.t2.micro
      AllocatedStorage: "10"
      StorageType: gp2
      Engine: MySQL
      MasterUsername: !Ref DBUser
      MasterUserPassword: !Ref DBPassword
      DBName: wordpress
      BackupRetentionPeriod: 0
      DBSubnetGroupName: !Ref DBSubnetGroup
      VPCSecurityGroups:
        - !Ref DBSecurityGroup

  DBSubnetGroup: 
    Type: AWS::RDS::DBSubnetGroup
    Properties: 
      DBSubnetGroupDescription: DB Subnet Group for Private Subnet
      SubnetIds: 
        - Fn::ImportValue: !Sub ${VPCStack}-PrivateSubnet1
        - Fn::ImportValue: !Sub ${VPCStack}-PrivateSubnet2

  DBSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties: 
      GroupDescription: !Sub ${AWS::StackName}-MySQL
      VpcId:
        Fn::ImportValue: !Sub ${VPCStack}-VPCID
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 3306
          ToPort: 3306
          CidrIp: 10.0.0.0/16


Outputs:
  DBEndpoint:
    Value: !GetAtt DBInstance.Endpoint.Address
    Export:
      Name: !Sub ${AWS::StackName}-DBEndpoint

 

②Cloud9でRDS用のスタック「handson-cfn-rds」を作成

③Cloud9でロードバランサー作成用のymlを記述

 

AWSTemplateFormatVersion: 2010-09-09
Description: Hands-on template for ALB

Parameters:
  VPCStack:
    Type: String
    Default: handson-cfn
  EC2Stack:
    Type: String
    Default: handson-cfn-ec2

Resources:
  FrontLB:
    Type: AWS::ElasticLoadBalancingV2::LoadBalancer
    Properties:
      Name: !Ref AWS::StackName
      Subnets:
        - Fn::ImportValue: !Sub ${VPCStack}-PublicSubnet1
        - Fn::ImportValue: !Sub ${VPCStack}-PublicSubnet2
      SecurityGroups: 
        - !Ref SecurityGroupLB

  FrontLBListener:
    Type: AWS::ElasticLoadBalancingV2::Listener
    Properties:
      LoadBalancerArn: !Ref FrontLB
      Port: 80
      Protocol: HTTP 
      DefaultActions: 
        - Type: forward
          TargetGroupArn: !Ref FrontLBTargetGroup

  FrontLBTargetGroup:
    Type: AWS::ElasticLoadBalancingV2::TargetGroup
    Properties:
      Name: !Sub ${AWS::StackName}-tg
      VpcId:
        Fn::ImportValue: !Sub ${VPCStack}-VPCID
      Port: 80
      Protocol: HTTP
      HealthCheckPath: /.check_alive
      Targets:
        - Id:
            Fn::ImportValue: !Sub ${EC2Stack}-EC2WebServer01

  SecurityGroupLB:
    Type: AWS::EC2::SecurityGroup
    Properties: 
      GroupDescription: !Ref AWS::StackName
      VpcId:
        Fn::ImportValue: !Sub ${VPCStack}-VPCID
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          CidrIp: 0.0.0.0/0

Outputs:
  FrontLBEndpoint:
    Value: !GetAtt FrontLB.DNSName
    Export:
      Name: !Sub ${AWS::StackName}-Endpoint

④Cloud9でロードバランサー用のスタック「handson-cfn-elb」を作成

⑤CloudFormationでRDSの作成をスタック画面で確認

⑥CloudFormationでロードバランサーの作成をスタック画面で確認

 

 

①Cloud9でhandson-cfn-ec2というスタックを作成

②CloudFormationのスタック画面で作成を確認

③UserDataシェルをEC2作成ymlに追記する

④EC2作成ymlにUserDataを追記する ※UserData: !Base64 |  パイプが必要

⑤Validateコマンドでチェック実施

⑥Updateコマンドにより更新を実施

⑦該当インスタンスのUserDataにデーターが反映されていることを確認