AWS

ログイン

https://us-east-1.signin.aws.amazon.com
最初はルートアカウント認証情報を使用してサインインから入る。
ログインしたら、アカウント名 -> アカウントからアカウントIDが確認できる。

チュートリアル

https://aws.amazon.com/jp/getting-started/tutorials/

EC2

キーペア

インスタンスにsshで接続するための秘密鍵をダウンロードできる。
~/.sshに保存するのがおすすめらしい。

ssh接続

# ssh -i ~/documents/aws/MyKeyPair.pem ec2-user@111.111.111.111
ssh -i [keyの場所] ec2-user@[public ID]

Cloud Formation

CLIからスタック作成

https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack.html#synopsis

.jsonファイルを指定してスタックを作成

aws cloudformation create-stack --stack-name [stack-name] --template-body file://./[json/yaml file]
# aws cloudformation create-stack hoge --template-body file://./hoge.yaml

テンプレートにパラメータがある場合は以下のように指定する。
--parameters ParameterKey=Parm1,ParameterValue=test1 ParameterKey=Parm2,ParameterValue=test2

設定ファイルの書き方

Parameters

ユーザー名やパスワードなど、テンプレート自体には格納したくない機密情報、アプリ固有の設定などを書く。
Parametersセクションでパラメータを定義して、他の場所からref! [param-name]で参照できる。

Parameters:
  bucketName:
    Description: "name of bucket"
    Type: String
    Default: bucketNameDefault
Resources:
  S3Bucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: ref! bucketName

パラメータ参照の詳細はここ。
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html#ref-parameters

CLI

https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-chap-configure.html
マネージメントコンソールでアカウント名 -> 認証情報 から、アクセスキーとシークレットキーを発行する。

# regionの選択で、東京はap-northeast-1を入れる。
winpty aws configure

CodePipeline

CIができる。
承認機能を使ったワークフローも組める。

CodeBuild

S3にアップロードする場合はCodeBuildS3のR/W権限をつける。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::codepipeline-ap-northeast-1-*"
            ],
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:GetObjectVersion",
                "s3:GetBucketAcl",
                "s3:GetBucketLocation"
            ]
        },
        {
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::[バケット名]/*"
            ],
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:GetObjectVersion",
                "s3:GetBucketAcl",
                "s3:GetBucketLocation"
            ]
        }
    ]
}

S3

CloudFormation

最小構成

AWSTemplateFormatVersion: 2010-09-09
Resources:
  S3Bucket:
    Type: AWS::S3::Bucket
    Properties:
        BucketName: 'test-bucket'
    # Properties:
    #   AccessControl: PublicRead
    #   WebsiteConfiguration:
    #     IndexDocument: index.html
    #     ErrorDocument: error.html
    # スタックを消してもバケットは消さない
    # DeletionPolicy: Retain
#   BucketPolicy:
#     Type: AWS::S3::BucketPolicy
#     Properties:
#       PolicyDocument:
#         Id: MyPolicy
#         Version: 2012-10-17
#         Statement:
#           - Sid: PublicReadForGetBucketObjects
#             Effect: Allow
#             Principal: '*'
#             Action: 's3:GetObject'
#             Resource: !Join
#               - ''
#               - - 'arn:aws:s3:::'
#                 - !Ref S3Bucket
#                 - /*
#       Bucket: !Ref S3Bucket
AWSTemplateFormatVersion: 2010-09-09
Resources:
  S3Bucket:
    Type: AWS::S3::Bucket
    Properties:
      AccessControl: PublicRead
      WebsiteConfiguration:
        IndexDocument: index.html
        ErrorDocument: error.html
    # スタックを消してもバケットは消さない
    DeletionPolicy: Retain
  BucketPolicy:
    Type: AWS::S3::BucketPolicy
    Properties:
      PolicyDocument:
        Id: MyPolicy
        Version: 2012-10-17
        Statement:
          - Sid: PublicReadForGetBucketObjects
            Effect: Allow
            Principal: '*'
            Action: 's3:GetObject'
            Resource: !Join
              - ''
              - - 'arn:aws:s3:::'
                - !Ref S3Bucket
                - /*
      Bucket: !Ref S3Bucket
Outputs:
  WebsiteURL:
    Value: !GetAtt
      - S3Bucket
      - WebsiteURL
    Description: URL for website hosted on S3
  S3BucketSecureURL:
    Value: !Join
      - ''
      - - 'https://'
        - !GetAtt
          - S3Bucket
          - DomainName
    Description: Name of S3 bucket to hold website content

静的ウェブサイトのデプロイ

バケットポリシーの変更には S3コンソール > アクセス権限タブ > パブリックアクセス設定で、以下のチェックをはずす

  • 新規のパブリックバケットポリシーをブロックする(推奨)`
  • パブリック ACL を通じて付与されたパブリックアクセスを削除する (推奨)
  • 新規のパブリック ACL と、パブリックオブジェクトのアップロードをブロックする (推奨)

https://qiita.com/hiroyuki7/items/611d6e66831523c9ec64

バケットポリシー

読み取り専用の場合の例

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadForGetBucketObjects",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::hako1912-page1/*"
        }
    ]
}